package com.example.expense.expensereport.web; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.apache.struts2.ServletActionContext; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper; import org.springframework.beans.factory.annotation.Autowired; import com.example.expense.base.utils.Util; import com.example.expense.entity.ExpenseReport; import com.example.expense.expensereport.service.ExpenseReportManager; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.api.entity.Department; import com.norteksoft.product.api.entity.Document; import com.norteksoft.product.api.entity.TaskPermission; import com.norteksoft.product.api.entity.User; import com.norteksoft.product.api.entity.WorkflowDefinition; import com.norteksoft.product.api.entity.WorkflowTask; import com.norteksoft.product.orm.Page; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.PageUtils; import com.norteksoft.product.util.ParameterUtils; import com.norteksoft.product.util.ThreadParameters; import com.norteksoft.product.web.struts2.CrudActionSupport; import com.norteksoft.product.web.wf.WorkflowActionSupport; import com.norteksoft.wf.base.enumeration.CompleteTaskTipType; @Namespace("/expense-report") @ParentPackage("default") @Results({ @Result(name = CrudActionSupport.RELOAD, location = "expense-report", type = "redirectAction") }) public class ExpenseReportAction extends WorkflowActionSupport<ExpenseReport> { private static final long serialVersionUID = 1L; private Long id; private String deleteIds; private String leaderId;//第二环节选择领导(第三个环节办理人) private Long entityId; private ExpenseReport expenseReport; private Page<ExpenseReport> page; private List<User> userList = new ArrayList<User>(); //加签userlist protected boolean opinionflag=false;//false为不同意,true为同意 protected boolean submitflag=false;//提交意见 private String editType;//编辑 private String opinion;// 意见 private boolean submitFlag=false;//表示是否已提交 private boolean saveTaskFlag=false;//任务保存标志 private String userIds; //加签的人员名 private boolean urgenFlag;//应急处理标识 private String sendPerson;// 消息发送人 private String sendLoginName;// 消息发送人登录名 private String recieveLoginName;// 接收消息登录名 private String sendType;// 发送类型 private String sendContent;// 发送内容 private String addSignPerson;//加签人员 private String cutPersons;//减签人员 private List<String[]> handerList = new ArrayList<String[]>();//减签环节办理人list private List<WorkflowTask> cutsignList ;//减签环节办理人list private Long userId;//用户登陆名 private boolean ifFirst = false;//是否是第一环节 private String taches; //选择环节时用 private List<String[]> tacheList = new ArrayList<String[]>(); private String tacheCode;//环节编号 private List<WorkflowDefinition> applicationDefs = new ArrayList<WorkflowDefinition>(); private String assignee; //指派人 private String submitResult;//任务提交结果 private String runAsUser; private Document document;//文件 @Autowired private ExpenseReportManager expenseReportManager; /** * 提交流程 */ @Override @Action("submit-process") public String submitProcess() { CompleteTaskTipType completeTaskTipType=null; //设置文档创建人的直属上级姓名 User user = ApiFactory.getDataDictService().getDirectLeader(ContextUtils.getUserId()); if(user!=null){ expenseReport.setDirectLeaderName(user.getName()); }else{ expenseReport.setDirectLeaderName("空"); } try{ completeTaskTipType = expenseReportManager.submitProcess(expenseReport,"发起报销","expense-report"); }catch(RuntimeException de){ de.printStackTrace(); } submitResult=expenseReportManager.getCompleteTaskTipType(completeTaskTipType,expenseReport); return "input"; } /** * 完成任务 */ @Override @Action("complete-task") public String completeTask() { CompleteTaskTipType completeTaskTipType=null; try{ completeTaskTipType = expenseReportManager.completeTask(expenseReport, taskId, taskTransact); }catch(RuntimeException de){ de.printStackTrace(); } return this.renderText(expenseReportManager.getCompleteTaskTipType(completeTaskTipType,expenseReport)); } /** * 完成交互任务:用于选人、选环节、填意见 * @return */ @Action("expense-distributeTask") @Override public String completeInteractiveTask(){ CompleteTaskTipType completeTaskTipType=null; String str=expenseReportManager.getOpinion(opinion,submitflag,opinionflag);//得到意见 List<String> lists = new ArrayList<String>(); try{ if(leaderId!=null&&!leaderId.isEmpty()){//leaderName:记录的是用户id lists.add(leaderId); completeTaskTipType = expenseReportManager.distributeTask(taskId,lists,str); }else if(userIds!=null&&!userIds.isEmpty()){//加签批示传阅人员 String[] uids = userIds.split("_"); if(uids.length>0)lists.addAll(Arrays.asList(uids)); expenseReportManager.addSigner(taskId, lists); completeTaskTipType = expenseReportManager.distributeTask(taskId,new ArrayList<String>(),str); }else if(tacheCode!=null){ completeTaskTipType = expenseReportManager.distributeTask(taskId, tacheCode,str); }else{ completeTaskTipType = expenseReportManager.distributeTask(taskId,lists,str); } }catch(RuntimeException de){ de.printStackTrace(); } expenseReport =expenseReportManager.getExpenseReportByTaskId(taskId); return this.renderText(expenseReportManager.getCompleteTaskTipType(completeTaskTipType,expenseReport)); } @Action("select-tache") public String selectTache(){ if(taches!=null){ String str = taches.substring(1, taches.length()-1); String[] tache = str.split(","); for (String a : tache) { String[] s = new String[]{a.split("=")[0].trim(),a.split("=")[1].trim()}; tacheList.add(s); } } return"select-tache"; } /** * 跳转流转历史页面 */ @Override @Action("history") public String showHistory() { return "history"; } /** * 取回 */ @Override @Action("retrieve") public String retrieveTask() { String msg=expenseReportManager.retrieve(taskId); task=expenseReportManager.getWorkflowTask(taskId); expenseReport=expenseReportManager.getExpenseReportByTaskId(taskId); renderText(msg); return null; } public void prepareDrawTask() throws Exception{ prepareModel(); } /** * 领取任务 */ @Override @Action("receive-task") public String drawTask() { try { expenseReportManager.drawTask(taskId); task=expenseReportManager.getWorkflowTask(taskId); return processTask(); } catch (Exception e) { } return "process-task"; } /** * 绑定放弃领取任务 * @throws Exception */ public void prepareAbandonReceive() throws Exception { prepareModel(); } /** * 放弃领取任务 */ @Override @Action("abandonReceive") public String abandonReceive() { try { expenseReportManager.abandonReceive(taskId); task=expenseReportManager.getWorkflowTask(taskId); return processTask(); } catch (Exception e) { } return "process-task"; } /** * 加签 */ @Override @Action("add-sign") public String addSigner() { try{ expenseReportManager.addSigner(taskId, Arrays.asList(addSignPerson.split(","))); renderText("加签成功!"); }catch (Exception e) { renderText(e.getMessage()); } return null; } /** * 减签 */ @Override @Action("cut") public String removeSigner() { List<Long> lists = new ArrayList<Long>(); String[] cutPersonIdStrs = cutPersons.split(","); for(String idStr:cutPersonIdStrs){ lists.add(Long.parseLong(idStr)); } expenseReportManager.removeSigners(taskId, lists); renderText("减签成功!"); return null; } /** * 跳转应急处理页面 */ @Action("urgenDonePage") @Override public String processEmergency() { urgenFlag=true;//监控标识 getRight(taskId,"expense-report"); return "urgenDonePage"; } /** * 弹出意见框 * @return */ @Override @Action("expense-openOpinion") public String fillOpinion(){ return "expense-openOpinion"; } @Override protected void prepareModel() throws Exception { if(taskId!=null){ expenseReport = expenseReportManager.getExpenseReportByTaskId(taskId); task = expenseReportManager.getWorkflowTask(taskId); opinions = expenseReportManager.getOpinions(expenseReport); //当任务状态不是已完成或被取消时(2:任务完成 3:被取消),办理前自动填写域设值 if(task.getActive()!=2&&task.getActive()!=3&&!urgenFlag){ ApiFactory.getFormService().fillEntityByTask(expenseReport, taskId); } }else if(id!=null){ expenseReport=expenseReportManager.getExpenseReport(id); task = expenseReportManager.getActiveTaskByTransactorId(expenseReport,ContextUtils.getUserId()); if(task!=null)taskId = task.getId(); if(task==null) taskId = expenseReport.getWorkflowInfo().getFirstTaskId(); if(expenseReport.getWorkflowInfo()!=null) opinions = expenseReportManager.getOpinions(expenseReport); }else if(id==null){ expenseReport=new ExpenseReport(); expenseReport.setCompanyId(ContextUtils.getCompanyId()); expenseReport.setCreatedTime(new Date()); expenseReport.setCreator(ContextUtils.getLoginName()); expenseReport.setCreatorId(ContextUtils.getUserId()); expenseReport.setName(ContextUtils.getUserName()); ApiFactory.getFormService().fillEntityByDefinition(expenseReport, "expense-report"); } List<Document> documents = ApiFactory.getDocumentService().getDocuments(expenseReport); if(documents.size()>0) document = documents.get(0); } @Action(value="input", results={@Result(name="input", location="input.jsp"), @Result(name="view", location="view.jsp") }) @Override public String input() throws Exception { if(expenseReport.getWorkflowInfo()!=null){ if(!"process.unsubmit".equals(expenseReport.getWorkflowInfo().getProcessState().getCode())){ return "view"; } } getRight(taskId,"expense-report"); if(urgenFlag){ return "input"; } //流程在第一个环节时 if(ifFirst){ return "input"; } return "input"; } @Action("save") @Override public String save() throws Exception { if(expenseReport.getSignPersons().equals("所有人员")){ expenseReportManager.getSignName(expenseReport); } if(expenseReport.getReadPersons().equals("所有人员")){ expenseReportManager.getReadName(expenseReport); } //设置文档创建人的直属上级姓名 User user = ApiFactory.getDataDictService().getDirectLeader(ContextUtils.getUserId()); if(user!=null){ expenseReport.setDirectLeaderName(user.getName()); }else{ expenseReport.setDirectLeaderName("空"); } expenseReportManager.saveInstance("expense-report",expenseReport); task = expenseReportManager.getActiveTaskByTransactorId(expenseReport,ContextUtils.getUserId()); if(task!=null)taskId = task.getId(); getRight(taskId,"expense-report"); if(saveTaskFlag) return renderText(expenseReport.getId().toString()); return "input"; } public void prepareUrgenSave() throws Exception { expenseReport=expenseReportManager.getExpenseReport(id); task = expenseReportManager.getActiveTaskByTransactorId(expenseReport,ContextUtils.getUserId()); if(task!=null)taskId = task.getId(); if(task==null) taskId = expenseReport.getWorkflowInfo().getFirstTaskId(); if(expenseReport.getWorkflowInfo()!=null) opinions = expenseReportManager.getOpinions(expenseReport); List<Document> documents = ApiFactory.getDocumentService().getDocuments(expenseReport); if(documents.size()>0) document = documents.get(0); } /** * 应急处理保存 * @return * @throws Exception */ @Action("urgen-save") public String urgenSave() throws Exception { getRight(taskId,"expense-report"); expenseReportManager.saveExpenseReport(expenseReport); return "input"; } public void prepareProcessTask() throws Exception { prepareModel(); } // 任务办理界面 @Action("process-task") public String processTask() throws Exception { getRight(taskId,"expense-report"); //任务状态不是已完成或被取消时(2:任务完成 3:被取消),办理前自动填写域设值 if(taskId!=null&&task.getActive()!=2&&task.getActive()!=3){ ApiFactory.getFormService().fillEntityByTask(expenseReport, taskId); } return "process-task"; } /** * 指派人员树 * @return */ @Action("assign-tree") public String assignTree(){ return "assign-tree"; } /** * 指派 * @return */ @Action("assign") public String assign(){ expenseReportManager.assign(taskId, Long.parseLong(assignee)); renderText("指派完成"); return null; } /** * 抄送 * @return */ @Action("copy-tasks") public String copyTasks(){ List<String> userIds=new ArrayList<String>(); if("all_user".equals(assignee)){ List<Long> userids=ApiFactory.getAcsService().getUserIdsByCompanyWithoutAdmin(); userIds.addAll(Arrays.asList(userids.toString().replace("[", "").replace("]", "").replace(" ", ""))); }else{ userIds=Arrays.asList(assignee.split(",")); } expenseReportManager.createCopyTasks(taskId, userIds, null, null); renderText("已抄送"); return null; } /** * 获取权限 * @param taskId * @param defCode */ public void getRight(Long taskId,String defCode) { if(urgenFlag){ editType="-1,0,1,1,0,0,1,1";//保留痕迹 taskPermission = new TaskPermission(); taskPermission.setDocumentCreateable(true); taskPermission.setDocumentDownloadable(true); }else{ if(taskId==null){ editType="-1,0,1,1,0,0,1,1";//保留痕迹 fieldPermission = expenseReportManager.getFieldPermission(defCode);//禁止或必填字段 taskPermission = expenseReportManager.getActivityPermission(defCode); }else{ editType=expenseReportManager.getDocumentRight(taskId);//保留痕迹 ifFirst = expenseReportManager.isFirstTask(taskId); fieldPermission = expenseReportManager.getFieldPermissionByTaskId(taskId);//禁止或必填字段 taskPermission = expenseReportManager.getActivityPermission(taskId); } } } public void prepareCompleteTask() throws Exception { prepareModel(); } public void prepareSubmitProcess() throws Exception { prepareModel(); } /** * 选审批人 * @return * @throws Exception */ @Action("expense-selectLeader") public String selectLeader() throws Exception{ prepareModel(); return "expense-selectLeader"; } /** * 选批示传阅人(加签) * @return * @throws Exception */ @Action("expense-selectReadPerson") public String selectReadPerson() throws Exception{ prepareModel(); User taskUser = null; Long userId = task.getTransactorId(); if(task.getTrustorId()!=null){ userId = task.getTrustorId(); } taskUser = ApiFactory.getAcsService().getUserById(userId); if(taskUser == null){ String loginName = task.getTransactor(); if(StringUtils.isNotEmpty(task.getTrustor())){ loginName = task.getTrustor(); } taskUser = ApiFactory.getAcsService().getUserByLoginName(loginName); } if(taskUser!=null){ List<Department> depts = ApiFactory.getAcsService().getDepartmentsByUserId(taskUser.getId()); for (Department department : depts) { List<User> users = ApiFactory.getAcsService().getUsersByDepartmentId(department.getId()); for (User user : users) { if(!userList.contains(user)){ userList.add(user); } } userId = ContextUtils.getUserId(); } } return "expense-selectReadPerson"; } /** * 绑定distributeTask * @throws Exception */ public void prepareDistributeTask() throws Exception { prepareModel(); } /** * 删除 */ @Action("delete") @Override public String delete() throws Exception { addActionMessage("<font class=\"onSuccess\"><nobr>"+expenseReportManager.deleteExpenseReport(deleteIds)+"</nobr></font>"); return "list"; } @Action("list") @Override public String list() throws Exception { return SUCCESS; } @Action("list-datas") public String getListDatas() throws Exception { page = expenseReportManager.search(page); renderText(PageUtils.pageToJson(page)); return null; } public void prepareUploadDocument() throws Exception { expenseReport= expenseReportManager.getExpenseReport(id); } /** * 上传文件 * @return * @throws Exception */ @Action("uploadDocument") public String uploadDocument() throws Exception{ HttpServletRequest request=ServletActionContext.getRequest(); String fileName=request.getParameter("Filename"); String fileType = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()); if(!fileType.equals("pdf")){ fileType = "."+fileType; } //把request强转,因为struts从新封装了request(Filedata是它的参数不能改变) MultiPartRequestWrapper wrapper=(MultiPartRequestWrapper)request; expenseReport = expenseReportManager.getExpenseReport(id); //上传不受权限保证,公司id和当先用户登录名需要放入线程 ThreadParameters param=new ThreadParameters(expenseReport.getCompanyId()); param.setLoginName(expenseReport.getCreator()); ParameterUtils.setParameters(param); List<Document> documents = ApiFactory.getDocumentService().getDocuments(expenseReport); if(documents.size()>0){ ApiFactory.getFileService().deleteFile(documents.get(0).getFilePath()); ApiFactory.getDocumentService().deleteDocument(documents.get(0).getId()); } File filePath=wrapper.getFiles("Filedata")[0]; FileInputStream input = new FileInputStream(filePath); Document document=new Document(fileName,Util.getBytes(filePath),"报销单正文",taskId); document.setFileSize(input.available()); document.setFileType(fileType); ApiFactory.getDocumentService().saveDocument(document); return null; } /** * 下载文档 * @return * @throws Exception */ @Action("download-docment") public String downloadDocment() throws Exception{ //expenseReport= expenseReportManager.getExpenseReport(id); Document doc = ApiFactory.getDocumentService().getDocument(id); byte[] file=ApiFactory.getFileService().getFile(doc.getFilePath()); this.download(doc.getFileName(),file); // this.download(expenseReport.getDocumentName(),FileUtils.readFileToByteArray(new File(expenseReport.getFilePath()))); return null; } /** * 下载文档 * @param fileName * @param content * @throws IOException */ private void download(String fileName,byte[] content) throws IOException{ BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(content)); HttpServletResponse response = ServletActionContext.getResponse(); response.reset(); response.setContentType("application/x-download"); OutputStream out=null; try { byte[] byname=fileName.getBytes("gbk"); fileName=new String(byname,"8859_1"); response.addHeader("Content-Disposition", "attachment;filename=\""+fileName+"\""); out=response.getOutputStream(); byte[] buffer = new byte[4096]; int size = 0; while ((size = bis.read(buffer, 0, buffer.length)) != -1) { out.write(buffer, 0, size); } } catch (IOException e) { e.printStackTrace(); }finally{ out.close(); bis.close(); } } /** * 绑定应急处理 * @throws Exception */ public void prepareProcessEmergency() throws Exception { prepareModel(); } /** * 系统消息提示 * @return * @throws Exception */ @Action("expense-message") public String expenseMessage() throws Exception{ sendPerson = ContextUtils.getUserName(); sendLoginName = ContextUtils.getLoginName(); return "expense-message"; } /** * 系统消息发送 * @return * @throws Exception */ @Action("send-message") public String sendMessage() throws Exception{ ApiFactory.getPortalService().addMessage(ContextUtils.getSystemCode(), ContextUtils.getUserName(), ContextUtils.getLoginName(), recieveLoginName, sendType, sendContent, "/expense-report/input.htm"); return null; } /** * 选择减签人员 * @return * @throws Exception */ @Action("cutsign") public String cutsign() throws Exception{ prepareModel(); //handerList = expenseReportManager.getTaskHander(expenseReport,taskId); cutsignList = expenseReportManager.getTaskHander(expenseReport,taskId); userId = ContextUtils.getUserId(); return "cutsign"; } /** * 验证是否有流程定义 * @return * @throws Exception */ @Action("validate-process") public String validateProcess() throws Exception{ applicationDefs = ApiFactory.getDefinitionService().getWorkflowDefinitionsByCode("expense-report"); if(applicationDefs.size()<=0){ this.renderText("zero"); }else if(applicationDefs.size()==1){ this.renderText("one:"+applicationDefs.get(0).getId()); }else{ this.renderText("success:"+applicationDefs.get(0).getId()); } return null; } /** * 流程监控/删除实例的业务补偿(如删除数据关联关系) * @return * @throws Exception */ @Action("delete-instance-expiation") public String deleteInstanceExpiation() throws Exception{ expenseReportManager.deleteExpenseReportById(entityId); renderText("删除成功!"); return null; } /** * 流程监控/取消实例的业务补偿 * @return * @throws Exception */ @Action("cancel-instance-expiation") public String cancelInstanceExpiation() throws Exception{ renderText(""); return null; } /** * 流程监控/环节跳转的业务补偿 * @return * @throws Exception */ @Action("task-jump-expiation") public String taskJumpExpiation() throws Exception{ renderText(""); return null; } //测试http访问方式的定时 @Action("test-apply") public String test(){ System.out.println(runAsUser); return null; } @Action("goback") public String goback(){ // expenseReport=expenseReportManager.getExpenseReportByTaskId(taskId); // task=expenseReportManager.getWorkflowTask(taskId); String msg=expenseReportManager.goback(taskId); renderText(msg); return null; } public void setId(Long id) { this.id = id; } public Long getId() { return id; } public String getDeleteIds() { return deleteIds; } public void setDeleteIds(String deleteIds) { this.deleteIds = deleteIds; } public void setPage(Page<ExpenseReport> page) { this.page = page; } public Page<ExpenseReport> getPage() { return page; } public ExpenseReport getModel() { return expenseReport; } public void prepareShowHistory() throws Exception{ expenseReport=expenseReportManager.getExpenseReport(id); } public String getLeaderId() { return leaderId; } public void setLeaderId(String leaderId) { this.leaderId = leaderId; } public boolean isOpinionflag() { return opinionflag; } public void setOpinionflag(boolean opinionflag) { this.opinionflag = opinionflag; } public boolean isSubmitflag() { return submitflag; } public void setSubmitflag(boolean submitflag) { this.submitflag = submitflag; } public String getOpinion() { return opinion; } public void setOpinion(String opinion) { this.opinion = opinion; } public boolean isSubmitFlag() { return submitFlag; } public void setSubmitFlag(boolean submitFlag) { this.submitFlag = submitFlag; } public String getEditType() { return editType; } public void setEditType(String editType) { this.editType = editType; } public List<User> getUserList() { return userList; } public void setUserList(List<User> userList) { this.userList = userList; } public String getUserIds() { return userIds; } public void setUserIds(String userIds) { this.userIds = userIds; } public boolean isUrgenFlag() { return urgenFlag; } public void setUrgenFlag(boolean urgenFlag) { this.urgenFlag = urgenFlag; } public String getSendLoginName() { return sendLoginName; } public void setSendLoginName(String sendLoginName) { this.sendLoginName = sendLoginName; } public String getRecieveLoginName() { return recieveLoginName; } public void setRecieveLoginName(String recieveLoginName) { this.recieveLoginName = recieveLoginName; } public String getSendType() { return sendType; } public void setSendType(String sendType) { this.sendType = sendType; } public String getSendContent() { return sendContent; } public void setSendContent(String sendContent) { this.sendContent = sendContent; } public void setSendPerson(String sendPerson) { this.sendPerson = sendPerson; } public String getSendPerson() { return sendPerson; } public String getAddSignPerson() { return addSignPerson; } public void setAddSignPerson(String addSignPerson) { this.addSignPerson = addSignPerson; } public List<String[]> getHanderList() { return handerList; } public void setHanderList(List<String[]> handerList) { this.handerList = handerList; } public String getCutPersons() { return cutPersons; } public void setCutPersons(String cutPersons) { this.cutPersons = cutPersons; } public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public boolean getIfFirst() { return ifFirst; } public void setIfFirst(boolean ifFirst) { this.ifFirst = ifFirst; } public List<WorkflowDefinition> getApplicationDefs() { return applicationDefs; } public void setApplicationDefs(List<WorkflowDefinition> applicationDefs) { this.applicationDefs = applicationDefs; } public String getTaches() { return taches; } public void setTaches(String taches) { this.taches = taches; } public List<String[]> getTacheList() { return tacheList; } public void setTacheList(List<String[]> tacheList) { this.tacheList = tacheList; } public String getTacheCode() { return tacheCode; } public void setTacheCode(String tacheCode) { this.tacheCode = tacheCode; } public boolean isSaveTaskFlag() { return saveTaskFlag; } public void setSaveTaskFlag(boolean saveTaskFlag) { this.saveTaskFlag = saveTaskFlag; } public String getAssignee() { return assignee; } public void setAssignee(String assignee) { this.assignee = assignee; } public Long getEntityId() { return entityId; } public void setEntityId(Long entityId) { this.entityId = entityId; } public String getSubmitResult() { return submitResult; } public void setRunAsUser(String runAsUser) { this.runAsUser = runAsUser; } public Document getDocument() { return document; } public void setDocument(Document document) { this.document = document; } public List<WorkflowTask> getCutsignList() { return cutsignList; } public void setCutsignList(List<WorkflowTask> cutsignList) { this.cutsignList = cutsignList; } }