Package com.founder.fix.fixflow.service.impl

Source Code of com.founder.fix.fixflow.service.impl.FlowCenterServiceImpl

/**
*  Copyright 1996-2013 Founder International Co.,Ltd.
*
* 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.
*
* @author shao
*/
package com.founder.fix.fixflow.service.impl;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.fileupload.FileItem;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import com.founder.fix.bpmn2extensions.coreconfig.AllUserInfo;
import com.founder.fix.fixflow.core.IdentityService;
import com.founder.fix.fixflow.core.ProcessEngine;
import com.founder.fix.fixflow.core.ProcessEngineManagement;
import com.founder.fix.fixflow.core.RuntimeService;
import com.founder.fix.fixflow.core.TaskService;
import com.founder.fix.fixflow.core.impl.Page;
import com.founder.fix.fixflow.core.impl.bpmn.behavior.ProcessDefinitionBehavior;
import com.founder.fix.fixflow.core.impl.bpmn.behavior.TaskCommandInst;
import com.founder.fix.fixflow.core.impl.bpmn.behavior.UserTaskBehavior;
import com.founder.fix.fixflow.core.impl.command.ExpandTaskCommand;
import com.founder.fix.fixflow.core.impl.identity.GroupDefinition;
import com.founder.fix.fixflow.core.impl.identity.GroupTo;
import com.founder.fix.fixflow.core.impl.identity.UserTo;
import com.founder.fix.fixflow.core.impl.task.QueryExpandTo;
import com.founder.fix.fixflow.core.impl.util.DateUtil;
import com.founder.fix.fixflow.core.impl.util.StringUtil;
import com.founder.fix.fixflow.core.runtime.ProcessInstance;
import com.founder.fix.fixflow.core.runtime.ProcessInstanceQuery;
import com.founder.fix.fixflow.core.runtime.ProcessInstanceType;
import com.founder.fix.fixflow.core.task.IdentityLink;
import com.founder.fix.fixflow.core.task.TaskInstance;
import com.founder.fix.fixflow.core.task.TaskQuery;
import com.founder.fix.fixflow.service.FlowCenterService;
import com.founder.fix.fixflow.shell.CommonServiceImpl;
import com.founder.fix.fixflow.shell.FixFlowShellProxy;
import com.founder.fix.fixflow.shell.FlowUtilServiceImpl;
import com.founder.fix.fixflow.util.FileUtil;
import com.founder.fix.fixflow.util.ImageCutUtil;
import com.founder.fix.fixflow.util.JSONUtil;
import com.founder.fix.fixflow.util.Pagination;
@Scope("prototype")
@Service
public class FlowCenterServiceImpl extends CommonServiceImpl implements FlowCenterService {

