Przeglądaj źródła

Merge branch 'dev_v3.0.0' of http://git.qmth.com.cn/wangliang/distributed-print-service into dev_v3.0.0

xiaof 3 lat temu
rodzic
commit
795735b53d
19 zmienionych plików z 825 dodań i 59 usunięć
  1. 34 13
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java
  2. 14 15
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  3. 35 30
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java
  4. 69 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysRoleGroupMemberController.java
  5. 66 0
      teachcloud-common-api/src/main/java/com/qmth/teachcloud/common/api/api/SysRoleGroupMemberController.java
  6. 46 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/SysRoleGroupMemberMatch.java
  7. 29 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/SysRoleGroupMemberMatchParams.java
  8. 59 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/SysRoleGroupMemberParams.java
  9. 52 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/SysRoleGroupMemberMatchResult.java
  10. 95 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysRoleGroupMember.java
  11. 3 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FieldUniqueEnum.java
  12. 16 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysRoleGroupMemberMapper.java
  13. 17 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysUserMapper.java
  14. 62 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysRoleGroupMemberService.java
  15. 17 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java
  16. 153 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysRoleGroupMemberServiceImpl.java
  17. 22 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java
  18. 5 0
      teachcloud-common/src/main/resources/mapper/SysRoleGroupMemberMapper.xml
  19. 31 0
      teachcloud-common/src/main/resources/mapper/SysUserMapper.xml

+ 34 - 13
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -121,10 +121,11 @@ public class ActivitiServiceImpl implements ActivitiService {
         for (Map.Entry<String, CustomFlowVarDto> entry : agginessMap.entrySet()) {
             CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(entry.getValue()), CustomFlowVarDto.class);
             if (Objects.nonNull(customFlowVarDto.getFlowTaskVar()) && customFlowVarDto.getFlowTaskVar().contains(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST)) {
+                Set<String> set = new LinkedHashSet(customFlowVarDto.getApproveIds());
                 if (customFlowVarDto.getMultipleUserApproveType() == CustomFlowMultipleUserApproveTypeEnum.SOME) {
-                    varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds().toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
+                    varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set.toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
                 } else {
-                    varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds());
+                    varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set);
                 }
             } else {
                 varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds().get(0));
@@ -535,10 +536,11 @@ public class ActivitiServiceImpl implements ActivitiService {
         if (Objects.nonNull(agginessMap.get(nextFlowTaskResult.getTaskKey()))) {
             CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(nextFlowTaskResult.getTaskKey())), CustomFlowVarDto.class);
             if (Objects.nonNull(customFlowVarDto.getFlowTaskVar()) && customFlowVarDto.getFlowTaskVar().contains(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST)) {
+                Set<String> set = new LinkedHashSet(customFlowVarDto.getApproveIds());
                 if (customFlowVarDto.getMultipleUserApproveType() == CustomFlowMultipleUserApproveTypeEnum.SOME) {
-                    map.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds().toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
+                    map.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set.toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
                 } else {
-                    map.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds());
+                    map.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set);
                 }
             } else {
                 map.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), v -> customFlowVarDto.getApproveIds().get(0));
@@ -837,8 +839,9 @@ public class ActivitiServiceImpl implements ActivitiService {
                             List<String> approveIds = customFlowVarAllDto.getApproveIds();
                             approveIds.remove(String.valueOf(sysUser.getId()));
                             approveIds.add(userId);
+                            Set<String> set = new LinkedHashSet(approveIds);
                             allAgginessMap.put(userTask.getId(), customFlowVarAllDto);
-                            tfFlowLog.setPendApproveId(approveIds.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
+                            tfFlowLog.setPendApproveId(set.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
                         }
                         tfFlowApprove.setAllAssignee(JacksonUtil.parseJson(allAgginessMap));
                     } else {
@@ -846,10 +849,12 @@ public class ActivitiServiceImpl implements ActivitiService {
                     }
                 }
             } else {
-                removeApproveUserId(customFlowVarDto, String.valueOf(sysUser.getId()), userId);
+                Set<String> set = removeApproveUserId(customFlowVarDto, String.valueOf(sysUser.getId()), userId);
+                tfFlowLog.setPendApproveId(set.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
             }
         }
