package com.vci.web.controller; import com.vci.corba.wf.data.TasksAssignedInfo; import com.vci.pagemodel.ProcessUserVO; import com.vci.starter.web.annotation.log.VciBusinessLog; import com.vci.starter.web.pagemodel.BaseResult; import com.vci.starter.web.pagemodel.DataGrid; import com.vci.starter.web.dto.BaseModelDTO; import com.vci.dto.ProcessNodeUseDTO; import com.vci.dto.ProcessStartConfigDTO; import com.vci.web.service.WebProcessCommandServiceI; import com.vci.web.util.WebUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.*; /** * 流程执行控制 * @author weidy */ @VciBusinessLog(modelName="流程执行服务") @Controller @RequestMapping("/webProcessCommandController") public class WebProcessCommandController{ private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private WebProcessCommandServiceI proCmdService; @VciBusinessLog(operateName="执行流程") @RequestMapping("/completeTasks") @ResponseBody public BaseResult completeTasks(String taskOids, String outCome, String note, String nextTaskUserIds){ try{ proCmdService.completeTasks(taskOids, outCome, note, getProcessUserByIds(nextTaskUserIds)); return BaseResult.success(taskOids); }catch(Exception e){ BaseResult result = BaseResult.fail(WebUtil.getErrorMsg(e)); result.setObj(taskOids); return result; } } /** * 将用户名转为流程用户对象 * @param userIds 用户名 * @return */ private List getProcessUserByIds(String userIds){ List users = new ArrayList(); if(WebUtil.isNotNull(userIds)){ for(String s : userIds.split(",")){ if(WebUtil.isNotNull(s)){ ProcessUserVO pu = new ProcessUserVO(); pu.setId(s); pu.setType("user"); users.add(pu); } } } return users; } @VciBusinessLog(operateName="开始流程") @RequestMapping("/startProcess") @ResponseBody public BaseResult startProcess(ProcessStartConfigDTO config, ProcessNodeUseDTO processNodeUseDTO, BaseModelDTO variablesInfo){ try { Map> inProcessUsers = new HashMap>(); if(processNodeUseDTO != null && processNodeUseDTO.getNodeUsers()!=null){ for(String nodeName : processNodeUseDTO.getNodeUsers().keySet()){ String userIds = processNodeUseDTO.getNodeUsers().get(nodeName); inProcessUsers.put(nodeName, getProcessUserByIds(userIds)); } } proCmdService.startProcess(config, inProcessUsers, variablesInfo.getData()); return BaseResult.successMsg("发起流程成功"); } catch (Exception e) { return BaseResult.fail(WebUtil.getErrorMsg(e)); } } @VciBusinessLog(operateName="发起流程时校验数据的属性是否符合要求") @RequestMapping("/checkAttributesOnStartProcess") @ResponseBody public BaseResult checkAttributesOnStartProcess(String oids,String btmType,String attributes,String attributeValues,String primaryKeyName){ try{ proCmdService.checkAttributesOnStartProcess(oids,btmType,attributes,attributeValues,primaryKeyName); return BaseResult.successMsg("属性校验成功"); }catch (Throwable e){ return BaseResult.fail(WebUtil.getErrorMsg(e)); } } @VciBusinessLog(operateName="终止流程") @RequestMapping("/endProcess") @ResponseBody public BaseResult endProcess(String processOids,String note){ proCmdService.endProcess(processOids,note); return BaseResult.success(); } @VciBusinessLog(operateName="挂起流程") @RequestMapping("/suspendProcess") @ResponseBody public BaseResult suspendProcess(String processOids,String note){ proCmdService.suspendProcess(processOids,note); return BaseResult.success(); } @VciBusinessLog(operateName="恢复流程") @RequestMapping("/resumeProcess") @ResponseBody public BaseResult resumeProcess(String processOids){ proCmdService.resumeProcess(processOids); return BaseResult.success(); } @VciBusinessLog(operateName="查看代理信息") @RequestMapping("/getProxy") @ResponseBody public DataGrid getProxy(){ DataGrid dg = new DataGrid(); TasksAssignedInfo taskAss = proCmdService.getProxy(); if(taskAss!=null){ dg.getData().add(taskAss); dg.setLimit(1); dg.setTotal(1); } return dg; } @VciBusinessLog(operateName="开启代理") @RequestMapping("/startProxy") @ResponseBody public BaseResult startProxy(String userId,Date startTime,Date endTime) { proCmdService.beginProxy(userId, startTime, endTime,true); return BaseResult.successMsg("添加流程代理人成功"); } @VciBusinessLog(operateName="关闭代理") @RequestMapping("/endProxy") @ResponseBody public BaseResult endProxy() { proCmdService.endProxy(); return BaseResult.successMsg("停止代理成功,在代理期间被转移到代理人的任务不会自动回转"); } @VciBusinessLog(operateName="设置负责人") @RequestMapping("/setPrincipal") @ResponseBody public BaseResult setPrincipal(String taskOids,String userIds){ proCmdService.setPrincipal(taskOids, userIds); return BaseResult.successMsg("设置负责人成功"); } @VciBusinessLog(operateName="上传流程审批意见") @RequestMapping("/uploadAuditSuggestFile") @ResponseBody public BaseResult uploadAuditSuggestFile(String taskOids, MultipartFile file) throws IOException { if(file != null){ proCmdService.uploadAuditSuggestFile(taskOids, file,file.getOriginalFilename()); return BaseResult.successMsg("上传流程审批意见成功"); }else{ return BaseResult.successMsg("上传的文件是空的"); } } }