  /*
    * <p>Title: queryMyTaskNotEnd</p>
    * <p>Description: </p>
    * @param filter
    * @return
    * @throws SQLException
    * @see com.founder.fix.fixflow.service.FlowCenterService#queryMyTaskNotEnd(java.util.Map)
    */
  public Map<String,Object> queryMyTaskNotEnd(Map<String, Object> filter)
      throws SQLException {
    Map<String,Object> result = new HashMap<String,Object>();
    ProcessEngine engine = getProcessEngine(filter
        .get("userId"));
   
    String whereSql = " 1=1 ";
    String leftJoinStr = "";

    QueryExpandTo queryExpandTo = new QueryExpandTo();
   
    try {
      TaskQuery tq = engine.getTaskService().createTaskQuery();
     
      tq.taskAssignee(StringUtil.getString(filter.get("userId")));
      tq.taskCandidateUser(StringUtil.getString(filter.get("userId")));
//      tq.processDefinitionKey(StringUtil.getString(filter.get("pdkey")));
     
      String descritpion = StringUtil.getString(filter.get("title"));
      if(StringUtil.isNotEmpty(descritpion))
        tq.taskDescriptionLike(descritpion);
     
      String initor     = StringUtil.getString(filter.get("initor"));
      if(StringUtil.isNotEmpty(initor))
        tq.initiator(initor);
     
      //发起人模糊匹配
      String initorName = StringUtil.getString(filter.get("initorName"));
      if (StringUtil.isNotEmpty(initorName)) {
        initorName = initorName.replace("'", "");
        ProcessEngine processEngine = ProcessEngineManagement
            .getDefaultProcessEngine();
        AllUserInfo userInfoConfig = processEngine
            .getProcessEngineConfiguration().getUserDefinition()
            .getUserInfoConfig();
        leftJoinStr += " LEFT JOIN (" + userInfoConfig.getSqlText()
            + ") UT on UT." + userInfoConfig.getUserIdField()
            + " = P.INITIATOR ";
        whereSql += " and (UT." + userInfoConfig.getUserNameField()
            + " LIKE '%" + initorName + "%'  or UT."
            + userInfoConfig.getUserIdField() + " = '"
            + initorName + "')";
      }

     
      String bizKey     = StringUtil.getString(filter.get("bizKey"));
      if(StringUtil.isNotEmpty(bizKey))
        tq.businessKeyLike(bizKey);
     
      String processDefinitionName     = StringUtil.getString(filter.get("processDefinitionName"));
      if(StringUtil.isNotEmpty(processDefinitionName))
        tq.processDefinitionNameLike(processDefinitionName);
     
      Date dates = null;
      Date datee = null;
      String dss = StringUtil.getString(filter.get("arrivalTimeS"));
      String dse = StringUtil.getString(filter.get("arrivalTimeE"));
      if(StringUtil.isNotEmpty(dss)){
        dates = DateUtil.stringToDate(dss,"yyyy-MM-dd");
      }
      if(StringUtil.isNotEmpty(dse)){
        String endTime = "235959999";
        dse += endTime;
        datee = DateUtil.stringToDate(dse,"yyyy-MM-ddHHmmssSSS");
      }
      if(dates!=null)
        tq.taskCreatedAfter(datee);
     
      if(datee!=null)
        tq.taskCreatedBefore(dates);
     
      String pageI = StringUtil.getString(filter.get("pageIndex"));
      String rowI = StringUtil.getString(filter.get("pageSize"));
     
      int pageIndex=1;
      int rowNum   =15;
      if(StringUtil.isNotEmpty(pageI)){
        pageIndex = Integer.valueOf(pageI);
      }
      if(StringUtil.isNotEmpty(rowI)){
        rowNum = Integer.valueOf(rowI);
      }
     
      if(filter.get("ended")==null)
        tq.taskNotEnd();
     
      if(StringUtil.isNotEmpty(StringUtil.getString(filter.get("agentUserId")))){
        tq.isAgent(true);
        if(filter.get("agentType").equals("1")){
          tq.taskAssignee(StringUtil.getString(filter.get("userId")));
          tq.taskCandidateUser(StringUtil.getString(filter.get("userId")));
          tq.agentId(StringUtil.getString(filter.get("agentUserId")));
        }else{
          tq.taskAssignee(StringUtil.getString(filter.get("agentUserId")));
          tq.taskCandidateUser(StringUtil.getString(filter.get("agentUserId")));
          tq.agentId(StringUtil.getString(filter.get("userId")));
        }
      }else{
        tq.taskAssignee(StringUtil.getString(filter.get("userId")));
        tq.taskCandidateUser(StringUtil.getString(filter.get("userId")));
      }
     
     
      if (StringUtil.isNotEmpty(leftJoinStr)) {
        queryExpandTo.setLeftJoinSql(leftJoinStr);
      }
      queryExpandTo.setWhereSql(whereSql);
      tq.queryExpandTo(queryExpandTo);
     
      List<TaskInstance> lts = tq.orderByTaskCreateTime().desc().listPagination(pageIndex, rowNum);
      Long count = tq.count();
      List<Map<String,Object>> instanceMaps = new ArrayList<Map<String,Object>>();
     
      Pagination page = new Pagination(pageIndex,rowNum);
      page.setTotal(count.intValue());
      IdentityService identsvz = engine.getIdentityService();
     
      for(TaskInstance tmp:lts){
        Map<String,Object> instances = tmp.getPersistentState();
//        String path = StringUtil.getString(filter.get("path"));
//        path = path+"/icon/";
//        File newFile = new File(path);
//        FileUtil.makeParent(new File(path+"ss.ss"));
//       
//        String[] icons = newFile.list();
        String userId = StringUtil.getString(instances.get("PI_START_AUTHOR"));
//        for(String tmp2:icons){
//          if(tmp2.startsWith(userId)){
//            instances.put("icon", "icon/"+tmp2);
//          }
//        }
       
//        instances.put("icon", "icon/"+userId+"_small.png");
        if(StringUtil.isNotEmpty(userId)){
          UserTo user = identsvz.getUserTo(userId);
          if(user!=null){
            instances.put("userName", user.getUserName());
          }else{
            instances.put("userName", userId+"(未知用户)");
          }
        }else{
          instances.put("userName", "(空用户名)");
        }
        instanceMaps.add(instances);
      }
      result.put("dataList", instanceMaps);
      result.put("pageInfo", page);
     
      result.put("agentUsers", getAgentUsers(engine,StringUtil.getString(filter.get("userId"))));
      result.put("agentToUsers", getAgentToUsers(engine,StringUtil.getString(filter.get("userId"))));
    } finally {
      closeProcessEngine();
    }
    return result;
  }
 
