diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/controller/route/oa/OaRouteController.java b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/route/oa/OaRouteController.java index fec5a0e6..cea4da76 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/controller/route/oa/OaRouteController.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/route/oa/OaRouteController.java @@ -37,9 +37,9 @@ public class OaRouteController extends DefaultBaseController { return mv; } - @GetMapping("list-log") + @GetMapping("list-process-log") public ModelAndView listLog() { - ModelAndView mv = new ModelAndView("oa/list-log"); + ModelAndView mv = new ModelAndView("oa/list-process-log"); return mv; } diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaHistoryTaskDTO.java b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaHistoryTaskDTO.java index c8cd3733..00b4a774 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaHistoryTaskDTO.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaHistoryTaskDTO.java @@ -18,7 +18,18 @@ public class OaHistoryTaskDTO { private String formKey; private String formCode; private Integer formVersion; + private String reportUid; private String processInstanceId; + private String processName; + private String processStartTime; + private String processEndTime; + private String mainTitle; + private String startTime; + private String endTime; + private String startUserId; + private String startUserName; + private String startUserDepartmentIds; + private String startUserDepartmentNames; public String getTaskId() { return taskId == null ? "" : taskId.trim(); @@ -68,6 +79,14 @@ public class OaHistoryTaskDTO { this.formVersion = formVersion; } + public String getReportUid() { + return reportUid == null ? "" : reportUid.trim(); + } + + public void setReportUid(String reportUid) { + this.reportUid = reportUid; + } + public String getProcessInstanceId() { return processInstanceId == null ? "" : processInstanceId.trim(); } @@ -75,4 +94,84 @@ public class OaHistoryTaskDTO { public void setProcessInstanceId(String processInstanceId) { this.processInstanceId = processInstanceId; } + + public String getProcessName() { + return processName == null ? "" : processName.trim(); + } + + public void setProcessName(String processName) { + this.processName = processName; + } + + public String getMainTitle() { + return mainTitle == null ? "" : mainTitle.trim(); + } + + public void setMainTitle(String mainTitle) { + this.mainTitle = mainTitle; + } + + public String getProcessStartTime() { + return processStartTime == null ? "" : processStartTime.trim(); + } + + public void setProcessStartTime(String processStartTime) { + this.processStartTime = processStartTime; + } + + public String getProcessEndTime() { + return processEndTime == null ? "" : processEndTime.trim(); + } + + public void setProcessEndTime(String processEndTime) { + this.processEndTime = processEndTime; + } + + public String getStartTime() { + return startTime == null ? "" : startTime.trim(); + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime == null ? "" : endTime.trim(); + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public String getStartUserId() { + return startUserId == null ? "" : startUserId.trim(); + } + + public void setStartUserId(String startUserId) { + this.startUserId = startUserId; + } + + public String getStartUserName() { + return startUserName == null ? "" : startUserName.trim(); + } + + public void setStartUserName(String startUserName) { + this.startUserName = startUserName; + } + + public String getStartUserDepartmentIds() { + return startUserDepartmentIds == null ? "" : startUserDepartmentIds.trim(); + } + + public void setStartUserDepartmentIds(String startUserDepartmentIds) { + this.startUserDepartmentIds = startUserDepartmentIds; + } + + public String getStartUserDepartmentNames() { + return startUserDepartmentNames == null ? "" : startUserDepartmentNames.trim(); + } + + public void setStartUserDepartmentNames(String startUserDepartmentNames) { + this.startUserDepartmentNames = startUserDepartmentNames; + } } diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaTaskDTO.java b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaTaskDTO.java index 8f27f3fe..39ed13fa 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaTaskDTO.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaTaskDTO.java @@ -27,19 +27,32 @@ public class OaTaskDTO { private String getFormKey; @ApiModelProperty(name = "reportUid", value = "上报表单UID") private String reportUid; - @ApiModelProperty(name = "reportTitle", value = "上报表单标题") - private String reportTitle; + @ApiModelProperty(name = "mainTitle", value = "上报表单主标题") + private String mainTitle; @ApiModelProperty(name = "owner", value = "所有者") private String owner; @ApiModelProperty(name = "taskDefinitionKey", value = "任务定义Key") private String taskDefinitionKey; @ApiModelProperty(name = "processDefinitionId", value = "流程定义ID") private String processDefinitionId; - @ApiModelProperty(name = "processInstanceId", value = "流程实例ID") private String processInstanceId; + @ApiModelProperty(name = "processName", value = "流程名称") + private String processName; @ApiModelProperty(name = "isNeedClaim", value = "是否需要认领") private Integer isNeedClaim; + @ApiModelProperty(name = "startUserId", value = "发起人用户ID") + private String startUserId; + @ApiModelProperty(name = "startUserName", value = "发起人昵称") + private String startUserName; + @ApiModelProperty(name = "startUserDepartmentIds", value = "发起人部门ID") + private String startUserDepartmentIds; + @ApiModelProperty(name = "startUserDepartmentNames", value = "发起人部门名称") + private String startUserDepartmentNames; + @ApiModelProperty(name = "createTime", value = "创建时间") + private String createTime; + @ApiModelProperty(name = "processStartTime", value = "流程开始时间") + private String processStartTime; public String getTaskId() { return taskId == null ? "" : taskId.trim(); @@ -97,12 +110,12 @@ public class OaTaskDTO { this.reportUid = reportUid; } - public String getReportTitle() { - return reportTitle == null ? "" : reportTitle.trim(); + public String getMainTitle() { + return mainTitle == null ? "" : mainTitle.trim(); } - public void setReportTitle(String reportTitle) { - this.reportTitle = reportTitle; + public void setMainTitle(String mainTitle) { + this.mainTitle = mainTitle; } public String getOwner() { @@ -137,6 +150,14 @@ public class OaTaskDTO { this.processInstanceId = processInstanceId; } + public String getProcessName() { + return processName == null ? "" : processName.trim(); + } + + public void setProcessName(String processName) { + this.processName = processName; + } + public Integer getIsNeedClaim() { return isNeedClaim == null ? 0 : isNeedClaim; } @@ -144,4 +165,52 @@ public class OaTaskDTO { public void setIsNeedClaim(Integer isNeedClaim) { this.isNeedClaim = isNeedClaim; } + + public String getStartUserId() { + return startUserId == null ? "" : startUserId.trim(); + } + + public void setStartUserId(String startUserId) { + this.startUserId = startUserId; + } + + public String getStartUserName() { + return startUserName == null ? "" : startUserName.trim(); + } + + public void setStartUserName(String startUserName) { + this.startUserName = startUserName; + } + + public String getStartUserDepartmentIds() { + return startUserDepartmentIds == null ? "" : startUserDepartmentIds.trim(); + } + + public void setStartUserDepartmentIds(String startUserDepartmentIds) { + this.startUserDepartmentIds = startUserDepartmentIds; + } + + public String getStartUserDepartmentNames() { + return startUserDepartmentNames == null ? "" : startUserDepartmentNames.trim(); + } + + public void setStartUserDepartmentNames(String startUserDepartmentNames) { + this.startUserDepartmentNames = startUserDepartmentNames; + } + + public String getCreateTime() { + return createTime == null ? "" : createTime.trim(); + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getProcessStartTime() { + return processStartTime == null ? "" : processStartTime.trim(); + } + + public void setProcessStartTime(String processStartTime) { + this.processStartTime = processStartTime; + } } diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java index d3a223df..949df738 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java @@ -19,6 +19,7 @@ public interface IOaFormReportService { String KEY_FORM_VERSION = "formVersion"; String KEY_REPORT_UID = "reportUid"; String KEY_ASSIGNEE_USER = "assigneeUser"; + String KEY_START_ASSIGNEE_USER = "startAssigneeUser"; String KEY_ASSIGNEES = "assignees"; String KEY_SELECT_TYPE = "selectType"; String KEY_IS_NEXT_END_EVENT = "isNextEndEvent"; @@ -112,6 +113,16 @@ public interface IOaFormReportService { */ List> list(String formCode, Integer formVersion, Map params); + /** + * 列表 + * + * @param formCode 表单编码 + * @param formVersion 表单版本 + * @param uids uie列表 + * @return + */ + List> list(String formCode, Integer formVersion, List uids); + /** * 分页列表 * diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java index a5aa83ea..de16e324 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java @@ -8,6 +8,7 @@ import ink.wgink.module.activiti.service.oa.IOaFormReportService; import ink.wgink.module.form.service.report.IFormReportService; import ink.wgink.pojo.ListPage; import ink.wgink.pojo.result.SuccessResultList; +import org.activiti.engine.IdentityService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.runtime.ProcessInstance; @@ -35,6 +36,8 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo private RuntimeService runtimeService; @Autowired private TaskService taskService; + @Autowired + private IdentityService identityService; @Override public void save(String processDefinitionId, String formCode, Integer formVersion, Map params) { @@ -67,7 +70,8 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo variables.put(KEY_FORM_CODE, formCode); variables.put(KEY_FORM_VERSION, formVersion); variables.put(KEY_REPORT_UID, uid); - variables.put(KEY_ASSIGNEE_USER, userId); + variables.put(KEY_START_ASSIGNEE_USER, userId); + identityService.setAuthenticatedUserId(userId); LOG.debug("发起流程"); ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, variables); LOG.debug("更新表单数据的流程实例ID"); @@ -151,6 +155,13 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo return formReportService.list(formCode, formVersion, params); } + @Override + public List> list(String formCode, Integer formVersion, List uids) { + Map params = getHashMap(6); + params.put("uids", uids); + return formReportService.list(formCode, formVersion, params); + } + @Override public SuccessResultList>> listPage(String formCode, Integer formVersion, ListPage page) { return formReportService.listPage(formCode, formVersion, page); diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaServiceImpl.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaServiceImpl.java index f57545bc..9475444e 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaServiceImpl.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaServiceImpl.java @@ -1,6 +1,8 @@ package ink.wgink.module.activiti.service.oa.impl; import ink.wgink.common.base.DefaultBaseService; +import ink.wgink.interfaces.department.IDepartmentBaseService; +import ink.wgink.interfaces.department.IDepartmentUserBaseService; import ink.wgink.interfaces.user.IUserBaseService; import ink.wgink.module.activiti.enums.oa.ProcessTaskStatusEnum; import ink.wgink.module.activiti.pojo.dtos.oa.OaHistoryTaskDTO; @@ -10,16 +12,22 @@ import ink.wgink.module.activiti.pojo.dtos.oa.OaTaskDTO; import ink.wgink.module.activiti.service.oa.IOaFormReportService; import ink.wgink.module.activiti.service.oa.IOaService; import ink.wgink.module.form.pojo.dtos.design.FormDTO; +import ink.wgink.module.form.service.design.IFormDesignService; import ink.wgink.module.form.service.design.IFormService; +import ink.wgink.pojo.dtos.department.DepartmentDTO; +import ink.wgink.pojo.dtos.department.DepartmentUserDTO; import ink.wgink.pojo.dtos.user.UserDTO; import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.util.ArrayListUtil; import ink.wgink.util.date.DateUtil; import ink.wgink.util.string.WStringUtil; import org.activiti.engine.*; +import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.history.HistoricTaskInstance; import org.activiti.engine.history.HistoricTaskInstanceQuery; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.repository.ProcessDefinitionQuery; +import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.IdentityLink; import org.activiti.engine.task.Task; import org.activiti.engine.task.TaskQuery; @@ -54,6 +62,12 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService { private IFormService iFormService; @Autowired private IUserBaseService userBaseService; + @Autowired + private IDepartmentBaseService departmentBaseService; + @Autowired + private IDepartmentUserBaseService departmentUserBaseService; + @Autowired + private IOaFormReportService oaFormReportService; @Override public List listProcdef() { @@ -114,7 +128,7 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService { public List listTaskOfMine() { String userId = securityComponent.getCurrentUser().getUserId(); TaskQuery taskQuery = taskService.createTaskQuery().taskCandidateOrAssigned(userId); - List tasks = taskQuery.list(); + List tasks = taskQuery.includeProcessVariables().list(); return listOaTask(tasks); } @@ -122,7 +136,7 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService { public SuccessResultList> listPageTaskOfMine(int page, int rows) { String userId = securityComponent.getCurrentUser().getUserId(); TaskQuery taskQuery = taskService.createTaskQuery().taskCandidateOrAssigned(userId); - List tasks = taskQuery.listPage(page - 1, rows); + List tasks = taskQuery.includeProcessVariables().listPage(page - 1, rows); List oaTaskDTOs = listOaTask(tasks); return new SuccessResultList<>(oaTaskDTOs, page, taskQuery.count()); } @@ -135,10 +149,17 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService { */ private List listOaTask(List tasks) { List oaTaskDTOs = new ArrayList<>(); + // 流程实例列表 + Set processInstanceIdSet = new HashSet<>(); + // 发起人列表 + Set startUserIdSet = new HashSet<>(); + tasks.forEach(task -> { OaTaskDTO oaTaskDTO = new OaTaskDTO(); oaTaskDTOs.add(oaTaskDTO); + processInstanceIdSet.add(task.getProcessInstanceId()); + oaTaskDTO.setTaskId(task.getId()); oaTaskDTO.setTaskName(task.getName()); oaTaskDTO.setTaskDescription(task.getDescription()); @@ -147,15 +168,28 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService { oaTaskDTO.setProcessDefinitionId(task.getProcessDefinitionId()); oaTaskDTO.setProcessInstanceId(task.getProcessInstanceId()); oaTaskDTO.setIsNeedClaim(StringUtils.isBlank(task.getAssignee()) ? 1 : 0); - - Map variables = runtimeService.getVariables(task.getProcessInstanceId()); + oaTaskDTO.setCreateTime(DateUtil.getDateTime(task.getCreateTime())); + Map variables = task.getProcessVariables(); if (variables.isEmpty()) { return; } - oaTaskDTO.setFormCode(variables.get(IOaFormReportService.KEY_FORM_CODE).toString()); - oaTaskDTO.setFormVersion(Integer.parseInt(variables.get(IOaFormReportService.KEY_FORM_VERSION).toString())); - oaTaskDTO.setReportUid(variables.get(IOaFormReportService.KEY_REPORT_UID).toString()); + String formCode = (String) variables.get(IOaFormReportService.KEY_FORM_CODE); + Integer formVersion = (Integer) variables.get(IOaFormReportService.KEY_FORM_VERSION); + String reportUid = (String) variables.get(IOaFormReportService.KEY_REPORT_UID); + oaTaskDTO.setFormCode(formCode); + oaTaskDTO.setFormVersion(formVersion); + oaTaskDTO.setReportUid(reportUid); + + String mainTitle = getMainTitle(formCode, formVersion, reportUid); + if (StringUtils.isBlank(mainTitle)) { + oaTaskDTO.setMainTitle("新任务需要处理"); + } else { + oaTaskDTO.setMainTitle(mainTitle); + } }); + + setProcessNameAndStartUserId(oaTaskDTOs, processInstanceIdSet, startUserIdSet); + setStartUser(oaTaskDTOs, startUserIdSet); return oaTaskDTOs; } @@ -163,7 +197,7 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService { public List listHistoryTaskOfMine() { String userId = securityComponent.getCurrentUser().getUserId(); HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery().taskAssignee(userId); - List historicTaskInstances = historicTaskInstanceQuery.list(); + List historicTaskInstances = historicTaskInstanceQuery.includeProcessVariables().finished().list(); return listOaHistoryTask(historicTaskInstances); } @@ -171,7 +205,7 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService { public SuccessResultList> listPageHistoryTaskOfMine(int page, int rows) { String userId = securityComponent.getCurrentUser().getUserId(); HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery().taskAssignee(userId); - List historicTaskInstances = historicTaskInstanceQuery.listPage(page - 1, rows); + List historicTaskInstances = historicTaskInstanceQuery.includeProcessVariables().finished().listPage(page - 1, rows); List oaHistoryTaskDTOs = listOaHistoryTask(historicTaskInstances); return new SuccessResultList<>(oaHistoryTaskDTOs, page, historicTaskInstanceQuery.count()); } @@ -243,14 +277,216 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService { private List listOaHistoryTask(List historicTaskInstances) { List oaHistoryTaskDTOs = new ArrayList<>(); + + // 流程实例列表 + Set processInstanceIdSet = new HashSet<>(); + // 发起人列表 + Set startUserIdSet = new HashSet<>(); + historicTaskInstances.forEach(historicTaskInstance -> { OaHistoryTaskDTO oaHistoryTaskDTO = new OaHistoryTaskDTO(); + oaHistoryTaskDTOs.add(oaHistoryTaskDTO); + + processInstanceIdSet.add(historicTaskInstance.getProcessInstanceId()); + oaHistoryTaskDTO.setTaskId(historicTaskInstance.getId()); oaHistoryTaskDTO.setTaskName(historicTaskInstance.getName()); oaHistoryTaskDTO.setProcessInstanceId(historicTaskInstance.getProcessInstanceId()); - oaHistoryTaskDTOs.add(oaHistoryTaskDTO); + oaHistoryTaskDTO.setStartTime(DateUtil.getDateTime(historicTaskInstance.getStartTime())); + oaHistoryTaskDTO.setEndTime(DateUtil.getDateTime(historicTaskInstance.getEndTime())); + + Map processVariables = historicTaskInstance.getProcessVariables(); + String formCode = (String) processVariables.get(IOaFormReportService.KEY_FORM_CODE); + Integer formVersion = (Integer) processVariables.get(IOaFormReportService.KEY_FORM_VERSION); + String reportUid = (String) processVariables.get(IOaFormReportService.KEY_REPORT_UID); + String mainTitle = getMainTitle(formCode, formVersion, reportUid); + oaHistoryTaskDTO.setFormCode(formCode); + oaHistoryTaskDTO.setFormVersion(formVersion); + oaHistoryTaskDTO.setReportUid(reportUid); + if (StringUtils.isBlank(mainTitle)) { + oaHistoryTaskDTO.setMainTitle("新任务需要处理"); + } else { + oaHistoryTaskDTO.setMainTitle(mainTitle); + } }); + + // 流程定义列表 + setHistoryProcessNameAndStartUserId(oaHistoryTaskDTOs, processInstanceIdSet, startUserIdSet); + setHistoryStartUser(oaHistoryTaskDTOs, startUserIdSet); return oaHistoryTaskDTOs; } + /** + * 设置流程名称和发起人 + * + * @param oaTaskDTOs + * @param processInstanceIds + * @param startUserIdSet + */ + private void setProcessNameAndStartUserId(List oaTaskDTOs, Set processInstanceIdSet, Set startUserIdSet) { + if (oaTaskDTOs.isEmpty()) { + return; + } + if (processInstanceIdSet.isEmpty()) { + return; + } + List processInstances = runtimeService.createProcessInstanceQuery().processInstanceIds(processInstanceIdSet).list(); + oaTaskDTOs.forEach(oaTaskDTO -> { + processInstances.forEach(processInstance -> { + if (!StringUtils.equals(oaTaskDTO.getProcessInstanceId(), processInstance.getProcessInstanceId())) { + return; + } + startUserIdSet.add(processInstance.getStartUserId()); + oaTaskDTO.setProcessName(processInstance.getProcessDefinitionName()); + oaTaskDTO.setProcessStartTime(DateUtil.getDateTime(processInstance.getStartTime())); + oaTaskDTO.setStartUserId(processInstance.getStartUserId()); + }); + }); + } + + /** + * 设置发起人 + * + * @param oaTaskDTOs + * @param startUserIdSet + */ + private void setStartUser(List oaTaskDTOs, Set startUserIdSet) { + if (oaTaskDTOs.isEmpty()) { + return; + } + if (startUserIdSet.isEmpty()) { + return; + } + List userDTOs = userBaseService.listByUserIds(startUserIdSet.stream().collect(Collectors.toList())); + if (userDTOs.isEmpty()) { + return; + } + List userIds = ArrayListUtil.listBeanStringIdValue(userDTOs, "userId", UserDTO.class); + List departmentUserDTOs = departmentUserBaseService.listByUserIds(userIds); + List departmentIds = ArrayListUtil.listBeanStringIdValue(departmentUserDTOs, "departmentId", DepartmentUserDTO.class); + List departmentDTOs = departmentBaseService.listByIds(departmentIds); + for (OaTaskDTO oaTaskDTO : oaTaskDTOs) { + for (DepartmentUserDTO departmentUserDTO : departmentUserDTOs) { + if (!StringUtils.equals(oaTaskDTO.getStartUserId(), departmentUserDTO.getUserId())) { + continue; + } + for (DepartmentDTO departmentDTO : departmentDTOs) { + if (!StringUtils.equals(departmentUserDTO.getDepartmentId(), departmentDTO.getDepartmentId())) { + continue; + } + String startUserDepartmentIds = oaTaskDTO.getStartUserDepartmentIds(); + String startUserDepartmentNames = oaTaskDTO.getStartUserDepartmentNames(); + if (!StringUtils.isBlank(startUserDepartmentIds)) { + startUserDepartmentIds += ","; + startUserDepartmentNames += ","; + } + startUserDepartmentIds += departmentDTO.getDepartmentId(); + startUserDepartmentNames += departmentDTO.getDepartmentName(); + oaTaskDTO.setStartUserDepartmentIds(startUserDepartmentIds); + oaTaskDTO.setStartUserDepartmentNames(startUserDepartmentNames); + } + } + } + } + + /** + * 设置流程名称和发起人 + * + * @param oaHistoryTaskDTOs + * @param processInstanceIdSet + * @param startUserIdSet + */ + private void setHistoryProcessNameAndStartUserId(List oaHistoryTaskDTOs, Set processInstanceIdSet, Set startUserIdSet) { + if (oaHistoryTaskDTOs.isEmpty()) { + return; + } + if (processInstanceIdSet.isEmpty()) { + return; + } + + List historicProcessInstances = historyService.createHistoricProcessInstanceQuery().processInstanceIds(processInstanceIdSet).list(); + oaHistoryTaskDTOs.forEach(oaHistoryTaskDTO -> { + historicProcessInstances.forEach(historicProcessInstance -> { + if (!StringUtils.equals(oaHistoryTaskDTO.getProcessInstanceId(), historicProcessInstance.getId())) { + return; + } + startUserIdSet.add(historicProcessInstance.getStartUserId()); + oaHistoryTaskDTO.setProcessName(historicProcessInstance.getProcessDefinitionName()); + oaHistoryTaskDTO.setProcessStartTime(DateUtil.getDateTime(historicProcessInstance.getStartTime())); + oaHistoryTaskDTO.setProcessEndTime(historicProcessInstance.getEndTime() == null ? "" : DateUtil.getDateTime(historicProcessInstance.getEndTime())); + historicProcessInstance.getEndTime(); + oaHistoryTaskDTO.setStartUserId(historicProcessInstance.getStartUserId()); + }); + }); + } + + /** + * 设置发起人 + * + * @param oaHistoryTaskDTOs + * @param startUserIdSet + */ + private void setHistoryStartUser(List oaHistoryTaskDTOs, Set startUserIdSet) { + if (oaHistoryTaskDTOs.isEmpty()) { + return; + } + if (startUserIdSet.isEmpty()) { + return; + } + List userDTOs = userBaseService.listByUserIds(startUserIdSet.stream().collect(Collectors.toList())); + if (userDTOs.isEmpty()) { + return; + } + List userIds = ArrayListUtil.listBeanStringIdValue(userDTOs, "userId", UserDTO.class); + List departmentUserDTOs = departmentUserBaseService.listByUserIds(userIds); + List departmentIds = ArrayListUtil.listBeanStringIdValue(departmentUserDTOs, "departmentId", DepartmentUserDTO.class); + List departmentDTOs = departmentBaseService.listByIds(departmentIds); + for (OaHistoryTaskDTO oaHistoryTaskDTO : oaHistoryTaskDTOs) { + for (DepartmentUserDTO departmentUserDTO : departmentUserDTOs) { + if (!StringUtils.equals(oaHistoryTaskDTO.getStartUserId(), departmentUserDTO.getUserId())) { + continue; + } + for (DepartmentDTO departmentDTO : departmentDTOs) { + if (!StringUtils.equals(departmentUserDTO.getDepartmentId(), departmentDTO.getDepartmentId())) { + continue; + } + String startUserDepartmentIds = oaHistoryTaskDTO.getStartUserDepartmentIds(); + String startUserDepartmentNames = oaHistoryTaskDTO.getStartUserDepartmentNames(); + if (!StringUtils.isBlank(startUserDepartmentIds)) { + startUserDepartmentIds += ","; + startUserDepartmentNames += ","; + } + startUserDepartmentIds += departmentDTO.getDepartmentId(); + startUserDepartmentNames += departmentDTO.getDepartmentName(); + oaHistoryTaskDTO.setStartUserDepartmentIds(startUserDepartmentIds); + oaHistoryTaskDTO.setStartUserDepartmentNames(startUserDepartmentNames); + } + } + } + } + + /** + * 获取表单上报主标题 + * + * @param formCode + * @param formVersion + * @param uid + * @return + */ + private String getMainTitle(String formCode, Integer formVersion, String uid) { + Map reportFormMap = oaFormReportService.get(formCode, formVersion, uid); + if (reportFormMap == null) { + return null; + } + Object mainTitleObj = reportFormMap.get(IFormDesignService.FIELD_MAIN_TITLE); + if (mainTitleObj == null) { + return null; + } + String mainTitle = (String) mainTitleObj; + if (StringUtils.isBlank(mainTitle)) { + return null; + } + return mainTitle; + } + } diff --git a/module-activiti/src/main/resources/static/editor-app/configuration/properties-form-select-controller.js b/module-activiti/src/main/resources/static/editor-app/configuration/properties-form-select-controller.js index 8709a473..6d8a66af 100644 --- a/module-activiti/src/main/resources/static/editor-app/configuration/properties-form-select-controller.js +++ b/module-activiti/src/main/resources/static/editor-app/configuration/properties-form-select-controller.js @@ -30,6 +30,7 @@ var FormSelectWriteController = ['$scope', '$modal', function($scope, $modal) { }]; var FormSelectController = ['$scope', function($scope) { + var initiator = $scope.selectedItem.properties[4]; $scope.form = {}; @@ -61,6 +62,10 @@ var FormSelectController = ['$scope', function($scope) { $scope.property.value = ''; $scope.property.value = $scope.form.formId; $scope.updatePropertyInModel($scope.property); + + console.log(initiator); + initiator.value = 'startAssigneeUser'; + $scope.updatePropertyInModel(initiator); $scope.close(); }; diff --git a/module-activiti/src/main/resources/static/editor-app/configuration/properties-oa-node-manage-controller.js b/module-activiti/src/main/resources/static/editor-app/configuration/properties-oa-node-manage-controller.js index a2a66217..929ddda2 100644 --- a/module-activiti/src/main/resources/static/editor-app/configuration/properties-oa-node-manage-controller.js +++ b/module-activiti/src/main/resources/static/editor-app/configuration/properties-oa-node-manage-controller.js @@ -33,8 +33,8 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t var MULTI_INSTANCE_VARIABLE = 'assignee'; var NR_OF_COMPLETED_INSTANCES = 'nrOfCompletedInstances'; var NR_OF_INSTANCES = 'nrOfInstances'; - var START_ASSIGNEE = '${startAssignee}'; var ASSIGNEE_USER = '${assigneeUser}'; + var START_ASSIGNEE_USER = '${startAssigneeUser}'; $scope.oaNodeManage = { assignee: { @@ -378,6 +378,15 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t // 更新代理人与候选人信息 function updateAssignment() { + // 更新手动指定单选代理人 + function updateStartAssignee() { + assigneeProperty.value = {}; + assigneeProperty.value.assignment = { + assignee: START_ASSIGNEE_USER, + candidateUsers: [] + } + $scope.updatePropertyInModel(assigneeProperty); + } // 更新手动指定单选代理人 function updateAssignee() { assigneeProperty.value = {}; @@ -453,6 +462,10 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t } var assignee = $scope.oaNodeManage.assignee; + if($scope.isFirstUserTask) { + updateStartAssignee(); + return; + } // 普通节点 if (assignee.nodeType === 'normal') { // 清空多实例选项 diff --git a/module-activiti/src/main/resources/templates/oa/list-history-task-of-mine.html b/module-activiti/src/main/resources/templates/oa/list-history-task-of-mine.html index c6973699..e652ab98 100644 --- a/module-activiti/src/main/resources/templates/oa/list-history-task-of-mine.html +++ b/module-activiti/src/main/resources/templates/oa/list-history-task-of-mine.html @@ -66,6 +66,15 @@ return rowData; } }, + {field:'taskName', width:200, title: '流程名称', align:'center', + templet: function(row) { + var rowData = row[this.field]; + if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, {field:'taskName', width:200, title: '任务名称', align:'center', templet: function(row) { var rowData = row[this.field]; @@ -75,10 +84,55 @@ return rowData; } }, + {field:'mainTitle', width:300, title: '标题', align:'center', + templet: function(row) { + var rowData = row[this.field]; + if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field:'processStartTime', width:180, title: '流程创建时间', align:'center', + templet: function(row) { + var rowData = row[this.field]; + if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field:'processEndTime', width:180, title: '流程结束时间', align:'center', + templet: function(row) { + var rowData = row[this.field]; + if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field:'startTime', width:180, title: '任务开始时间', align:'center', + templet: function(row) { + var rowData = row[this.field]; + if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field:'endTime', width:180, title: '任务结束时间', align:'center', + templet: function(row) { + var rowData = row[this.field]; + if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, {field: 'form', width: 100, title: '操作', align:'center', fixed: 'right', templet: function(row) { return '
' + - ''+ + ''+ '
'; } } @@ -119,13 +173,12 @@ reloadTable(1); }); - table.on('tool(dataTable)', function(obj) { var data = obj.data; var layEvent = obj.event; if(layEvent === 'logEvent') { top.dialog.open({ - url: top.restAjax.path('route/oa/list-log?processInstanceId={processInstanceId}', [data.processInstanceId]), + url: top.restAjax.path('route/oa/list-process-log?processInstanceId={processInstanceId}', [data.processInstanceId]), title: '流转日志', width: '800px', height: '80%', diff --git a/module-activiti/src/main/resources/templates/oa/list-log.html b/module-activiti/src/main/resources/templates/oa/list-log.html deleted file mode 100644 index fafb5afa..00000000 --- a/module-activiti/src/main/resources/templates/oa/list-log.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - -
-
-
-
-
    -
  • 流转日志
  • -
  • 流转图
  • -
-
-
-
    -
  • - -
    -

    8月18日

    -

    - layui 2.0 的一切准备工作似乎都已到位。发布之弦,一触即发。 -
    不枉近百个日日夜夜与之为伴。因小而大,因弱而强。 -
    无论它能走多远,抑或如何支撑?至少我曾倾注全心,无怨无悔 -

    -
    -
  • -
  • - -
    -

    8月16日

    -

    杜甫的思想核心是儒家的仁政思想,他有“致君尧舜上,再使风俗淳”的宏伟抱负。个人最爱的名篇有:

    -
      -
    • 《登高》
    • -
    • 《茅屋为秋风所破歌》
    • -
    -
    -
  • -
  • - -
    -

    8月15日

    -

    - 中国人民抗日战争胜利72周年 -
    常常在想,尽管对这个国家有这样那样的抱怨,但我们的确生在了最好的时代 -
    铭记、感恩 -
    所有为中华民族浴血奋战的英雄将士 -
    永垂不朽 -

    -
    -
  • -
  • - -
    -
    过去
    -
    -
  • -
-
-
-
- 流转图 -
-
-
-
-
-
-
- - - - - \ No newline at end of file diff --git a/module-activiti/src/main/resources/templates/oa/list-process-log.html b/module-activiti/src/main/resources/templates/oa/list-process-log.html new file mode 100644 index 00000000..f5d3b3fc --- /dev/null +++ b/module-activiti/src/main/resources/templates/oa/list-process-log.html @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + +
+
+
+
+
    +
  • 流转日志
  • +
  • 流转图
  • +
+
+
+
+
+ 流转图 +
+
+ + + +
+
+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/module-activiti/src/main/resources/templates/oa/list-task-of-mine.html b/module-activiti/src/main/resources/templates/oa/list-task-of-mine.html index 24c123c7..7ba5f93b 100644 --- a/module-activiti/src/main/resources/templates/oa/list-task-of-mine.html +++ b/module-activiti/src/main/resources/templates/oa/list-task-of-mine.html @@ -57,7 +57,16 @@ cols: [ [ {field:'rowNum', width:80, title: '序号', fixed: 'left', align:'center', templet: '{{d.LAY_INDEX}}'}, - {field:'taskId', width:150, title: '主键', align:'center', + {field:'taskId', width:150, title: '任务主键', align:'center', + templet: function(row) { + var rowData = row[this.field]; + if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field:'processName', width:150, title: '流程名称', align:'center', templet: function(row) { var rowData = row[this.field]; if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { @@ -75,13 +84,41 @@ return rowData; } }, - {field: 'form', width: 100, title: '操作', align:'center', fixed: 'right', + {field:'mainTitle', width:300, title: '标题', align:'center', + templet: function(row) { + var rowData = row[this.field]; + if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field:'createTime', width:180, title: '任务创建时间', align:'center', + templet: function(row) { + var rowData = row[this.field]; + if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field:'processStartTime', width:180, title: '流程开始时间', align:'center', + templet: function(row) { + var rowData = row[this.field]; + if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field: 'form', width: 150, title: '操作', align:'center', fixed: 'right', templet: function(row) { if(!row.formCode || !row.formVersion) { return '-'; } return '
' + ''+ + ''+ '
'; } } @@ -122,7 +159,6 @@ reloadTable(1); }); - table.on('tool(dataTable)', function(obj) { var data = obj.data; var layEvent = obj.event; @@ -136,6 +172,14 @@ reloadTable(); } }); + } else if(layEvent === 'logEvent') { + top.dialog.open({ + url: top.restAjax.path('route/oa/list-process-log?processInstanceId={processInstanceId}', [data.processInstanceId]), + title: '流转日志', + width: '800px', + height: '80%', + onClose: function() {} + }); } }); }); diff --git a/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportServiceImpl.java b/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportServiceImpl.java index 329cc6d6..786cceaa 100644 --- a/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportServiceImpl.java +++ b/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportServiceImpl.java @@ -194,8 +194,7 @@ public class FormReportServiceImpl extends DefaultBaseService implements IFormRe queryParams.put(IFormDesignService.PARAM_QUERY_LIST, queryList); queryParams.put(IFormDesignService.PARAM_LIST_SHOW_FIELD, listShowField(formPO)); - List> mapList = formReportDao.list(queryParams); - return mapList; + return formReportDao.list(queryParams); } @Override diff --git a/module-form/src/main/resources/mybatis/mapper/form-report/form-report-mapper.xml b/module-form/src/main/resources/mybatis/mapper/form-report/form-report-mapper.xml index 84becd89..52a8d6b7 100644 --- a/module-form/src/main/resources/mybatis/mapper/form-report/form-report-mapper.xml +++ b/module-form/src/main/resources/mybatis/mapper/form-report/form-report-mapper.xml @@ -74,6 +74,13 @@ df_${formCode}_v${formVersion} WHERE is_delete = 0 + + AND + uid IN + + #{uids[${index}]} + + ${item}