Pārlūkot izejas kodu

评卷员,科组长角色查询改动

caozixuan 2 gadi atpakaļ
vecāks
revīzija
8b86eb5913

+ 0 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/CloudUserPushService.java

@@ -30,15 +30,6 @@ public interface CloudUserPushService {
      */
     void pushCloudUser(List<Long> userIdList, SysUser requestUser) throws IllegalAccessException;
 
-    /**
-     * 查询某用户是否包含系统特定角色
-     *
-     * @param userId      用户id
-     * @param defaultRole 系统默认角色
-     * @return true:包含 || false:不包含
-     */
-    boolean includeSysRole(Long userId, RoleTypeEnum defaultRole);
-
     /**
      * 异步推送用户
      *

+ 2 - 15
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/CloudUserPushServiceImpl.java

@@ -74,19 +74,6 @@ public class CloudUserPushServiceImpl implements CloudUserPushService {
         }
     }
 
-    @Override
-    public boolean includeSysRole(Long userId, RoleTypeEnum defaultRole) {
-        SysRole sysRole = sysRoleService.getOne(new QueryWrapper<SysRole>().lambda().eq(SysRole::getType, defaultRole));
-        if (Objects.nonNull(sysRole)) {
-            SysUserRole sysUserRole = sysUserRoleService.getOne(new QueryWrapper<SysUserRole>()
-                    .lambda()
-                    .eq(SysUserRole::getUserId, userId)
-                    .eq(SysUserRole::getRoleId, sysRole.getId()));
-            return Objects.nonNull(sysUserRole);
-        }
-        return false;
-    }
-
     @Async
     @Transactional(rollbackFor = Exception.class)
     @Override
@@ -176,8 +163,8 @@ public class CloudUserPushServiceImpl implements CloudUserPushService {
             // 用户推送相关信息
             boolean enable = sysUser.getEnable();
             SyncStatusEnum syncStatus = cloudUserPushStatusService.findRecordByUserId(userId,schoolId).getSyncStatus();
-            boolean isMarker = this.includeSysRole(userId, RoleTypeEnum.MARKER);
-            boolean isLeader = this.includeSysRole(userId, RoleTypeEnum.MARKER_LEADER);
+            boolean isMarker = sysUserService.includeSysRole(userId, RoleTypeEnum.MARKER);
+            boolean isLeader = sysUserService.includeSysRole(userId, RoleTypeEnum.MARKER_LEADER);
 
             // 初始化推送对象
             List<UserPushParam> userPushParamList = new ArrayList<>();

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/SsoServiceImpl.java

@@ -53,7 +53,7 @@ public class SsoServiceImpl implements SsoService {
     public Map<String, Object> markerLoginInfo() {
         try {
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-            SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId());
+            SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId(), sysUser.getSchoolId());
             if (SpecialPrivilegeEnum.UNIDENTIFIED.equals(userSpecialPrivilege)
                     || SpecialPrivilegeEnum.SUBJECT_HEADER.equals(userSpecialPrivilege)) {
                 throw ExceptionResultEnum.ERROR.exception("该用户没有评卷员角色,无法登录");
@@ -68,7 +68,7 @@ public class SsoServiceImpl implements SsoService {
     public Map<String, Object> markerLeaderLoginInfo() {
         try {
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-            SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId());
+            SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId(), sysUser.getSchoolId());
             if (SpecialPrivilegeEnum.UNIDENTIFIED.equals(userSpecialPrivilege)
                     || SpecialPrivilegeEnum.MARKER.equals(userSpecialPrivilege)) {
                 throw ExceptionResultEnum.ERROR.exception("该用户没有科组长角色,无法登录");

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

@@ -775,7 +775,7 @@ public class SysController {
     @RequestMapping(value = "/get_open_role", method = RequestMethod.POST)
     public Result getOpenRole() {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId());
+        SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId(), sysUser.getSchoolId());
         List<SpecialPrivilegeEnum> list = new ArrayList<>();
         if (!SpecialPrivilegeEnum.UNIDENTIFIED.equals(userSpecialPrivilege)) {
             if (SpecialPrivilegeEnum.COMPOSITE.equals(userSpecialPrivilege)) {

+ 69 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/CloudUserPushStatusDto.java

@@ -0,0 +1,69 @@
+package com.qmth.teachcloud.common.bean.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 云阅卷用户推送状态
+ * @Author: CaoZixuan
+ * @Date: 2022-08-08
+ */
+public class CloudUserPushStatusDto {
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long schoolId;
+
+    @ApiModelProperty(value = "用户id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long userId;
+
+    @ApiModelProperty(value = "评卷员推送状态")
+    private String markerStatus;
+
+    @ApiModelProperty(value = "科组长推送状态")
+    private String markerLeaderStatus;
+
+    @ApiModelProperty(value = "同步状态")
+    private String syncStatus;
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getMarkerStatus() {
+        return markerStatus;
+    }
+
+    public void setMarkerStatus(String markerStatus) {
+        this.markerStatus = markerStatus;
+    }
+
+    public String getMarkerLeaderStatus() {
+        return markerLeaderStatus;
+    }
+
+    public void setMarkerLeaderStatus(String markerLeaderStatus) {
+        this.markerLeaderStatus = markerLeaderStatus;
+    }
+
+    public String getSyncStatus() {
+        return syncStatus;
+    }
+
+    public void setSyncStatus(String syncStatus) {
+        this.syncStatus = syncStatus;
+    }
+}

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
+import com.qmth.teachcloud.common.bean.dto.CloudUserPushStatusDto;
 import com.qmth.teachcloud.common.bean.dto.UserDto;
 import com.qmth.teachcloud.common.bean.dto.VerifyCodeCheckDto;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
@@ -110,4 +111,6 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @return
      */
     List<ApproveUserResult> findByRoldIdAndMemberName(@Param("roleId") Long roleId, @Param("name") String name);
+
+    List<CloudUserPushStatusDto> findCloudUserPushStatus(@Param("userId") Long userId,@Param("schoolId") Long schoolId);
 }

+ 12 - 9
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java

@@ -15,6 +15,7 @@ import com.qmth.teachcloud.common.bean.result.SysUserResult;
 import com.qmth.teachcloud.common.bean.result.UserRoleNameResult;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.FlowApproveNameEnum;
+import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
 import org.springframework.util.LinkedMultiValueMap;
 
@@ -160,21 +161,14 @@ public interface SysUserService extends IService<SysUser> {
      */
     public int countByTeachingRoomId(Long orgId);
 
-    /**
-     * 查询用户角色id查询用户特殊权限
-     *
-     * @param roleIdSet 用户角色id
-     * @return 用户特殊权限身份
-     */
-    SpecialPrivilegeEnum findUserSpecialPrivilegeByRoleIdSet(Set<Long> roleIdSet);
-
     /**
      * 根据用户id查询当前用户的特殊权限
      *
      * @param userId 用户id
+     * @param schoolId 学校id
      * @return 用户特殊权限身份
      */
-    SpecialPrivilegeEnum findUserSpecialPrivilegeByUserId(Long userId);
+    SpecialPrivilegeEnum findUserSpecialPrivilegeByUserId(Long userId,Long schoolId);
 
     /**
      * 查找用户角色名
@@ -225,4 +219,13 @@ public interface SysUserService extends IService<SysUser> {
     public List<ApproveUserResult> findByRoldIdAndMemberName(Long roleId, String name);
 
     List<SysUser> findBySchoolIdAndCode(Long schoolId, String code);
+
+    /**
+     * 查询某用户是否包含系统特定角色
+     *
+     * @param userId      用户id
+     * @param defaultRole 系统默认角色
+     * @return true:包含 || false:不包含
+     */
+    boolean includeSysRole(Long userId, RoleTypeEnum defaultRole);
 }

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -64,7 +64,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
                         return true;
                     } else {
                         // 用户特殊权限
-                        SpecialPrivilegeEnum userP = sysUserService.findUserSpecialPrivilegeByUserId(e.getId());
+                        SpecialPrivilegeEnum userP = sysUserService.findUserSpecialPrivilegeByUserId(e.getId(), schoolId);
                         // 如果用户是复合权限,条件为复合、评卷员、科组长都可以
                         if (SpecialPrivilegeEnum.COMPOSITE.equals(userP)) {
                             return SpecialPrivilegeEnum.COMPOSITE.equals(specialPrivilegeEnum) || SpecialPrivilegeEnum.MARKER.equals(specialPrivilegeEnum) || SpecialPrivilegeEnum.SUBJECT_HEADER.equals(specialPrivilegeEnum);

+ 56 - 39
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -8,10 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.gson.Gson;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
-import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
-import com.qmth.teachcloud.common.bean.dto.LoginDto;
-import com.qmth.teachcloud.common.bean.dto.UserDto;
-import com.qmth.teachcloud.common.bean.dto.VerifyCodeCheckDto;
+import com.qmth.teachcloud.common.bean.dto.*;
 import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
 import com.qmth.teachcloud.common.bean.dto.excel.SysUserImportDto;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
@@ -24,6 +21,7 @@ import com.qmth.teachcloud.common.contant.SystemConstant;
 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.enums.userPush.UserPushResultEnum;
 import com.qmth.teachcloud.common.mapper.SysUserMapper;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.sync.CloudMarkingTaskUtils;
@@ -809,42 +807,48 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
     @Override
-    public SpecialPrivilegeEnum findUserSpecialPrivilegeByRoleIdSet(Set<Long> roleIdSet) {
-        SpecialPrivilegeEnum result = SpecialPrivilegeEnum.UNIDENTIFIED;
-        //TODO 评卷员科组长权限暂时去掉
-        // 查询该学校特殊权限id
-//        // 评卷员权限
-//        SysPrivilege marker = sysPrivilegeService.list(new QueryWrapper<SysPrivilege>().lambda()
-//                .eq(SysPrivilege::getUrl, SpecialPrivilegeEnum.MARKER.getId())).get(0);
-//        Long markerId = marker.getId();
-//
-//        // 科组长权限
-//        SysPrivilege subjectHeader = sysPrivilegeService.list(new QueryWrapper<SysPrivilege>().lambda()
-//                .eq(SysPrivilege::getUrl, SpecialPrivilegeEnum.SUBJECT_HEADER.getId())).get(0);
-//        Long subjectHeaderId = subjectHeader.getId();
-//        if (roleIdSet.size() > 0) {
-//            List<SysRolePrivilege> sysRolePrivilegeList = sysRolePrivilegeService.list(new QueryWrapper<SysRolePrivilege>().lambda().in(SysRolePrivilege::getRoleId, roleIdSet));
-//            Set<Long> priIds = sysRolePrivilegeList.stream().map(SysRolePrivilege::getPrivilegeId).collect(Collectors.toSet());
-//            if (priIds.size() > 0) {
-//                if (priIds.contains(markerId) && !priIds.contains(subjectHeaderId)) {
-//                    // 评卷员权限
-//                    result = SpecialPrivilegeEnum.MARKER;
-//                } else if (!priIds.contains(markerId) && priIds.contains(subjectHeaderId)) {
-//                    // 科组长权限
-//                    result = SpecialPrivilegeEnum.SUBJECT_HEADER;
-//                } else if (priIds.contains(markerId) && priIds.contains(subjectHeaderId)) {
-//                    // 复合权限
-//                    result = SpecialPrivilegeEnum.COMPOSITE;
-//                }
-//            }
-//        }
-        return result;
-    }
+    public SpecialPrivilegeEnum findUserSpecialPrivilegeByUserId(Long userId,Long schoolId) {
 
-    @Override
-    public SpecialPrivilegeEnum findUserSpecialPrivilegeByUserId(Long userId) {
-        Set<Long> roleIdSet = new HashSet<>(sysRoleService.getUserRoles(userId));
-        return this.findUserSpecialPrivilegeByRoleIdSet(roleIdSet);
+
+        // 知学知考评卷员-科组长角色
+        boolean markerRole = this.includeSysRole(userId,RoleTypeEnum.MARKER);
+        boolean leaderRole = this.includeSysRole(userId,RoleTypeEnum.MARKER_LEADER);
+
+        // 记录的云阅卷应该的状态(云阅卷自己不改)
+        boolean cloudMarker = true;
+        boolean cloudLeader = true;
+        List<CloudUserPushStatusDto> userPushDtoList = this.baseMapper.findCloudUserPushStatus(userId,schoolId);
+        if (userPushDtoList != null){
+            if (userPushDtoList.size() > 1){
+                String userName = this.getById(userId).getLoginName();
+                throw ExceptionResultEnum.ERROR.exception("用户【" + userName + "】存在多条推送状态记录异常");
+            }
+            if (userPushDtoList.size() == 1){
+                CloudUserPushStatusDto pushStatusDto = userPushDtoList.get(0);
+                if (!UserPushResultEnum.BIND_SUCCESS.equals(UserPushResultEnum.valueOf(pushStatusDto.getMarkerStatus()))){
+                    // 有推送记录但推送状态不是评卷员绑定成功
+                    cloudMarker = false;
+                }
+                if (!UserPushResultEnum.BIND_SUCCESS.equals(UserPushResultEnum.valueOf(pushStatusDto.getMarkerLeaderStatus()))){
+                    // 有推送记录但推送状态不是科组长绑定成功
+                    cloudLeader = false;
+                }
+            }
+        }
+        boolean marker = markerRole && cloudMarker;
+        boolean leader = leaderRole && cloudLeader;
+
+        SpecialPrivilegeEnum result;
+        if (marker && leader){
+            result = SpecialPrivilegeEnum.COMPOSITE;
+        }else if (marker){
+            result = SpecialPrivilegeEnum.MARKER;
+        }else if (leader){
+            result = SpecialPrivilegeEnum.SUBJECT_HEADER;
+        }else {
+            result = SpecialPrivilegeEnum.UNIDENTIFIED;
+        }
+        return result;
     }
 
     /**
@@ -947,6 +951,19 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return sysUserMapper.selectList(queryWrapper);
     }
 
+    @Override
+    public boolean includeSysRole(Long userId, RoleTypeEnum defaultRole) {
+        SysRole sysRole = sysRoleService.getOne(new QueryWrapper<SysRole>().lambda().eq(SysRole::getType, defaultRole));
+        if (Objects.nonNull(sysRole)) {
+            SysUserRole sysUserRole = sysUserRoleService.getOne(new QueryWrapper<SysUserRole>()
+                    .lambda()
+                    .eq(SysUserRole::getUserId, userId)
+                    .eq(SysUserRole::getRoleId, sysRole.getId()));
+            return Objects.nonNull(sysUserRole);
+        }
+        return false;
+    }
+
     /**
      * 批量处理用户信息帮助类
      *

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

@@ -314,4 +314,23 @@
             and srgm.enable = 1
         </where>
     </select>
+    <select id="findCloudUserPushStatus"
+            resultType="com.qmth.teachcloud.common.bean.dto.CloudUserPushStatusDto">
+        SELECT
+            school_id AS schoolId,
+            user_id AS userId,
+            marker_status AS markerStatus,
+            marker_leader_status AS markerLeaderStatus,
+            sync_status AS syncStatus
+        FROM
+            cloud_user_push_status
+        <where>
+            <if test="schoolId != null and schoolId != ''">
+                AND school_id = #{schoolId}
+            </if>
+            <if test="userId != null and userId != ''">
+                AND user_id = #{userId}
+            </if>
+        </where>
+    </select>
 </mapper>