-        ApproveUserResult approveUserResult = sysUserService.findByIds(customFlowVarDto.getApproveIds().stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
+        Set<String> set = new LinkedHashSet(customFlowVarDto.getApproveIds());
+        ApproveUserResult approveUserResult = sysUserService.findByIds(set.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
         customFlowVarDto.setApproveUserNames(approveUserResult.getPendApproveUsers());
         agginessMap.put(userTask.getId(), customFlowVarDto);
         tfFlowApprove.setTransferAssignee(JacksonUtil.parseJson(agginessMap));
@@ -860,7 +865,12 @@ public class ActivitiServiceImpl implements ActivitiService {
         tfFlowLog.setApproveUserApproveType(customFlowVarDto.getMultipleUserApproveType());
         tfFlowLogService.save(tfFlowLog);
 
-        taskService.setAssignee(taskId, userId);
+        if (!multiInstance) {
+            taskService.deleteCandidateUser(taskId, String.valueOf(sysUser.getId()));
+            taskService.addCandidateUser(taskId, userId);
+        } else {
+            taskService.setAssignee(taskId, userId);
+        }
         return true;
     }
 
@@ -871,10 +881,11 @@ public class ActivitiServiceImpl implements ActivitiService {
      * @param userId
      * @param exchangeUserId
      */
-    protected void removeApproveUserId(CustomFlowVarDto customFlowVarDto, String userId, String exchangeUserId) {
+    protected Set removeApproveUserId(CustomFlowVarDto customFlowVarDto, String userId, String exchangeUserId) {
         List<String> approveIds = customFlowVarDto.getApproveIds();
         approveIds.remove(userId);
         approveIds.add(exchangeUserId);
+        return new LinkedHashSet(approveIds);
     }
 
     /**
@@ -949,13 +960,21 @@ public class ActivitiServiceImpl implements ActivitiService {
                                     approveUserIds.addAll(customFlowPropertyDto.getApproveUsers().stream().map(x -> String.valueOf(x.getId())).collect(Collectors.toList()));
                                 }
                                 break;
+                            case ROLE://角色
+                                if (Objects.nonNull(customFlowPropertyDto.getApproveRoles()) && customFlowPropertyDto.getApproveRoles().size() > 0) {
+//                                    List<SysUser> sysUserList = sysUserService.findByRoleIds(customFlowPropertyDto.getApproveRoles().stream().map(x -> x.getId()).collect(Collectors.toList()));
+//                                    approveUserIds.addAll(sysUserList.stream().map(x -> String.valueOf(x.getId())).collect(Collectors.toList()));
+                                }
+                                break;
                             default:
                                 break;
                         }
-                        ApproveUserResult approveUserResult = sysUserService.findByIds(approveUserIds.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
+                        Set<String> set = new LinkedHashSet(approveUserIds);
+                        ApproveUserResult approveUserResult = sysUserService.findByIds(set.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
                         ApproveUserResult approveUserResultCopyUser = null;
                         if (copyUserIds.size() > 0) {
-                            approveUserResultCopyUser = sysUserService.findByIds(copyUserIds.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
+                            Set<String> copyUserSet = new LinkedHashSet(copyUserIds);
+                            approveUserResultCopyUser = sysUserService.findByIds(copyUserSet.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
                         }
                         agginessMap.put(node.getTask().getFlowTaskId(), new CustomFlowVarDto(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST + i, approveUserIds, node.getTask().getProperty().getApproveUserType(), node.getTask().getProperty().getMultipleUserApproveType(), node.getTask().getProperty().getRejectType(), node.getTask().getProperty().getRejectResubmitType(), approveUserResult.getPendApproveUsers(), copyUserIds, Objects.nonNull(approveUserResultCopyUser) ? approveUserResultCopyUser.getPendApproveUsers() : null));
                         if (Objects.nonNull(customFlowPropertyDto.getRejectType()) && !Objects.equals(customFlowPropertyDto.getRejectType(), "")) {
@@ -1289,7 +1308,8 @@ public class ActivitiServiceImpl implements ActivitiService {
         }
         Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) flowProcessVarMap.get(SystemConstant.AGGINESS_MAP);
         List<String> approveUserIds = new ArrayList(Arrays.asList(String.valueOf(approveId)));
-        ApproveUserResult approveUserResult = sysUserService.findByIds(approveUserIds.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
+        Set<String> set = new LinkedHashSet(approveUserIds);
+        ApproveUserResult approveUserResult = sysUserService.findByIds(set.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
         agginessMap.put(CustomFlowTypeEnum.USER_TASK.getId() + DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK, new CustomFlowVarDto(SystemConstant.APPROVE_ID, approveUserIds, approveUserResult.getPendApproveUsers(), null, null));
         flowProcessVarMap.put(SystemConstant.AGGINESS_MAP, agginessMap);
 
@@ -1305,6 +1325,8 @@ public class ActivitiServiceImpl implements ActivitiService {
         map.remove(SystemConstant.APPROVE_ID);
         map.remove(SystemConstant.PROCESS_DEFINITION_ID);
         map.remove(SystemConstant.FLOW_STATUS);
+        map.remove(SystemConstant.OBJECT_DATA);
+        map.remove(SystemConstant.FLOW_SUBMIT);
         map.computeIfAbsent(SystemConstant.ACT_FLOW_ID, v -> tfCustomFlow.getActFlowId());
         tfCustomFlowEntity.setFlowProcessVar(JacksonUtil.parseJson(map));
         tfCustomFlow.setUpdateId(sysUser.getId());
@@ -1370,7 +1392,6 @@ public class ActivitiServiceImpl implements ActivitiService {
      */
     @Override
     public FlowViewResult getFlowView(Long flowId) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         TFCustomFlowEntity tfCustomFlowEntity = tfCustomFlowEntityService.findByFlowId(flowId);
         Optional.ofNullable(tfCustomFlowEntity).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("自定义流程实体数据为空"));
 

+ 14 - 15
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -1636,7 +1636,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         Optional.ofNullable(tfCustomFlow).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未找到自定义流程数据"));
 
         if (tfCustomFlow.getVersion().intValue() != version.intValue()) {
-            Optional.ofNullable(tfCustomFlow).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("自定义流程数据已发生改变,请刷新重试"));
+            throw ExceptionResultEnum.ERROR.exception("自定义流程数据已发生改变,请刷新重试");
         }
 
         JSONObject jsonObject = JSONObject.parseObject(examTaskApplyTemp.getExamTaskContent());
@@ -1898,12 +1898,12 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         }
 
         // 2.ExamRoomInfo 部分
-        List<PrintPlanStatusEnum> printPlanStatusEnumList = new ArrayList<>();
-        printPlanStatusEnumList.add(PrintPlanStatusEnum.PRINTING);
-        printPlanStatusEnumList.add(PrintPlanStatusEnum.PRINT_FINISH);
+//        List<PrintPlanStatusEnum> printPlanStatusEnumList = new ArrayList<>();
+//        printPlanStatusEnumList.add(PrintPlanStatusEnum.PRINTING);
+//        printPlanStatusEnumList.add(PrintPlanStatusEnum.PRINT_FINISH);
         List<ExamPackageDetail> examPackageDetailDatasource = this.baseMapper.findExamPackageDetailByPaperNumber(schoolId, examTask.getExamId(), examTask.getCourseCode(), paperNumber, null);
         if (examPackageDetailDatasource.size() == 0) {
-            throw ExceptionResultEnum.ERROR.exception("任务处理中,请稍后查看!");
+            throw ExceptionResultEnum.ERROR.exception("缺少该命题任务对应的考务数据");
         }
         ExamObjectDto examObjectDto = this.buildExamObjectDtoByPackageDatasource(examPackageDetailDatasource);
 
@@ -2125,21 +2125,20 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                         }
                     }
                 }