  public Map<String,Object> queryMyTaskEnded(Map<String, Object> filter)
      throws SQLException {
    filter.put("ended", "ended");
    return queryMyTaskNotEnd(filter);
  }

  public List<Map<String, String>> queryStartProcess(String userId)
      throws SQLException {
    List<Map<String, String>> result = null;
    ProcessEngine engine = getProcessEngine(userId);
    try {
      result = engine.getModelService().getStartProcessByUserId(userId);
      for(Map<String,String> tmp:result){
        String formUrl = tmp.get("startFormKey");
        //String formUrl = engine.getFormService().getStartFormByKey(pdkey);
       
        tmp.put("formUrl", formUrl);
      }
    } finally {
      closeProcessEngine();
    }

    return result;
  }
 
  public List<Map<String, String>> queryLastestProcess(String userid) throws SQLException {
    List<Map<String, String>> result = null;
    ProcessEngine engine = getProcessEngine(userid);
    try {
      result = engine.getModelService().getUserSubmitProcess(userid,5);
      for(Map<String,String> tmp:result){
        String formUrl = tmp.get("startFormKey");
        tmp.put("formUrl", formUrl);
      }
    } finally {
      closeProcessEngine();
    }

    return result;
  }

  public List<Map<String, Object>> getAgentUsers(ProcessEngine engine, String targetId) {
    return engine.getTaskService().getAgentUsersAndCount(targetId);
  }

  public List<Map<String, Object>> getAgentToUsers(ProcessEngine engine, String targetId) {
    return engine.getTaskService().getAgentToUsersAndCount(targetId);
  }

  public InputStream queryStartProcessImage(String id) throws SQLException {
    return null;
  }

  public Map<String,Object> queryTaskParticipants(Map<String,Object> filter) throws SQLException {
    filter.put("queryPart", "queryPart");
    return queryTaskInitiator(filter);
  }

