Java tutorial
/* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.sliu.framework.app.process.controller; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.zip.ZipInputStream; import javax.servlet.http.HttpServletResponse; import org.activiti.engine.HistoryService; import org.activiti.engine.RepositoryService; import org.activiti.engine.history.HistoricActivityInstance; import org.activiti.engine.repository.ProcessDefinition; import org.apache.commons.io.FilenameUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; 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.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import com.bpm.engine.extend.diagram.ProcessDiagramGeneratorExtend; import com.likegene.framework.core.BaseController; import com.sliu.framework.app.common.dao.support.Pagination; import com.sliu.framework.app.process.dao.BusinessXNDao; import com.sliu.framework.app.process.service.ProcessXNService; import com.sliu.framework.app.process.support.file.FileCommonOperate; import com.sliu.framework.app.util.ResponseData; /** * @author zhangyi */ @Controller @RequestMapping("cps/processXN") public class ProcessXNController extends BaseController { @Value(value = "${file.store.path}") private String deployFilePath; @Autowired private RepositoryService repositoryService; @Autowired private HistoryService historyService; @Autowired private ProcessXNService processService; @Autowired private ProcessDiagramGeneratorExtend generatorExtend; @Autowired private BusinessXNDao businessDao; @RequestMapping(value = "/deployProcessPage") public String openDeployPage() { // return "/sys/SysUser/deployprocess"; return "/cps/process/deployProcess"; } /** * ??? * @return */ @RequestMapping(value = "/runningProcess") public String openRunningProcessPage() { return "/cps/process/runningProcess"; } /** * ??? * @return */ @RequestMapping(value = "/historyProcess") public String openHistoryProcessPage() { return "/cps/process/historyProcess"; } /** * ???() * @return */ @RequestMapping(value = "/involvedProcess") public String openInvolvedProcessProcessPage() { return "/cps/process/involvedProcess"; } /** * ??j?() * * @return */ @RequestMapping(value = "/involvedProcessSCRY") public String involvedProcessSCRY() { return "/cps/process/involvedProcessSCRY"; } /** * ??j?() * * @return */ @RequestMapping(value = "/involvedProcessJSZJ") public String involvedProcessJSZJ() { return "/cps/process/involvedProcessJSZJ"; } /** * ??j?() * * @return */ @RequestMapping(value = "/involvedProcessPTYG") public String involvedProcessPTYG() { return "/cps/process/involvedProcessPTYG"; } /** * ??j?() * ?? * @return */ @RequestMapping(value = "/involvedProcessXMJL") public String pendWorkPoolIndexXMJL() { return "/cps/process/involvedProcessXMJL"; } /** * ??j?() * ?? * @return */ @RequestMapping(value = "/involvedProcessBMJL") public String involvedProcessBMJL() { return "/cps/process/involvedProcessBMJL"; } /** * ?? * @return */ @RequestMapping(value = "/myProcess") public String openMyProcessPage() { return "/cps/process/myProcess"; } /** * ??ID???????? * @param processInstanceId ?ID * @param hisFlag ??? 1: , 0:? * @return */ @RequestMapping(value = "/showProcessTrack") public ModelAndView showProcessTrack(String processInstanceId, Integer hisFlag) { String showProcessUrl = ""; ModelAndView modelAndView = new ModelAndView("/cps/process/showProcessTrack"); if (hisFlag == 1) { showProcessUrl = "/cps/processXN/showHistoryProcessImage?processInstanceId=" + processInstanceId; } else if (hisFlag == 0) { List<Map<String, Object>> runningAct = new ArrayList<Map<String, Object>>(); showProcessUrl = "/cps/processXN/showProcessImage?processInstanceId=" + processInstanceId; List<HistoricActivityInstance> activityInstances = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId).orderByActivityId().asc().list(); for (HistoricActivityInstance historicActivityInstance : activityInstances) { if (historicActivityInstance.getEndTime() == null) {// ? Boolean flag = true; Map<String, Object> tempMap = new HashMap<String, Object>(); tempMap.put("actName", historicActivityInstance.getActivityName()); if (runningAct.size() > 0) { for (Map<String, Object> map : runningAct) { if (map.get("actName").toString() .equalsIgnoreCase(historicActivityInstance.getActivityName())) { flag = false; } } } if (flag) { runningAct.add(tempMap); } } } modelAndView.addObject("runningAct", runningAct); } modelAndView.addObject("showProcessUrl", showProcessUrl); return modelAndView; } @RequestMapping(value = "/showProcessOption/{businessKey}") public ModelAndView showProcessInfo(@PathVariable String businessKey) { ModelAndView modelAndView = new ModelAndView("/cps/process/showProcessOption"); //??? if (StringUtils.hasText(businessKey)) { modelAndView.addObject("businessKey", businessKey); Map<String, Object> mapBusi = businessDao.getTestProcess(businessKey); modelAndView.addObject("mapBusi", mapBusi); } return modelAndView; } /** * ?,??????API */ @RequestMapping(value = "/deployProcess", method = RequestMethod.POST) @ResponseBody public String deployProcess(@RequestParam("attachMentFile") MultipartFile multipartFile) throws FileNotFoundException { if (multipartFile != null && multipartFile.getSize() != 0) { //,??? FileCommonOperate fileCommonOperate = new FileCommonOperate(); try { String fileName = fileCommonOperate.uploadFile(multipartFile.getInputStream(), deployFilePath, multipartFile.getOriginalFilename()); InputStream fileInputStream = multipartFile.getInputStream(); String extension = FilenameUtils.getExtension(fileName); if (extension.equals("zip") || extension.equals("bar")) { ZipInputStream zip = new ZipInputStream(fileInputStream); repositoryService.createDeployment().addZipInputStream(zip).deploy(); } else { repositoryService.createDeployment().addInputStream(fileName, fileInputStream).deploy(); } } catch (IOException e) { e.printStackTrace(); } } return "{success:true}"; } /** * ???,ACT_RE_PROCDEF? */ @RequestMapping(value = "/getDeployProcessList", method = RequestMethod.POST) @ResponseBody public Pagination<Map<String, Object>> getDeployProcessList(Integer start, Integer limit) { return processService.getDeployProcessList(start, limit); } /** * ?ID?? * * @param processDefinitionId ? * @param resourceType ?(xml|image) * @throws Exception */ @RequestMapping(value = "/resource/read") public void loadByDeployment(@RequestParam("processDefinitionId") String processDefinitionId, @RequestParam("resourceType") String resourceType, HttpServletResponse response) throws Exception { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .processDefinitionId(processDefinitionId).singleResult(); String resourceName = ""; if (resourceType.equals("image")) { resourceName = processDefinition.getDiagramResourceName(); } else if (resourceType.equals("xml")) { resourceName = processDefinition.getResourceName(); } InputStream resourceAsStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), resourceName); byte[] b = new byte[1024]; int len = -1; while ((len = resourceAsStream.read(b, 0, 1024)) != -1) { response.getOutputStream().write(b, 0, len); } } /** * ??? */ @RequestMapping(value = "/runningProcess/list", method = RequestMethod.POST) @ResponseBody public Pagination<Map<String, Object>> getRunningProcessList(Integer start, Integer limit, String bkhr, String khqh) { return processService.getRunningProcessList(start, limit, bkhr, khqh); } /** * ??ID? */ @RequestMapping(value = "/suspendProcessInst", method = RequestMethod.POST) @ResponseBody public ResponseData suspendProcessInst(String processInstanceId) { processService.suspendProcessInst(processInstanceId); return ResponseData.SUCCESS_NO_DATA; } /** * ??ID? */ @RequestMapping(value = "/activateProcessInst", method = RequestMethod.POST) @ResponseBody public ResponseData activateProcessInst(String processInstanceId) { processService.activateProcessInst(processInstanceId); return ResponseData.SUCCESS_NO_DATA; } /** * ??ID?,????? */ @RequestMapping(value = "/activateProcessDefinition", method = RequestMethod.POST) @ResponseBody public ResponseData activateProcessDefinition(String processDefinitionId) { processService.activateProcessDefinition(processDefinitionId); return ResponseData.SUCCESS_NO_DATA; } /** * ??ID?,????? */ @RequestMapping(value = "/suspendProcessDefinition", method = RequestMethod.POST) @ResponseBody public ResponseData suspendProcessDefinition(String processDefinitionId) { processService.suspendProcessDefinition(processDefinitionId); return ResponseData.SUCCESS_NO_DATA; } /** * ???? */ @RequestMapping(value = "/involvedProcess/list", method = RequestMethod.POST) @ResponseBody public Pagination<Map<String, Object>> getInvolvedProcess(Integer start, Integer limit, String bkhr, String khqh, String rolekind) { return processService.getInvolvedProcess(start, limit, bkhr, khqh, rolekind); } /** * ?? * @param processInstanceId ?ID * @param deleteReason * @return */ @RequestMapping(value = "/forceOverProcess", method = RequestMethod.POST) @ResponseBody public ResponseData forceOverProcess(String processInstanceId, String deleteReason, String bkhr, String khqh, String bdlcid, String tname) { processService.forceOverProcess(processInstanceId, deleteReason, bkhr, khqh, bdlcid, tname); return ResponseData.SUCCESS_NO_DATA; } /** * ????? * @param start * @param limit * @return */ @RequestMapping(value = "/historyProcess/list", method = RequestMethod.POST) @ResponseBody public Pagination<Map<String, Object>> getHistoryProcessList(Integer start, Integer limit, String bkhr, String khqh) { return processService.getHistoryProcessList(start, limit, bkhr, khqh); } /** * ??,? * @param processDefinitionId * @param processInstanceId */ @RequestMapping(value = "/showProcessImage") public void showProcessImage(String processInstanceId, HttpServletResponse resp) { try { // InputStream inputStream = processService.showProcessImage(processInstanceId); InputStream inputStream = generatorExtend.generateDiagram(processInstanceId); if (inputStream != null) { resp.setContentType("image/png"); OutputStream out = resp.getOutputStream(); try { byte[] bs = new byte[1024]; int n = 0; while ((n = inputStream.read(bs)) != -1) { out.write(bs, 0, n); } out.flush(); } catch (Exception ex) { ex.printStackTrace(); } finally { inputStream.close(); out.close(); } } } catch (IOException e) { e.printStackTrace(); } } /** * ?? * @param processInstanceId * @param resp */ @RequestMapping(value = "/showHistoryProcessImage") public void showHistoryProcessImage(String processInstanceId, HttpServletResponse resp) { try { // InputStream inputStream =processService.showHistoryProcessImage(processInstanceId); InputStream inputStream = generatorExtend.generateHistoryDiagram(processInstanceId); if (inputStream != null) { resp.setContentType("image/png"); OutputStream out = resp.getOutputStream(); try { byte[] bs = new byte[1024]; int n = 0; while ((n = inputStream.read(bs)) != -1) { out.write(bs, 0, n); } out.flush(); } catch (Exception ex) { ex.printStackTrace(); } finally { inputStream.close(); out.close(); } } } catch (IOException e) { e.printStackTrace(); } } /** * ???? * @param start * @param limit * @return */ @RequestMapping(value = "/myProcess/list", method = RequestMethod.POST) @ResponseBody public Pagination<Map<String, Object>> getMyProcess(Integer start, Integer limit, String bkhr, String khqh) { return processService.getMyProcess(start, limit, bkhr, khqh); } }