+                printCount = studentCount + " + " + backupCount;
+                printTotalCount = printTotalCount + studentCount + backupCount;
 
+                // 组装examRoom
+                ExamRoomInfo examRoomInfo = new ExamRoomInfo();
+                examRoomInfo.setPackageCode(packageCode);
                 if (!CollectionUtils.isEmpty(clazzIds)) {
                     classNames = examDetailService.findClazzNamesByClazzIds(clazzIds, separator);
-                    printCount = studentCount + " + " + backupCount;
-                    printTotalCount = printTotalCount + studentCount + backupCount;
-
-                    // 组装examRoom
-                    ExamRoomInfo examRoomInfo = new ExamRoomInfo();
-                    examRoomInfo.setPackageCode(packageCode);
-                    examRoomInfo.setClazzNames(classNames);
                     examRoomInfo.setCampusNames(basicCampusService.findCampusNamesByClazzIdList(clazzIds, ","));
-                    examRoomInfo.setStudentCount(studentCount);
-                    examRoomInfo.setPrintCount(printCount);
-                    examRoomInfoList.add(examRoomInfo);
                 }
+                examRoomInfo.setClazzNames(classNames);
+                examRoomInfo.setStudentCount(studentCount);
+                examRoomInfo.setPrintCount(printCount);
+                examRoomInfoList.add(examRoomInfo);
             }
         }
         ExamObjectDto examObjectDto = new ExamObjectDto();

+ 35 - 30
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -12,10 +12,7 @@ import com.qmth.distributed.print.business.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
 import com.qmth.distributed.print.business.enums.DictionaryEnum;
 import com.qmth.distributed.print.business.enums.LoginTypeEnum;
-import com.qmth.distributed.print.business.service.BasicVerifyCodeService;
-import com.qmth.distributed.print.business.service.ExamPrintPlanService;
-import com.qmth.distributed.print.business.service.PrintCommonService;
-import com.qmth.distributed.print.business.service.TBSyncTaskService;
+import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.util.PdfUtil;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
 import com.qmth.teachcloud.common.bean.result.LoginResult;
@@ -26,7 +23,10 @@ import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
 import com.qmth.teachcloud.common.service.*;