  public Map<String,Object> queryTaskInitiator(Map<String,Object> filter) throws SQLException {
   
   
    Map<String,Object> resultMap = new HashMap<String,Object>();
    String userId = StringUtil.getString(filter.get("userId"));
    ProcessEngine engine = getProcessEngine(userId);
    RuntimeService runtimeService = engine.getRuntimeService();
    IdentityService identityService = engine.getIdentityService();
    FlowUtilServiceImpl flowUtil = new FlowUtilServiceImpl();
    String processDefinitionKey = StringUtil.getString(filter.get("processDefinitionKey"));
    String processInstanceId    = StringUtil.getString(filter.get("processInstanceId"));
    String title        = StringUtil.getString(filter.get("title"));
//    String subject        = StringUtil.getString(filter.get("subject"));
    String bizKey        = StringUtil.getString(filter.get("bizKey"));
    String initor        = StringUtil.getString(filter.get("initor"));
    String status        = StringUtil.getString(filter.get("status"));
    String processType       = StringUtil.getString(filter.get("processType"));
    ProcessInstanceType processInstanceStatus = FlowUtilServiceImpl.getInstanceStaus(status);
    try{
     
      String pageI = StringUtil.getString(filter.get("pageIndex"));
      String rowI = StringUtil.getString(filter.get("pageSize"));
      int pageIndex=1;
      int rowNum   =15;
      if(StringUtil.isNotEmpty(pageI)){
        pageIndex = Integer.valueOf(pageI);
      }
      if(StringUtil.isNotEmpty(rowI)){
        rowNum = Integer.valueOf(rowI);
      }
      ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
      if(StringUtil.isNotEmpty(processDefinitionKey))
        processInstanceQuery.processDefinitionKey(processDefinitionKey);
      if(StringUtil.isNotEmpty(processInstanceId))
        processInstanceQuery.processInstanceId(processInstanceId);
      if(StringUtil.isNotEmpty(title))
        processInstanceQuery.subjectLike(title);
      if(StringUtil.isNotEmpty(bizKey))
        processInstanceQuery.processInstanceBusinessKeyLike(bizKey);
      if(processInstanceStatus !=null){
        processInstanceQuery.processInstanceStatus(processInstanceStatus);
      }
      if(StringUtil.isNotEmpty(initor))
        processInstanceQuery.initiator(initor);
     
     
      if(StringUtil.isNotEmpty(processType)){
        if(processType.equals("initor"))
          processInstanceQuery.initiator(userId);
        else
          processInstanceQuery.taskParticipants(userId);
      }
     
      String processDefinitionName     = StringUtil.getString(filter.get("processDefinitionName"));
      if(StringUtil.isNotEmpty(processDefinitionName))
        processInstanceQuery.processDefinitionNameLike(processDefinitionName);
     
      processInstanceQuery.orderByUpdateTime().desc();
      Date dates = null;
      Date datee = null;
      String dss = StringUtil.getString(filter.get("startTimeS"));
      String dse = StringUtil.getString(filter.get("startTimeE"));
      if(StringUtil.isNotEmpty(dss)){
        dates = DateUtil.stringToDate(dss,"yyyy-MM-dd");
      }
      if(StringUtil.isNotEmpty(dse)){
        String endTime = "235959999";
        dse += endTime;
        datee = DateUtil.stringToDate(dse,"yyyy-MM-ddHHmmssSSS");
      }
      if(dates!=null)
        processInstanceQuery.startTimeBefore(dates);
     
      if(datee!=null)
        processInstanceQuery.startTimeAfter(datee);
     
     
      List<ProcessInstance> processInstances = processInstanceQuery.listPagination(pageIndex, rowNum);
     
      List<Map<String,Object>> instanceMaps = new ArrayList<Map<String,Object>>();
      for(ProcessInstance tmp: processInstances){
        Map<String, Object> persistentState = tmp.getPersistentState();
        String processDefinitionId = tmp.getProcessDefinitionId();
        ProcessDefinitionBehavior processDefinitionBehavior = engine.getModelService().getProcessDefinition(processDefinitionId);
        String processDefinitionName1 = processDefinitionBehavior.getName();
        persistentState.put("processDefinitionName", processDefinitionName1);
        String nowNodeInfo = flowUtil.getShareTaskNowNodeInfo(tmp.getId());
        persistentState.put("nowNodeInfo", nowNodeInfo);
        UserTo user = identityService.getUserTo(tmp.getStartAuthor());
        if(user !=null){
          persistentState.put("startAuthorName", user.getUserName());
        }else{
          persistentState.put("startAuthorName", tmp.getStartAuthor());
        }
        instanceMaps.add(persistentState);
      }
      Long count = processInstanceQuery.count();
      Pagination page = new Pagination(pageIndex,rowNum);
      page.setTotal(count.intValue());
      resultMap.put("dataList", instanceMaps);
      resultMap.put("pageInfo", page);
    }finally{
      closeProcessEngine();
    }
    return resultMap;
  }
 
