|
@@ -3,6 +3,7 @@
|
|
|
*/
|
|
|
package com.jeeplus.flowable.service;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
@@ -10,6 +11,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.google.common.collect.Lists;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import com.jeeplus.common.utils.Collections3;
|
|
|
+import com.jeeplus.extension.service.dto.FlowAssigneeDTO;
|
|
|
import com.jeeplus.flowable.constant.FlowableConstant;
|
|
|
import com.jeeplus.flowable.model.ActHiIdentitylink;
|
|
|
import com.jeeplus.flowable.model.ActRuTaskInfo;
|
|
@@ -21,6 +23,8 @@ import com.jeeplus.flowable.mapper.FlowMapper;
|
|
|
import com.jeeplus.flowable.service.converter.json.FlowModelService;
|
|
|
import com.jeeplus.flowable.utils.FlowableUtils;
|
|
|
import com.jeeplus.flowable.utils.ProcessDefCache;
|
|
|
+import com.jeeplus.sys.domain.User;
|
|
|
+import com.jeeplus.sys.service.UserService;
|
|
|
import com.jeeplus.sys.service.dto.UserDTO;
|
|
|
import com.jeeplus.sys.utils.StringUtils;
|
|
|
import com.jeeplus.sys.utils.UserUtils;
|
|
@@ -994,4 +998,164 @@ public class FlowTaskService {
|
|
|
return flowMapper.getTaskIdByprocInstId(procInsId);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取数据的全部审核人
|
|
|
+ */
|
|
|
+ public List<String> getTaskAuditUsers(String procInsId, String taskId) {
|
|
|
+ // 获取当前节点的所有审核人配置
|
|
|
+ List<AssigneeDto> assigneeDtoList = flowMapper.getAssigneeDtoByTaskId(taskId);
|
|
|
+ // 获取当前流程的发起人id
|
|
|
+ String startUserId = flowMapper.getStarterByProcInsId(procInsId);
|
|
|
+
|
|
|
+ HashSet<String> candidateUserIds = new LinkedHashSet<> ();
|
|
|
+ for (AssigneeDto flowAssignee : assigneeDtoList) {
|
|
|
+ switch (flowAssignee.getType ()) {
|
|
|
+ case "user":
|
|
|
+ candidateUserIds.addAll (Arrays.asList (flowAssignee.getAssignValue ().split (",")));
|
|
|
+ break;
|
|
|
+ case "post":
|
|
|
+ if( StrUtil.isNotBlank (flowAssignee.getAssignValue ())){
|
|
|
+ String postId = flowAssignee.getAssignValue ();
|
|
|
+ List<UserDTO> userList = SpringUtil.getBean ( UserService.class).findListByPostId (postId );
|
|
|
+ candidateUserIds.addAll ( com.jeeplus.flowable.common.handler.CollectionUtils.extractToList (userList, "id"));
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ case "company":
|
|
|
+ if(StrUtil.isNotBlank (flowAssignee.getAssignValue ())){
|
|
|
+ String companyId = flowAssignee.getAssignValue ();
|
|
|
+ List<User> userList = SpringUtil.getBean (UserService.class).lambdaQuery ().eq ( User::getCompanyId, companyId ).list ();
|
|
|
+ candidateUserIds.addAll (com.jeeplus.flowable.common.handler.CollectionUtils.extractToList (userList, "id"));
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ case "depart":
|
|
|
+ if(StrUtil.isNotBlank (flowAssignee.getAssignValue ())){
|
|
|
+ String officeId = flowAssignee.getAssignValue ();
|
|
|
+ List<User> userList = SpringUtil.getBean (UserService.class).lambdaQuery ().eq ( User::getOfficeId, officeId ).list ();
|
|
|
+ candidateUserIds.addAll (com.jeeplus.flowable.common.handler.CollectionUtils.extractToList (userList, "id"));
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ case "role":
|
|
|
+ if(StrUtil.isNotBlank (flowAssignee.getAssignValue ())){
|
|
|
+ String[] roleIds = flowAssignee.getAssignValue ().split (",");
|
|
|
+ for(String roleId: roleIds){
|
|
|
+ List<UserDTO> userList = SpringUtil.getBean (UserService.class).findListByRoleId ( roleId );
|
|
|
+ candidateUserIds.addAll (com.jeeplus.flowable.common.handler.CollectionUtils.extractToList (userList, "id"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "applyUserId":
|
|
|
+ candidateUserIds.add (flowAssignee.getAssignValue ());
|
|
|
+ break;
|
|
|
+ case "previousExecutor":
|
|
|
+ HistoricTaskInstance lastHisTask = SpringUtil.getBean (HistoryService.class).createHistoricTaskInstanceQuery ().processInstanceId (procInsId).finished ()
|
|
|
+ .includeProcessVariables ().orderByHistoricTaskInstanceEndTime ().desc ().list ().get (0);
|
|
|
+
|
|
|
+ candidateUserIds.add(lastHisTask.getAssignee ());
|
|
|
+ break;
|
|
|
+ case "currentUserId":
|
|
|
+ candidateUserIds.add( UserUtils.getCurrentUserDTO ().getId ());
|
|
|
+ break;
|
|
|
+ case "sql":
|
|
|
+ Map userMap = SpringUtil.getBean (JdbcTemplate.class).queryForMap (flowAssignee.getAssignValue ());
|
|
|
+ candidateUserIds.add(userMap.get ("id").toString ());
|
|
|
+ break;
|
|
|
+ case "custom":
|
|
|
+ //根据你的自定义标记,请自行实现
|
|
|
+
|
|
|
+ //如果字符串中包含 "currentUserSql:" 则进行如下代码替换和处理
|
|
|
+ if(flowAssignee.getAssignValue ().contains("currentUserSql:")){
|
|
|
+ //对应sql为:select su.* from sys_user_role a left join sys_role sr on sr.id = a.role_id left join sys_user su on su.id = a.user_id left join sys_office so on so.id = su.office_id where sr.en_name= 'bmzr' and so.id = (select office_id from sys_user where id = @currentUser.id)
|
|
|
+ //用于查询当前登录人的部门主任人员信息
|
|
|
+ UserDTO currentUserDTO = UserUtils.getCurrentUserDTO();
|
|
|
+ String sql = flowAssignee.getAssignValue ();
|
|
|
+ if(sql.contains("@currentUser.id")){
|
|
|
+ //将标志进行去除
|
|
|
+ sql = sql.replaceAll("currentUserSql:","");
|
|
|
+ //将判断条件进行替换
|
|
|
+ sql = sql.replaceAll("@currentUser.id","'" + currentUserDTO.getId() + "'");
|
|
|
+ }
|
|
|
+ List<Map<String, Object>> maps = SpringUtil.getBean(JdbcTemplate.class).queryForList(sql);
|
|
|
+ for (Map<String, Object> map : maps) {
|
|
|
+ candidateUserIds.add(map.get ("id").toString ());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果字符串中包含 "cwCurrentUserSql:" 则进行如下代码替换和处理
|
|
|
+ if(flowAssignee.getAssignValue ().contains("cwCurrentUserSql:")){
|
|
|
+ //对应sql为:select su.* from sys_user_role a left join sys_role sr on sr.id = a.role_id left join sys_user su on su.id = a.user_id left join sys_office so on so.id = su.office_id where sr.en_name= 'bmzr' and so.id = (select office_id from sys_user where id = @currentUser.id)
|
|
|
+ //用于查询当前登录人的部门主任人员信息
|
|
|
+ UserDTO currentUserDTO = UserUtils.getCurrentUserDTO();
|
|
|
+ String sql = flowAssignee.getAssignValue ();
|
|
|
+ if(sql.contains("@currentUser.id")){
|
|
|
+ //将标志进行去除
|
|
|
+ sql = sql.replaceAll("cwCurrentUserSql:","");
|
|
|
+ //将判断条件进行替换
|
|
|
+ sql = sql.replaceAll("@currentUser.id","'" + currentUserDTO.getId() + "'");
|
|
|
+ }
|
|
|
+ if(sql.contains("@currentUser.officeDTO.name")){
|
|
|
+ //将标志进行去除
|
|
|
+ sql = sql.replaceAll("cwCurrentUserSql:","");
|
|
|
+ //将判断条件进行替换
|
|
|
+ sql = sql.replaceAll("@currentUser.officeDTO.name","'" + currentUserDTO.getOfficeDTO().getName() + "'");
|
|
|
+ }
|
|
|
+ List<Map<String, Object>> maps = SpringUtil.getBean(JdbcTemplate.class).queryForList(sql);
|
|
|
+ for (Map<String, Object> map : maps) {
|
|
|
+ candidateUserIds.add(map.get ("id").toString ());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(flowAssignee.getAssignValue ().contains("zsbxCurrentUserSql:")){
|
|
|
+ //对应sql为:select su.* from sys_user_role a left join sys_role sr on sr.id = a.role_id left join sys_user su on su.id = a.user_id left join sys_office so on so.id = su.office_id where sr.en_name= 'bmzr' and so.id = (select office_id from sys_user where id = @currentUser.id)
|
|
|
+ //用于查询当前登录人的部门主任人员信息
|
|
|
+ UserDTO currentUserDTO = UserUtils.getCurrentUserDTO();
|
|
|
+ String sql = flowAssignee.getAssignValue ();
|
|
|
+ if(sql.contains("@currentUser.id")){
|
|
|
+ //将标志进行去除
|
|
|
+ sql = sql.replaceAll("zsbxCurrentUserSql:","");
|
|
|
+ //将判断条件进行替换
|
|
|
+ sql = sql.replaceAll("@currentUser.id","'" + currentUserDTO.getId() + "'");
|
|
|
+ }
|
|
|
+ if(sql.contains("@currentUser.officeDTO.name")){
|
|
|
+ //将标志进行去除
|
|
|
+ sql = sql.replaceAll("zsbxCurrentUserSql:","");
|
|
|
+ //将判断条件进行替换
|
|
|
+ sql = sql.replaceAll("@currentUser.officeDTO.name","'" + currentUserDTO.getOfficeDTO().getName() + "'");
|
|
|
+ }
|
|
|
+ List<Map<String, Object>> maps = SpringUtil.getBean(JdbcTemplate.class).queryForList(sql);
|
|
|
+ for (Map<String, Object> map : maps) {
|
|
|
+ candidateUserIds.add(map.get ("id").toString ());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果字符串中包含 "gsldbxCurrentUserSql:" 则进行如下代码替换和处理
|
|
|
+ if(flowAssignee.getAssignValue ().contains("gsldbxCurrentUserSql:")){
|
|
|
+ String sql = flowAssignee.getAssignValue ();
|
|
|
+ if(StringUtils.isNotBlank(startUserId)){
|
|
|
+ //通过查询流程发起人确认发起人所在部门以及部门分管领导信息
|
|
|
+ if(sql.contains("@currentUser.id")){
|
|
|
+ //将标志进行去除
|
|
|
+ sql = sql.replaceAll("gsldbxCurrentUserSql:","");
|
|
|
+ //将判断条件进行替换
|
|
|
+ sql = sql.replaceAll("@currentUser.id","'" + startUserId + "'");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //如果找不到发起人信息 则审核人默认为 角色 总经办人员信息
|
|
|
+ sql = "SELECT su.* FROM sys_user_role a LEFT JOIN sys_role sr ON sr.id = a.role_id LEFT JOIN sys_user su ON su.id = a.user_id LEFT JOIN sys_office so ON so.id = su.office_id WHERE sr.en_name = 'zjb'";
|
|
|
+ }
|
|
|
+ //设定部门分管领导为审核人
|
|
|
+ List<Map<String, Object>> maps = SpringUtil.getBean(JdbcTemplate.class).queryForList(sql);
|
|
|
+ if(null == maps || maps.size()==0){
|
|
|
+ sql = "SELECT su.* FROM sys_user_role a LEFT JOIN sys_role sr ON sr.id = a.role_id LEFT JOIN sys_user su ON su.id = a.user_id LEFT JOIN sys_office so ON so.id = su.office_id WHERE sr.en_name = 'zjb'";
|
|
|
+ maps = SpringUtil.getBean(JdbcTemplate.class).queryForList(sql);
|
|
|
+ }
|
|
|
+ for (Map<String, Object> map : maps) {
|
|
|
+ candidateUserIds.add(map.get ("id").toString ());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<String> candidateIds = new ArrayList<> (candidateUserIds);
|
|
|
+ return candidateIds;
|
|
|
+ }
|
|
|
}
|