-import com.qmth.teachcloud.common.util.*;
+import com.qmth.teachcloud.common.util.FileUtil;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import io.swagger.annotations.*;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -111,7 +111,7 @@ public class SysController {
     BasicCampusService basicCampusService;
 
     @Resource
-    FileStoreUtil fileStoreUtil;
+    BasicExamService basicExamService;
 
     /**
      * 登录
@@ -581,32 +581,37 @@ public class SysController {
                 break;
             case COLLEGE:
                 if (Objects.nonNull(semesterId)) {
-                    QueryWrapper<ExamPrintPlan> examPrintPlanQueryWrapper = new QueryWrapper<>();
-                    examPrintPlanQueryWrapper.select(" DISTINCT org_id as orgId ")
-                            .eq("semester_id", SystemConstant.convertIdToLong(semesterId));
-                    List<ExamPrintPlan> examPrintPlanList = examPrintPlanService.list(examPrintPlanQueryWrapper);
-                    if (Objects.nonNull(examPrintPlanList) && examPrintPlanList.size() > 0) {
-                        Set<Long> orgIdSet = examPrintPlanList.stream().map(s -> s.getOrgId()).collect(Collectors.toSet());
-                        QueryWrapper<SysOrg> sysOrgQueryWrapper = new QueryWrapper<>();
-                        sysOrgQueryWrapper.lambda().in(SysOrg::getId, orgIdSet);
-                        List<SysOrg> sysOrgList = sysOrgService.list(sysOrgQueryWrapper);
-                        List<SysOrg> newSysOrgList = new ArrayList<>();
-                        newSysOrgList.addAll(sysOrgList);
-                        for (SysOrg s : sysOrgList) {
-                            if (s.getType() == OrgTypeEnum.SCHOOL) {
-                                newSysOrgList.addAll(sysOrgService.findByConnectByRootOrgId(s.getId()));
-                            } else if (s.getType() == OrgTypeEnum.TEACHING_ROOM || s.getType() == OrgTypeEnum.FACULTY || s.getType() == OrgTypeEnum.PRINTING_HOUSE) {
-                                newSysOrgList.addAll(sysOrgService.findByConnectByParentId(s.getId(), true, false));
+                    QueryWrapper<BasicExam> basicExamQueryWrapper = new QueryWrapper<>();
+                    basicExamQueryWrapper.lambda().eq(BasicExam::getSemesterId, SystemConstant.convertIdToLong(semesterId));
+                    List<BasicExam> basicExamList = basicExamService.list(basicExamQueryWrapper);
+                    if (Objects.nonNull(basicExamList) && basicExamList.size() > 0) {
+                        List<Long> examIdList = basicExamList.stream().map(s -> s.getId()).collect(Collectors.toList());
+                        QueryWrapper<ExamPrintPlan> examPrintPlanQueryWrapper = new QueryWrapper<>();
+                        examPrintPlanQueryWrapper.lambda().in(ExamPrintPlan::getExamId, examIdList);
+                        List<ExamPrintPlan> examPrintPlanList = examPrintPlanService.list(examPrintPlanQueryWrapper);
+                        if (Objects.nonNull(examPrintPlanList) && examPrintPlanList.size() > 0) {
+                            Set<Long> orgIdSet = examPrintPlanList.stream().map(s -> s.getOrgId()).collect(Collectors.toSet());
+                            QueryWrapper<SysOrg> sysOrgQueryWrapper = new QueryWrapper<>();
+                            sysOrgQueryWrapper.lambda().in(SysOrg::getId, orgIdSet);
+                            List<SysOrg> sysOrgList = sysOrgService.list(sysOrgQueryWrapper);
+                            List<SysOrg> newSysOrgList = new ArrayList<>();
+                            newSysOrgList.addAll(sysOrgList);
+                            for (SysOrg s : sysOrgList) {
+                                if (s.getType() == OrgTypeEnum.SCHOOL) {
+                                    newSysOrgList.addAll(sysOrgService.findByConnectByRootOrgId(s.getId()));
+                                } else if (s.getType() == OrgTypeEnum.TEACHING_ROOM || s.getType() == OrgTypeEnum.FACULTY || s.getType() == OrgTypeEnum.PRINTING_HOUSE) {
+                                    newSysOrgList.addAll(sysOrgService.findByConnectByParentId(s.getId(), true, false));
+                                }
                             }
+                            Set<SysOrg> newSysOrgSet = newSysOrgList.stream().filter(s -> s.getType() == OrgTypeEnum.COLLEGE).collect(Collectors.toSet());
+                            dictionaryResultList = newSysOrgSet.stream().map(e -> {
+                                DictionaryResult dictionaryResult = new DictionaryResult();
+                                dictionaryResult.setId(e.getId());
+                                dictionaryResult.setCode(e.getCode());
+                                dictionaryResult.setName(e.getName());
+                                return dictionaryResult;
+                            }).collect(Collectors.toList());
                         }
-                        newSysOrgList = newSysOrgList.stream().filter(s -> s.getType() == OrgTypeEnum.COLLEGE).collect(Collectors.toList());
-                        dictionaryResultList = newSysOrgList.stream().map(e -> {
-                            DictionaryResult dictionaryResult = new DictionaryResult();
-                            dictionaryResult.setId(e.getId());
-                            dictionaryResult.setCode(e.getCode());
-                            dictionaryResult.setName(e.getName());
-                            return dictionaryResult;
-                        }).collect(Collectors.toList());
                     }
                 } else {
                     List<SysOrg> sysOrgList = sysOrgService.list(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSchoolId, schoolId).eq(SysOrg::getEnable, true));

+ 69 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/SysRoleGroupMemberController.java

@@ -0,0 +1,69 @@
+package com.qmth.distributed.print.api;
+
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberMatchParams;
+import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberParams;
+import com.qmth.teachcloud.common.bean.result.SysRoleGroupMemberMatchResult;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysRoleGroupMember;
+import com.qmth.teachcloud.common.service.SysRoleGroupMemberService;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+/**
+ * <p>
+ * 角色组成员表 前端控制器
+ * </p>
+ *
+ * @author wangliang
+ * @since 2022-03-08
+ */
+@Api(tags = "角色组成员Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/role/group")
+@Validated
+@Aac(auth = BOOL.FALSE, strict = BOOL.FALSE)
+public class SysRoleGroupMemberController {
+
+    @Resource
+    SysRoleGroupMemberService sysRoleGroupMemberService;
+
+    @ApiOperation(value = "新增/修改")
+    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    public Result save(@Valid @RequestBody SysRoleGroupMemberParams roleGroupMemberParams, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        return ResultUtil.ok(sysRoleGroupMemberService.saveOrUpdate(roleGroupMemberParams));
+    }
+
+    @ApiOperation(value = "成员管理查询")
+    @ApiResponses({@ApiResponse(code = 200, message = "角色组成员信息", response = SysRoleGroupMember.class)})
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    public Result list(@RequestParam(value = "roleId") String roleId) {
+        return ResultUtil.ok(sysRoleGroupMemberService.findByRoleId(SystemConstant.convertIdToLong(roleId)));
+    }
+
+    @ApiOperation(value = "匹配查询")
+    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = SysRoleGroupMemberMatchResult.class)})
+    @RequestMapping(value = "/match/list", method = RequestMethod.POST)
+    public Result matchList(@Valid @RequestBody SysRoleGroupMemberMatchParams roleGroupMemberMatchParams, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        return ResultUtil.ok(sysRoleGroupMemberService.matchList(roleGroupMemberMatchParams));
+    }
+}