  /*
   * 归档任务
   * */
  public Map<String,Object> queryPlaceOnFile(Map<String,Object> filter) throws SQLException {
    Map<String,Object> result = new HashMap<String,Object>();
    String userId = (String) filter.get("userId");
    String processType = StringUtil.getString(filter.get("processType"));
   
    ProcessEngine engine = getProcessEngine(userId);
    try{
      ProcessInstanceQuery tq = engine.getRuntimeService()
          .createProcessInstanceQuery();
     
      String bizKey = StringUtil.getString(filter.get("BIZ_KEY"))//业务数据
      if(StringUtil.isNotEmpty(bizKey))
        tq.processInstanceBusinessKey(bizKey);
     
      String initor = StringUtil.getString(filter.get("initor"))//发起人
      if(StringUtil.isNotEmpty(initor))
        tq.initiator(initor);
     
      Date dates = null;
      Date datee = null;
      String dss = StringUtil.getString(filter.get("arrivalTimeS"));
      String dse = StringUtil.getString(filter.get("arrivalTimeE"));
      if(StringUtil.isNotEmpty(dss)){
        dates = DateUtil.stringToDate(dss,"yyyy-MM-dd");
      }
      if(StringUtil.isNotEmpty(dse)){
        String endTime = "235959999";
        dse += endTime;
        datee = DateUtil.stringToDate(dse,"yyyy-MM-ddHHmmssSSS");
      }
      if(dates!=null)
        tq.archiveTimeBefore(dates);
       
     
      if(datee!=null)
        tq.archiveTimeAfter(datee);
     
      String processDefinitionKey = StringUtil.getString(filter.get("processDefinitionKey"))//流程定义
      if(StringUtil.isNotEmpty(processDefinitionKey))
        tq.processDefinitionKey(processDefinitionKey);
     
      String processInstanceId = StringUtil.getString(filter.get("processInstanceId"))//流程实例号
      if(StringUtil.isNotEmpty(processInstanceId))
        tq.processInstanceId(processInstanceId);
     
      String subject = StringUtil.getString(filter.get("subject"))//主题
      if(StringUtil.isNotEmpty(subject))
        tq.subjectLike(subject);
     
      String pageI = StringUtil.getString(filter.get("pageIndex"));
      String rowI = StringUtil.getString(filter.get("pageSize"));
     
      int pageIndex=1;
      int rowNum   =15;
      if(StringUtil.isNotEmpty(pageI)){
        pageIndex = Integer.valueOf(pageI);
      }
      if(StringUtil.isNotEmpty(rowI)){
        rowNum = Integer.valueOf(rowI);
      }
     
      if(filter.get("ended")!=null)
        tq.isEnd();
     
      List<ProcessInstance> instances = null;
      if(StringUtil.isNotEmpty(processType)){
        if(processType.equals("initor"))
          tq.initiator(userId);
        else
          tq.taskParticipants(userId);
      }
      tq.his();
      instances = tq.listPagination(pageIndex, rowNum);

      Long count = tq.count();
      List<Map<String,Object>> instanceMaps = new ArrayList<Map<String,Object>>();
      Pagination page = new Pagination(pageIndex,rowNum);
      page.setTotal(count.intValue());
      IdentityService identityService = engine.getIdentityService();
      for(ProcessInstance tmp:instances){
        Map<String, Object> persistentState = tmp.getPersistentState();
        ProcessEngine processEngine = ProcessEngineManagement.getDefaultProcessEngine();
        String processDefinitionId = tmp.getProcessDefinitionId();
        ProcessDefinitionBehavior processDefinitionBehavior = processEngine.getModelService().getProcessDefinition(processDefinitionId);
        String processDefinitionName = processDefinitionBehavior.getName();
        persistentState.put("processDefinitionName", processDefinitionName);
       
       
       
        UserTo user = identityService.getUserTo(tmp.getStartAuthor());
        if(user !=null){
          persistentState.put("startAuthorName", user.getUserName());
        }else{
          persistentState.put("startAuthorName", tmp.getStartAuthor());
        }
        instanceMaps.add(persistentState);
      }
      result.put("dataList", instanceMaps);
      result.put("pageInfo", page);
    }finally{
      closeProcessEngine();
    }
    return result;
  }
 
  public Map<String,Object> getTaskDetailInfoSVG(Map<String,Object> filter) throws SQLException{
    Map<String,Object> result = new HashMap<String,Object>();
    Map<String,Object> tmpMap = getTaskDetailInfo(filter);
    result.putAll(tmpMap);
   
    String processInstanceId = StringUtil.getString(filter.get("processDefinitionId"));
    String processDefinitionKey = StringUtil.getString(filter.get("processDefinitionKey"));
   
    String userId = (String) filter.get("userId");
    ProcessEngine engine = getProcessEngine(userId);
    String svgFlow = null;
   
    try{
      if(StringUtil.isNotEmpty(processInstanceId))
        svgFlow = engine.getModelService().getFlowGraphicsSvg(processInstanceId);
      else
        svgFlow = engine.getModelService().getFlowGraphicsSvgByDefKey(processDefinitionKey);
     
      result.put("flowGraph", svgFlow);
    }finally{
      closeProcessEngine();
    }
   
    return result;
  }
 
