Parcourir la source

3.3.0 扫描端登录

xiaofei il y a 1 an
Parent
commit
0d0cd3fb3f

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ClientService.java

@@ -8,6 +8,7 @@ import com.qmth.teachcloud.common.bean.dto.SchoolDto;
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface ClientService {
     IPage<ClientExamTaskDto> listTryTask(String machineCode, Long orgId, Long semesterId, Long examId, Long printPlanId, String courseCode, String paperNumber, Boolean isTry, Boolean isPass, Integer pageNumber, Integer pageSize);
@@ -49,4 +50,6 @@ public interface ClientService {
     boolean updatePassword(Long userId, String password);
 
     List<SchoolDto> listSchool();
+
+    Set<String> getRoleByUserId(Long id);
 }

+ 18 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientServiceImpl.java

@@ -15,8 +15,10 @@ import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.SysPrivilege;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ExcelUtil;
+import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
@@ -616,7 +618,7 @@ public class ClientServiceImpl implements ClientService {
     @Override
     public void checkPrivilege(Long userId) {
         List<SysPrivilege> sysPrivileges = sysPrivilegeService.getClientUrlByUserId(userId);
-        long count = sysPrivileges.stream().filter(m -> "客户端".equals(m.getName()) && "client".equals(m.getUrl())).count();
+        long count = sysPrivileges.stream().filter(m -> "打印端".equals(m.getName()) && "client".equals(m.getUrl())).count();
         if (count == 0) {
             throw ExceptionResultEnum.ERROR.exception("用户没有客户端权限");
         }
@@ -642,6 +644,21 @@ public class ClientServiceImpl implements ClientService {
         return basicSchoolService.listSchool();
     }
 
+    @Override
+    public Set<String> getRoleByUserId(Long userId) {
+        Set<String> roles = new HashSet<>();
+        List<SysPrivilege> sysPrivileges = sysPrivilegeService.getClientUrlByUserId(userId);
+        long printCount = sysPrivileges.stream().filter(m -> "打印端".equals(m.getName()) && "client".equals(m.getUrl())).count();
+        if (printCount > 0) {
+            roles.add(RoleTypeEnum.PRINT.name());
+        }
+        long scanCount = sysPrivileges.stream().filter(m -> "扫描端".equals(m.getName()) && "scan".equals(m.getUrl())).count();
+        if (scanCount > 0) {
+            roles.add(RoleTypeEnum.SCANNER.name());
+        }
+        return roles;
+    }
+
     /**
      * 根据考场生成试卷map
      */

+ 67 - 10
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanController.java

@@ -1,12 +1,33 @@
 package com.qmth.distributed.print.api.mark;
 
 
+import java.security.NoSuchAlgorithmException;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.distributed.print.business.bean.params.ClientLoginParam;
+import com.qmth.distributed.print.business.service.ClientService;
+import com.qmth.teachcloud.common.bean.result.LoginClientResult;
+import com.qmth.teachcloud.common.bean.result.LoginResult;
+import com.qmth.teachcloud.common.entity.BasicSchool;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.AppSourceEnum;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.service.CommonCacheService;
+import com.qmth.teachcloud.common.service.SysUserService;
+import com.qmth.teachcloud.common.service.TeachcloudCommonService;
+import com.qmth.teachcloud.common.util.*;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -18,15 +39,9 @@ import com.qmth.teachcloud.common.bean.auth.ExpireTimeBean;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.TBSession;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
-import com.qmth.teachcloud.common.util.AuthUtil;
-import com.qmth.teachcloud.common.util.RedisUtil;
-import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.bean.sys.ActiveTimeVo;
 import com.qmth.teachcloud.mark.bean.sys.ApiStatusVo;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-
 /**
  * <p>
  * 扫描系统相关 前端控制器
@@ -43,10 +58,52 @@ public class ScanController {
     @Resource
     BasicSemesterService basicSemesterService;
     @Resource
+    private TeachcloudCommonService teachcloudCommonService;
+    @Resource
+    private CommonCacheService commonCacheService;
+    @Resource
+    private ClientService clientService;
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
     private SysProperty sysProperty;
     @Resource
     private RedisUtil redisUtil;
-    
+
+    /**
+     * 登录
+     *
+     * @param login 登录参数
+     */
+    @ApiOperation(value = "登录")
+    @PostMapping("/login")
+    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
+    @Aac(auth = false)
+    public Result login(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody ClientLoginParam login, BindingResult bindingResult) throws NoSuchAlgorithmException {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        BasicSchool basicSchool = commonCacheService.schoolCache(login.getSchoolCode());
+        if (Objects.isNull(basicSchool)) {
+            throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
+        }
+        QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId()).eq(SysUser::getLoginName, login.getLoginName());
+        SysUser sysUser = sysUserService.getOne(wrapper);
+        // 用户不存在或密码错误
+        if (Objects.isNull(sysUser) || !Objects.equals(sysUser.getPassword(), login.getPassword())) {
+            throw ExceptionResultEnum.USER_NO_DATA.exception();
+        }
+        // 是否有打印端和扫描端权限
+        Set<String> roles = clientService.getRoleByUserId(sysUser.getId());
+
+        LoginResult loginResult = teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM);
+        LoginClientResult loginClientResult = new LoginClientResult(sysUser, loginResult);
+        loginClientResult.setRoleList(roles);
+        // todo 是否可以新增卡格式
+        return ResultUtil.ok(new LoginClientResult(sysUser, loginResult));
+    }
+
     @Aac(auth = false)
     @ApiOperation(value = "服务端状态")
     @RequestMapping("server/status")
@@ -57,14 +114,14 @@ public class ScanController {
         vo.setTime(System.currentTimeMillis());
         return vo;
     }
-    
+
     @ApiOperation(value = "心跳接口")
     @PostMapping("server/heartbeat")
     public ActiveTimeVo heartbeat() {
         Platform platform = ServletUtil.getRequestPlatform();
         ExpireTimeBean expireTime = AuthUtil.getExpireTime(platform);
-        TBSession ts=(TBSession)ServletUtil.getRequestSession();
-        redisUtil.expire(ts.getId(), expireTime.getExpireSeconds(),TimeUnit.SECONDS);
+        TBSession ts = (TBSession) ServletUtil.getRequestSession();
+        redisUtil.expire(ts.getId(), expireTime.getExpireSeconds(), TimeUnit.SECONDS);
         ActiveTimeVo vo = new ActiveTimeVo();
         vo.setActiveTime(System.currentTimeMillis());
         return vo;

+ 2 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/RoleTypeEnum.java

@@ -21,7 +21,8 @@ public enum RoleTypeEnum {
     ASSIGN_TEACHER("命题老师"),
     SCHOOL_TEACHER("学校老师"),
     ASSISTANT("学院秘书"),
-    PRINT("印刷员");
+    PRINT("印刷员"),
+    SCANNER("扫描员");
 
     RoleTypeEnum(String desc) {
         this.desc = desc;