+ 66 - 0
teachcloud-common-api/src/main/java/com/qmth/teachcloud/common/api/api/SysRoleGroupMemberController.java

@@ -0,0 +1,66 @@
+//package com.qmth.teachcloud.common.api.api;
+//
+//import com.qmth.boot.api.constant.ApiConstant;
+//import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
+//import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberMatchParams;
+//import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberParams;
+//import com.qmth.teachcloud.common.contant.SystemConstant;
+//import com.qmth.teachcloud.common.entity.SysRoleGroupMember;
+//import com.qmth.teachcloud.common.service.SysRoleGroupMemberService;
+//import com.qmth.teachcloud.common.util.Result;
+//import com.qmth.teachcloud.common.util.ResultUtil;
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import io.swagger.annotations.ApiResponse;
+//import io.swagger.annotations.ApiResponses;
+//import org.springframework.validation.BindingResult;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.web.bind.annotation.*;
+//
+//import javax.annotation.Resource;
+//import javax.validation.Valid;
+//
+///**
+// * <p>
+// * 角色组成员表 前端控制器
+// * </p>
+// *
+// * @author wangliang
+// * @since 2022-03-08
+// */
+//@Api(tags = "角色组成员Controller")
+//@RestController
+//@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/role/group")
+//@Validated
+//public class SysRoleGroupMemberController {
+//
+//    @Resource
+//    SysRoleGroupMemberService sysRoleGroupMemberService;
+//
+//    @ApiOperation(value = "新增/修改")
+//    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
+//    @RequestMapping(value = "/save", method = RequestMethod.POST)
+//    public Result save(@Valid @RequestBody SysRoleGroupMemberParams roleGroupMemberParams, BindingResult bindingResult) {
+//        if (bindingResult.hasErrors()) {
+//            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+//        }
+//        return ResultUtil.ok(sysRoleGroupMemberService.saveOrUpdate(roleGroupMemberParams));
+//    }
+//
+//    @ApiOperation(value = "查询")
+//    @ApiResponses({@ApiResponse(code = 200, message = "角色组成员信息", response = SysRoleGroupMember.class)})
+//    @RequestMapping(value = "/list", method = RequestMethod.POST)
+//    public Result list(@RequestParam(value = "roleId") String roleId) {
+//        return ResultUtil.ok(sysRoleGroupMemberService.findByRoleId(SystemConstant.convertIdToLong(roleId)));
+//    }
+//
+//    @ApiOperation(value = "匹配查询")
+//    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = ApproveUserResult.class)})
+//    @RequestMapping(value = "/match/list", method = RequestMethod.POST)
+//    public Result matchList(@Valid @RequestBody SysRoleGroupMemberMatchParams roleGroupMemberMatchParams, BindingResult bindingResult) {
+//        if (bindingResult.hasErrors()) {
+//            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+//        }
+//        return ResultUtil.ok(sysRoleGroupMemberService.matchList(roleGroupMemberMatchParams));
+//    }
+//}

+ 46 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/SysRoleGroupMemberMatch.java