  public Map<String,Object> getTaskDetailInfo(Map<String,Object> filter) throws SQLException{
    String processInstanceId = StringUtil.getString(filter.get("processInstanceId"));
   
    Map<String,Object> result = new HashMap<String,Object>();
    if(StringUtil.isNotEmpty(processInstanceId)){
      String userId = (String) filter.get("userId");
      ProcessEngine engine = getProcessEngine(userId);
      ProcessInstance processInstance = engine.getRuntimeService().getProcessInstance(processInstanceId);
      String processName = processInstance.getProcessDefinition().getName();
      try{
        TaskQuery tq = engine.getTaskService().createTaskQuery();
        IdentityService identityService = engine.getIdentityService();
        tq.processInstanceId(processInstanceId);
        tq.taskIsEnd().orderByEndTime().asc();
        List<TaskInstance> instances = tq.list();
        List<Map<String,Object>> instanceMaps = new ArrayList<Map<String,Object>>();
        for(TaskInstance tmp:instances){
          Map<String,Object> instanceMap = tmp.getPersistentState();
          String assigneeUserId = tmp.getAssignee();
          if(StringUtil.isNotEmpty(assigneeUserId)){
            UserTo tmpUser = identityService.getUserTo(assigneeUserId);
            if(tmpUser!=null){
              instanceMap.put("assgneeUserName", tmpUser.getUserName());
            }
          }else{
            instanceMap.put("assgneeUserName", "(空用户名)");
          }
          instanceMaps.add(instanceMap);
        }
        tq.taskNotEnd().orderByTaskCreateTime().asc();
        List<TaskInstance> instancesNotEnd = tq.list();
       
        List<Map<String,Object>> notEndInstanceMaps = new ArrayList<Map<String,Object>>();
        for(TaskInstance tmp:instancesNotEnd){
          Map<String,Object> instanceMap = tmp.getPersistentState();
          String assigneeUserId = tmp.getAssignee();
          if(StringUtil.isNotEmpty(assigneeUserId)){
            UserTo tmpUser = identityService.getUserTo(assigneeUserId);
            if(tmpUser!=null){
              instanceMap.put("assgneeUserName", tmpUser.getUserName());
            }
          }else{
            instanceMap.put("assgneeUserName", "(空用户名)");
          }
          notEndInstanceMaps.add(instanceMap);
        }
        Map<String,Map<String,Object>> postionMap = engine.getModelService().GetFlowGraphicsElementPosition(processInstance.getProcessDefinitionId());
        result.put("notEnddataList", notEndInstanceMaps);
        result.put("dataList", instanceMaps);
        result.put("positionInfo", JSONUtil.parseObject2JSON(postionMap));
        result.put("taskEndedJson", JSONUtil.parseObject2JSON(instanceMaps));
        result.put("taskNotEndJson", JSONUtil.parseObject2JSON(instancesNotEnd));
        result.put("processName", processName);
       
      }finally{
        closeProcessEngine();
      }
    }
    return result;
  }
 
 
  public InputStream getFlowGraph(Map<String,Object> filter) throws SQLException{
    String processInstanceId = StringUtil.getString(filter.get("processDefinitionId"));
    String processDefinitionKey = StringUtil.getString(filter.get("processDefinitionKey"));
    InputStream result = null;
   
    String userId = (String) filter.get("userId");
    ProcessEngine engine = getProcessEngine(userId);
   
    try{
      if(StringUtil.isNotEmpty(processInstanceId))
        result = engine.getModelService().GetFlowGraphicsImgStreamByDefId(processInstanceId);
      else
        result = engine.getModelService().GetFlowGraphicsImgStreamByDefKey(processDefinitionKey);
    }finally{
      closeProcessEngine();
    }
   
    return result;
  }
 
  public Map<String,Object> getUserInfo(Map<String,Object> filter) throws SQLException, IOException{
    Map<String,Object> result= new HashMap<String,Object>();
    UserTo user = null;
    String userId = (String) filter.get("userId");
    ProcessEngine engine = getProcessEngine(userId);
   
    String path = StringUtil.getString(filter.get("path"));
    path = path+"/icon/";
    String tuserId = (String)filter.get("targetUserId");
    if(StringUtil.isNotEmpty(tuserId)){
      userId = tuserId;
    }
   
    FileUtil.makeParent(new File(path+"ss.ss"));
    result.put("icon", "icon/"+userId+".png");
   
    try{
      user = engine.getIdentityService().getUserTo(userId);
      List<GroupTo> groups = engine.getIdentityService().getUserInGroups(userId);
      result.put("user", user);
      result.put("groups", groups);
    }finally{
      closeProcessEngine();
    }
    return result;
  }
 
  public void saveUserIcon(Map<String,Object> filter) throws IOException{
    FileItem is = (FileItem)filter.get("icon");
    String userId = (String) filter.get("userId");
    String path = StringUtil.getString(filter.get("path"));
    String ex = FileUtil.getFileEx(is.getName());
    path = path+"/icon/"+userId+"."+ex;
   
    File newFile = new File(path);
    FileUtil.makeFile(newFile);
      BufferedInputStream bis = null;  
      FileOutputStream fos = null;
      int BUFFER_SIZE = 4096;
      byte[] buf = new byte[BUFFER_SIZE];  
      int size = 0;  
      InputStream file = is.getInputStream();
      bis = new BufferedInputStream(file);  
      fos = new FileOutputStream(newFile);

      try{
        while ( (size = bis.read(buf)) != -1)   {
          fos.write(buf, 0, size);
          fos.flush();
        }
      }finally{
        file.close();
        fos.close();
        bis.close();
      }
  }
 

