com.sliu.framework.app.process.controller.ProcessXNController.java Source code

Java tutorial

Introduction

Here is the source code for com.sliu.framework.app.process.controller.ProcessXNController.java

Source

/* 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);
    }

}