@@ -0,0 +1,46 @@
+package com.qmth.teachcloud.common.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 角色组成员match
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/3/9
+ */
+public class SysRoleGroupMemberMatch implements Serializable {
+
+    @ApiModelProperty(value = "角色id组")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotEmpty(message = "角色id组不能为空")
+    private List<Long> roleIdList;
+
+    @ApiModelProperty(value = "用户id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "用户id不能为空")
+    private Long userId;
+
+    public List<Long> getRoleIdList() {
+        return roleIdList;
+    }
+
+    public void setRoleIdList(List<Long> roleIdList) {
+        this.roleIdList = roleIdList;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+}

+ 29 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/SysRoleGroupMemberMatchParams.java

@@ -0,0 +1,29 @@
+package com.qmth.teachcloud.common.bean.params;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * @Description: 角色组成员params
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/3/8
+ */
+public class SysRoleGroupMemberMatchParams implements Serializable {
+
+    @ApiModelProperty(value = "流程节点数据组")
+    @NotEmpty(message = "流程节点数据组不能为空")
+    private Map<String, SysRoleGroupMemberMatch> flowRoleGroupMemberMatchMap;
+
+    public Map<String, SysRoleGroupMemberMatch> getFlowRoleGroupMemberMatchMap() {
+        return flowRoleGroupMemberMatchMap;
+    }
+
+    public void setFlowRoleGroupMemberMatchMap(Map<String, SysRoleGroupMemberMatch> flowRoleGroupMemberMatchMap) {
+        this.flowRoleGroupMemberMatchMap = flowRoleGroupMemberMatchMap;
+    }
+}

+ 59 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/SysRoleGroupMemberParams.java

@@ -0,0 +1,59 @@
+package com.qmth.teachcloud.common.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 角色组成员params
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/3/8
+ */
+public class SysRoleGroupMemberParams implements Serializable {
+
+    @ApiModelProperty(value = "角色id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "角色id不能为空")
+    private Long roleId;
+
+    @ApiModelProperty(value = "用户id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "用户id不能为空")
+    private Long userId;
+
+    @ApiModelProperty(value = "成员id组")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotEmpty(message = "成员id组不能为空")
+    private List<Long> memberIdList;
+
+    public Long getRoleId() {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId) {
+        this.roleId = roleId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public List<Long> getMemberIdList() {
+        return memberIdList;
+    }
+
+    public void setMemberIdList(List<Long> memberIdList) {
+        this.memberIdList = memberIdList;
+    }
+}

+ 52 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/SysRoleGroupMemberMatchResult.java

@@ -0,0 +1,52 @@
+package com.qmth.teachcloud.common.bean.result;
+
+import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 角色组成员返回
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/3/9
+ */
+public class SysRoleGroupMemberMatchResult implements Serializable {
+
+    @ApiModelProperty(value = "是否手动选择,true:是,false:不是")
+    boolean manual = false;
+
+    @ApiModelProperty(value = "人员信息")
+    List<ApproveUserResult> approveUserResultList;
+
+    public SysRoleGroupMemberMatchResult() {
+
+    }
+
+    public SysRoleGroupMemberMatchResult(List<ApproveUserResult> approveUserResultList) {
+        this.approveUserResultList = approveUserResultList;
+    }
+
+    public SysRoleGroupMemberMatchResult(boolean manual, List<ApproveUserResult> approveUserResultList) {
+        this.manual = manual;
+        this.approveUserResultList = approveUserResultList;
+    }
+
+    public boolean isManual() {
+        return manual;
+    }
+
+    public void setManual(boolean manual) {
+        this.manual = manual;
+    }
+
+    public List<ApproveUserResult> getApproveUserResultList() {
+        return approveUserResultList;
+    }
+
+    public void setApproveUserResultList(List<ApproveUserResult> approveUserResultList) {
+        this.approveUserResultList = approveUserResultList;
+    }
+}

+ 95 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysRoleGroupMember.java

@@ -0,0 +1,95 @@
+package com.qmth.teachcloud.common.entity;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 角色组成员表
+ * </p>
+ *
+ * @author wangliang
+ * @since 2022-03-08
+ */
+@ApiModel(value = "SysRoleGroupMember对象", description = "角色组成员表")
+public class SysRoleGroupMember implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    @ApiModelProperty(value = "角色id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "角色id不能为空")
+    private Long roleId;
+
+    @ApiModelProperty(value = "用户id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long userId;
+
+    @ApiModelProperty(value = "成员id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long memberId;
+
+    @ApiModelProperty(value = "是否启用,0:停用,1:启用")
+    private Boolean enable;
+
+    public SysRoleGroupMember() {
+
+    }
+
+    public SysRoleGroupMember(Long roleId, Long userId, Long memberId) {
+        this.id = SystemConstant.getDbUuid();
+        this.roleId = roleId;
+        this.userId = userId;
+        this.memberId = memberId;
+    }
+
+    public Long getRoleId() {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId) {
+        this.roleId = roleId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(Long memberId) {
+        this.memberId = memberId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+}

+ 3 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FieldUniqueEnum.java

@@ -33,7 +33,9 @@ public enum FieldUniqueEnum {
 
     student_schoolId_code_orgId_idx("学生学号"),
 
-    custom_flow_schoolId_type_idx("流程类型");
+    custom_flow_schoolId_type_idx("流程类型"),
+
+    role_group_roleId_memberId_idx("角色成员数据重复");
 
     private String title;
 

+ 16 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysRoleGroupMemberMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.common.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.teachcloud.common.entity.SysRoleGroupMember;
+
+/**
+ * <p>
+ * 角色组成员表 Mapper 接口
+ * </p>
+ *
+ * @author wangliang
+ * @since 2022-03-08
+ */
+public interface SysRoleGroupMemberMapper extends BaseMapper<SysRoleGroupMember> {
+
+}

+ 17 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysUserMapper.java

@@ -101,8 +101,25 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      */
     List<SysUser> findByRoleIds(@Param("roleIds") List<Long> roleIds);
 
+    /**
+     * 根据角色ids查找用户
+     *
+     * @param roleIds
+     * @return
+     */
+    List<ApproveUserResult> findByRoleIdsForResult(@Param("roleIds") List<Long> roleIds);
+
+    /**
+     * 根据id集合获取
+     *
+     * @param ids
+     * @return
+     */
+    List<ApproveUserResult> findByIdsForResult(@Param("ids") List<Long> ids);
+
     /**
      * 根据学校id查找用户
+     *
      * @param schoolId 学校id
      * @return 用户集合
      */

+ 62 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysRoleGroupMemberService.java

@@ -0,0 +1,62 @@
+package com.qmth.teachcloud.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberMatchParams;
+import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberParams;
+import com.qmth.teachcloud.common.bean.result.SysRoleGroupMemberMatchResult;
+import com.qmth.teachcloud.common.entity.SysRoleGroupMember;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 角色组成员表 服务类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2022-03-08
+ */
+public interface SysRoleGroupMemberService extends IService<SysRoleGroupMember> {
+
+    /**
+     * 保存或修改
+     *
+     * @param roleGroupMemberParams
+     * @return
+     */
+    public boolean saveOrUpdate(SysRoleGroupMemberParams roleGroupMemberParams);
+
+    /**
+     * 根据roleId查找数据
+     *
+     * @param roleId
+     * @return
+     */
+    public List<SysRoleGroupMember> findByRoleId(Long roleId);
+
+    /**
+     * 根据roleId和userId查找数据
+     *
+     * @param roleId
+     * @param userId
+     * @return
+     */
+    public List<SysRoleGroupMember> findByRoleIdAndUserId(Long roleId, Long userId);
+
+    /**
+     * 根据memberId查找数据
+     *
+     * @param memberId
+     * @return
+     */
+    public List<SysRoleGroupMember> findByMemberId(Long memberId);
+
+    /**
+     * 流程数据组匹配查询
+     *
+     * @param roleGroupMemberMatchParams
+     * @return
+     */
+    public Map<String, SysRoleGroupMemberMatchResult> matchList(SysRoleGroupMemberMatchParams roleGroupMemberMatchParams);
+}

+ 17 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java

@@ -216,6 +216,22 @@ public interface SysUserService extends IService<SysUser> {
      */
     List<SysUser> findByRoleIds(List<Long> roleIds);
 
+    /**
+     * 根据角色ids查找用户
+     *
+     * @param roleIds
+     * @return
+     */
+    List<ApproveUserResult> findByRoleIdsForResult(List<Long> roleIds);
+
+    /**
+     * 根据id集合获取
+     *
+     * @param ids
+     * @return
+     */
+    public List<ApproveUserResult> findByIdsForResult(List<Long> ids);
+
     /**
      * 根据用户id查找该用户所属的机构集合
      *
@@ -234,6 +250,7 @@ public interface SysUserService extends IService<SysUser> {
 
     /**
      * 查找机构树下所有用户集合
+     *
      * @return 用户集合
      */
     List<SysUserResult> findSysUserResultList();

+ 153 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysRoleGroupMemberServiceImpl.java

@@ -0,0 +1,153 @@
+package com.qmth.teachcloud.common.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
+import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberMatch;
+import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberMatchParams;
+import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberParams;
+import com.qmth.teachcloud.common.bean.result.SysRoleGroupMemberMatchResult;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysRoleGroupMember;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
+import com.qmth.teachcloud.common.mapper.SysRoleGroupMemberMapper;
+import com.qmth.teachcloud.common.service.SysRoleGroupMemberService;
+import com.qmth.teachcloud.common.service.SysUserService;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 角色组成员表 服务实现类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2022-03-08
+ */
+@Service
+public class SysRoleGroupMemberServiceImpl extends ServiceImpl<SysRoleGroupMemberMapper, SysRoleGroupMember> implements SysRoleGroupMemberService {
+
+    @Resource
+    SysUserService sysUserService;
+
+    /**
+     * boolean
+     *
+     * @param roleGroupMemberParams
+     * @return
+     */
+    @Override
+    @Transactional
+    public boolean saveOrUpdate(SysRoleGroupMemberParams roleGroupMemberParams) {
+        try {
+            //先查询数据库里的数据
+            List<SysRoleGroupMember> sysRoleGroupMemberDbList = this.findByRoleIdAndUserId(roleGroupMemberParams.getRoleId(), roleGroupMemberParams.getUserId());
+            List<SysRoleGroupMember> sysRoleGroupMemberList = null;
+            List<Long> memberIdList = roleGroupMemberParams.getMemberIdList();
+            if (Objects.nonNull(sysRoleGroupMemberDbList) && sysRoleGroupMemberDbList.size() > 0) {//编辑
+                int count = (int) sysRoleGroupMemberDbList.stream().filter(s -> memberIdList.contains(s.getUserId())).count();
+                if (count != sysRoleGroupMemberDbList.size() || memberIdList.size() != sysRoleGroupMemberDbList.size()) {
+                    //全量删除
+                    this.removeByIds(sysRoleGroupMemberDbList.stream().map(s -> s.getId()).collect(Collectors.toList()));
+                    sysRoleGroupMemberList = new ArrayList<>();
+                    for (Long l : memberIdList) {
+                        sysRoleGroupMemberList.add(new SysRoleGroupMember(roleGroupMemberParams.getRoleId(), roleGroupMemberParams.getUserId(), l));
+                    }
+                }
+            } else {
+                sysRoleGroupMemberList = new ArrayList<>();
+                for (Long l : memberIdList) {
+                    sysRoleGroupMemberList.add(new SysRoleGroupMember(roleGroupMemberParams.getRoleId(), roleGroupMemberParams.getUserId(), l));
+                }
+            }
+            if (Objects.nonNull(sysRoleGroupMemberList)) {
+                this.saveBatch(sysRoleGroupMemberList);
+            }
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof DuplicateKeyException) {
+                String errorColumn = e.getCause().toString();
+                String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3, errorColumn.length()).replaceAll("'", "");
+                throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入");
+            } else if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 根据roleId查找数据
+     *
+     * @param roleId
+     * @return
+     */
+    @Override
+    public List<SysRoleGroupMember> findByRoleId(Long roleId) {
+        return this.list(new QueryWrapper<SysRoleGroupMember>().lambda().eq(SysRoleGroupMember::getRoleId, roleId));
+    }
+
+    /**
+     * 根据roleId和userId查找数据
+     *
+     * @param roleId
+     * @param userId
+     * @return
+     */
+    @Override
+    public List<SysRoleGroupMember> findByRoleIdAndUserId(Long roleId, Long userId) {
+        return this.list(new QueryWrapper<SysRoleGroupMember>().lambda().eq(SysRoleGroupMember::getRoleId, roleId).eq(SysRoleGroupMember::getUserId, userId));
+    }
+
+    /**
+     * 根据memberId查找数据
+     *
+     * @param memberId
+     * @return
+     */
+    @Override
+    public List<SysRoleGroupMember> findByMemberId(Long memberId) {
+        QueryWrapper<SysRoleGroupMember> sysRoleGroupMemberQueryWrapper = new QueryWrapper<>();
+        sysRoleGroupMemberQueryWrapper.lambda().eq(SysRoleGroupMember::getMemberId, memberId);
+        return this.list(sysRoleGroupMemberQueryWrapper);
+    }
+
+    /**
+     * 流程数据组匹配查询
+     *
+     * @param roleGroupMemberMatchParams
+     * @return
+     */
+    @Override
+    public Map<String, SysRoleGroupMemberMatchResult> matchList(SysRoleGroupMemberMatchParams roleGroupMemberMatchParams) {
+        Map<String, SysRoleGroupMemberMatchResult> approveUserResultMap = null;
+        Map<String, SysRoleGroupMemberMatch> map = roleGroupMemberMatchParams.getFlowRoleGroupMemberMatchMap();
+        for (Map.Entry<String, SysRoleGroupMemberMatch> entry : map.entrySet()) {
+            List<SysRoleGroupMember> sysRoleGroupMemberList = this.findByMemberId(entry.getValue().getUserId());
+//            List<SysRoleGroupMember> sysRoleGroupMemberFilter = sysRoleGroupMemberList.stream().filter(s -> v.getRoleIdList().contains(s.getRoleId())).collect(Collectors.toList());
+//            boolean manual = false;
+//            if (Objects.nonNull(sysRoleGroupMemberFilter) && sysRoleGroupMemberFilter.size() == 1) {//直接返回
+//                manual = false;
+//            } else if (Objects.nonNull(sysRoleGroupMemberFilter) && sysRoleGroupMemberFilter.size() > 1) {//前端选择
+//                manual = true;
+//            }
+//            List<SysRoleGroupMember> sysRoleGroupMembers = this.findByRoleIds(sysRoleGroupMemberFilter.stream().map(s -> s.getRoleId()).collect(Collectors.toList()), v.getUserId());
+            if (Objects.nonNull(sysRoleGroupMemberList) && sysRoleGroupMemberList.size() > 0) {
+                approveUserResultMap = Objects.isNull(approveUserResultMap) ? new LinkedHashMap<>() : approveUserResultMap;
+                List<ApproveUserResult> approveUserResultList = sysUserService.findByRoleIdsForResult(sysRoleGroupMemberList.stream().map(s -> s.getRoleId()).collect(Collectors.toList()));
+                approveUserResultMap.put(entry.getKey(), new SysRoleGroupMemberMatchResult(approveUserResultList));
+            }
+        }
+        return approveUserResultMap;
+    }
+}

+ 22 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -1051,6 +1051,28 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return sysUserMapper.findByRoleIds(roleIds);
     }
 
+    /**
+     * 根据角色ids查找用户
+     *
+     * @param roleIds
+     * @return
+     */
+    @Override
+    public List<ApproveUserResult> findByRoleIdsForResult(List<Long> roleIds) {
+        return sysUserMapper.findByRoleIdsForResult(roleIds);
+    }
+
+    /**
+     * 根据id集合获取
+     *
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<ApproveUserResult> findByIdsForResult(List<Long> ids) {
+        return sysUserMapper.findByIdsForResult(ids);
+    }
+
     @Override
     public List<Long> findOrgIdListByUserId(Long userId) {
         List<Long> orgIdList = new ArrayList<>();

+ 5 - 0
teachcloud-common/src/main/resources/mapper/SysRoleGroupMemberMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.qmth.teachcloud.common.mapper.SysRoleGroupMemberMapper">
+
+</mapper>

+ 31 - 0
teachcloud-common/src/main/resources/mapper/SysUserMapper.xml

@@ -181,6 +181,7 @@
             <if test="id != null and id != ''">
                 and su.id = #{id}
             </if>
+                and su.enable = 1
         </where>
     </select>
 
@@ -199,6 +200,7 @@
                     #{item}
                 </foreach>
             </if>
+                and su.enable = 1
         </where>
     </select>
 
@@ -211,6 +213,7 @@
                     #{item}
                 </foreach>
             </if>
+                and su.enable = 1
         </where>
     </select>
 
@@ -247,6 +250,34 @@
         </where>
     </select>
 
+    <select id="findByRoleIdsForResult" resultType="com.qmth.teachcloud.common.bean.params.ApproveUserResult">
+        <include refid="approveUserResultHeaderCommon" />
+        join sys_role sr on sr.id = sur.role_id
+        <where>
+            <if test="roleIds != null">
+                AND sr.id IN
+                <foreach collection="roleIds" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            and su.enable = 1
+            and sr.enable = 1
+        </where>
+    </select>
+
+    <select id="findByIdsForResult" resultType="com.qmth.teachcloud.common.bean.params.ApproveUserResult">
+        <include refid="approveUserResultHeaderCommon" />
+        <where>
+            <if test="ids != null">
+                AND su.id IN
+                <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            and su.enable = 1
+        </where>
+    </select>
+
     <select id="findVerifyCodeByUser" resultType="com.qmth.teachcloud.common.bean.dto.VerifyCodeCheckDto">
         SELECT
             id,