  public Map<String,Object> GetFlowRefInfo(Map<String,Object> filter) throws SQLException {
    Map<String,Object> result = new HashMap<String,Object>();
    List<Map<String,Object>> tmpres = new ArrayList<Map<String,Object>>();
    ProcessEngine engine = getProcessEngine(filter.get("userId"));
    try{
      String taskId = (String)filter.get("taskId");
      String processDefinitionKey = (String)filter.get("processDefinitionKey");
  //    taskId.replaceAll(regex, replacement)
      List<TaskCommandInst> list = null;
      if(StringUtil.isNotEmpty(taskId)){
        list = engine.getTaskService().GetTaskCommandByTaskId(taskId, false);
      }else{
        list = engine.getTaskService().getSubTaskTaskCommandByKey(processDefinitionKey);
      }
      for(TaskCommandInst tmp:list){
        tmpres.add(tmp.getPersistentState());
      }
      result.put("commandList", tmpres);
    }finally{
      closeProcessEngine();
    }
    return result;
  }
 
  public ProcessInstance completeTask(Map<String,Object> params) throws SQLException{
    String taskId = StringUtil.getString(params.get("taskId"));
    String commandType = StringUtil.getString(params.get("commandType"));
    String commandId = StringUtil.getString(params.get("commandId"));
    String processDefinitionKey = StringUtil.getString(params.get("processDefinitionKey"));
    String businessKey = StringUtil.getString(params.get("businessKey"));
    String userId = StringUtil.getString(params.get("userId"));
    String taskComment = StringUtil.getString(params.get("_taskComment"));
    Map<String,Object> taskParams = null;
    Object tmpParams = params.get("taskParams");
    if(tmpParams instanceof Map)
      taskParams = (Map<String,Object>)tmpParams;
    else
      taskParams = new HashMap<String,Object>();
   
    ExpandTaskCommand expandTaskCommand = new ExpandTaskCommand();
   

    //命令类型,可以从流程引擎配置中查询   启动并提交为startandsubmit
    expandTaskCommand.setCommandType(commandType);
    //设置提交人
    expandTaskCommand.setInitiator(userId);
    //设置命令的id,需和节点上配置的按钮编号对应,会执行按钮中的脚本。
    expandTaskCommand.setUserCommandId(commandId);
    expandTaskCommand.setTaskComment(taskComment);
    if(StringUtil.isNotEmpty(taskId)){
      expandTaskCommand.setTaskId(taskId);
    }else{
      expandTaskCommand.setProcessDefinitionKey(processDefinitionKey);
      //设置流程的业务关联键
      expandTaskCommand.setBusinessKey(businessKey);
    }
    expandTaskCommand.setParamMap(taskParams);

    ProcessEngine engine = getProcessEngine(userId);
    ProcessInstance processInstance = null;
    try{
      processInstance = (ProcessInstance)engine.getTaskService().expandTaskComplete(expandTaskCommand, null);
    }finally{
      closeProcessEngine();
    }
    return processInstance;
  }
 
 
  public void cutUserIcon(Map<String,Object> params) throws IOException{
    String userId = (String) params.get("userId");
    String path = StringUtil.getString(params.get("path"));
    String scaled = StringUtil.getString(params.get("scaled"));
    Map<String,Object> map = JSONUtil.parseJSON2Map(scaled);
    int x = Integer.valueOf(StringUtil.getString(map.get("x")));
    int y = Integer.valueOf(StringUtil.getString(map.get("y")));
    int w = Integer.valueOf(StringUtil.getString(map.get("w")));
    int h = Integer.valueOf(StringUtil.getString(map.get("h")));
    path = path+"/icon/";
    File newFile = new File(path);
    FileUtil.makeParent(new File(path+"ss.ss"));
   
    String[] icons = newFile.list();
    for(String tmp:icons){
      if(tmp.startsWith(userId)){
        path +=tmp;
      }
    }
   
    ImageCutUtil icu = new ImageCutUtil(path,x,y,w,h);
    icu.setSubpath(path);
    icu.cut();
  }
 
  public Map<String, Object> getAllUsers(Map<String, Object> params) throws SQLException {
    Map<String,Object> resultMap = new HashMap<String,Object>();
    String userId = StringUtil.getString(params.get("userId"));
    String queryInfo = StringUtil.getString(params.get("queryInfo"));
    ProcessEngine processEngine = getProcessEngine(userId);
    IdentityService identityService = processEngine.getIdentityService();
    try{
      String pageI = StringUtil.getString(params.get("pageIndex"));
      String rowI = StringUtil.getString(params.get("pageSize"));
      int pageIndex=1;
      int rowNum   =15;
      if(StringUtil.isNotEmpty(pageI)){
        pageIndex = Integer.valueOf(pageI);
      }
      if(StringUtil.isNotEmpty(rowI)){
        rowNum = Integer.valueOf(rowI);
      }
     
      Map<String,Object> queryMap = new HashMap<String,Object>();
      String queryUserId = StringUtil.getString(params.get("queryUserId"));
      if(StringUtil.isNotEmpty(queryUserId)){
        queryMap.put("USERID", queryUserId);
      }
      String queryUserName = StringUtil.getString(params.get("queryUserName"));
      if(StringUtil.isNotEmpty(queryUserName)){
        queryMap.put("USERNAME", queryUserName);
      }
      if(StringUtil.isNotEmpty(queryInfo)){
        queryMap.put("USERID", queryInfo);
        queryMap.put("USERNAME", queryInfo);
      }
      int firstResult = rowNum*(pageIndex-1)+1;//起始行
      int maxResults = pageIndex*rowNum;//结束行
      Map<String,Object> userListMap = identityService.getUserTos(new Page(firstResult,maxResults), queryMap);
      List<UserTo> userTos = (List<UserTo>)userListMap.get("userList");
      int count = (Integer)userListMap.get("count");
      List<Map<String,Object>> userList = new ArrayList<Map<String,Object>>();
      Pagination page = new Pagination(pageIndex,rowNum);
      page.setTotal(count);
      if(userTos!=null){
        for(UserTo user:userTos){
          Map<String,Object> userMap = user.getPropertyMap();
          userList.add(userMap);
        }
      }
      resultMap.put("dataList", userList);
      resultMap.put("pageInfo", page);
    }finally{
      closeProcessEngine();
    }
    return resultMap;
  }
 
  public Map<String, Object> getRollbackNode(Map<String,Object> params) throws SQLException{
    Map<String,Object> resultMap = new HashMap<String,Object>();
    String userId = StringUtil.getString(params.get("userId"));
    String taskId = StringUtil.getString(params.get("taskId"));
    ProcessEngine processEngine = getProcessEngine(userId);
    TaskService taskService = processEngine.getTaskService();
    List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>();
    try{
      List<UserTaskBehavior> userTaskBehaviors = taskService.getRollBackNode(taskId);
      for(UserTaskBehavior node :userTaskBehaviors){
        Map<String,Object> nodeMap = new HashMap<String,Object>();
        nodeMap.put("nodeId", node.getId());
        nodeMap.put("nodeName", node.getName());
        resultList.add(nodeMap);
      }
    }finally{
      closeProcessEngine();
    }
    resultMap.put("dataList", resultList);
    return resultMap;
  }
 
  public Map<String, Object> getRollbackTask(Map<String, Object> params) throws SQLException {
    Map<String,Object> resultMap = new HashMap<String,Object>();
    String userId = StringUtil.getString(params.get("userId"));
    String taskId = StringUtil.getString(params.get("taskId"));
    ProcessEngine processEngine = getProcessEngine(userId);
    TaskService taskService = processEngine.getTaskService();
    IdentityService identityService = processEngine.getIdentityService();
    List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>();
    try{
      List<TaskInstance> taskInstances = taskService.getRollBackTask(taskId);
      for(TaskInstance task :taskInstances){
        Map<String,Object> taskMap = new HashMap<String,Object>();
        taskMap.put("taskId", task.getId());
        taskMap.put("taskName", task.getName());
        taskMap.put("startTime", task.getCreateTime());
        taskMap.put("endTime", task.getEndTime());
        UserTo user = identityService.getUserTo(task.getAssignee());
        taskMap.put("assignee", task.getAssignee());
        if(user !=null){
          taskMap.put("assigneeUserName", user.getUserName());
        }
        resultList.add(taskMap);
      }
    }finally{
      FixFlowShellProxy.closeProcessEngine(processEngine, true);
    }
    resultMap.put("dataList", resultList);
    return resultMap;
  }
 
 
}
TOP

Related Classes of com.founder.fix.fixflow.service.impl.FlowCenterServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.