wangliang 4 роки тому
батько
коміт
c8ec4160fc

+ 43 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ClientLoginParam.java

@@ -0,0 +1,43 @@
+package com.qmth.distributed.print.business.bean.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Description: 客户端登录
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/4/23
+ */
+public class ClientLoginParam {
+
+    @ApiModelProperty(value = "登录名")
+    @NotBlank(message = "请输入登录名")
+    @Length(message = "登录名不能超过{max}个字符", max = 50)
+    private String loginName;
+
+    @ApiModelProperty(value = "密码")
+    @NotBlank(message = "请输入密码")
+    @Length(message = "密码不能少于{min}位", min = 6)
+    @Length(message = "密码不能超过{max}位", max = 30)
+    private String password;
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+}

+ 6 - 30
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/LoginParam.java

@@ -1,25 +1,17 @@
 package com.qmth.distributed.print.business.bean.params;
 
 import io.swagger.annotations.ApiModelProperty;
-import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotBlank;
 
 /**
- * @Date: 2021/3/30.
+ * @Description: 用户登录
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/4/23
  */
-public class LoginParam {
-
-    @ApiModelProperty(value = "登录名")
-    @NotBlank(message = "请输入登录名")
-    @Length(message = "登录名不能超过{max}个字符", max = 25)
-    private String loginName;
-
-    @ApiModelProperty(value = "密码")
-    @NotBlank(message = "请输入密码")
-    @Length(message = "密码不能少于{min}位", min = 6)
-    @Length(message = "密码不能超过{max}位", max = 30)
-    private String password;
+public class LoginParam extends ClientLoginParam {
 
     @ApiModelProperty(value = "验证码")
     @NotBlank(message = "请输入验证码")
@@ -37,22 +29,6 @@ public class LoginParam {
         this.schoolCode = schoolCode;
     }
 
-    public String getLoginName() {
-        return loginName;
-    }
-
-    public void setLoginName(String loginName) {
-        this.loginName = loginName;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
     public String getCode() {
         return code;
     }

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/SysUser.java

@@ -41,14 +41,14 @@ public class SysUser extends BaseEntity implements Serializable {
      */
     @TableField("login_name")
     @NotBlank(message = "请输入登录名")
-    @Length(message = "登录名不能超过{max}个字符", max = 25)
+    @Length(message = "登录名不能超过{max}个字符", max = 50)
     private String loginName;
     /**
      * 姓名
      */
     @TableField("real_name")
     @NotBlank(message = "请输入姓名")
-    @Length(message = "姓名不能超过{max}个字符", max = 25)
+    @Length(message = "姓名不能超过{max}个字符", max = 50)
     private String realName;
     /**
      * 密码

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

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.service;
 
 import com.qmth.distributed.print.business.bean.auth.AuthBean;
 import com.qmth.distributed.print.business.bean.dto.PrivilegeCacheDto;
+import com.qmth.distributed.print.business.bean.result.LoginResult;
 import com.qmth.distributed.print.business.bean.result.RolePrivilegeResult;
 import com.qmth.distributed.print.business.entity.BasicAttachment;
 import com.qmth.distributed.print.business.entity.SysRolePrivilege;
@@ -100,6 +101,7 @@ public interface CommonService {
 
     /**
      * 文件预览
+     *
      * @param attachmentId
      * @return
      */
@@ -161,21 +163,32 @@ public interface CommonService {
      * 下载文件到本地并压缩返回
      *
      * @param filePath 文件根目录
-     * @param time    zip文件名(时间戳)
+     * @param time     zip文件名(时间戳)
      */
     public void downloadFileAndZip(HttpServletResponse response, String filePath, long time);
 
     /**
      * 校验是否可以提交
+     *
      * @param schoolId
      * @param courseCode
      * @param paperNumber
      */
-    public void checkData(Long schoolId, String courseCode, String paperNumber,SysUser user) throws IOException;
+    public void checkData(Long schoolId, String courseCode, String paperNumber, SysUser user) throws IOException;
 
     /**
      * 根据orgId查询所有子机构ID集合
+     *
      * @return
      */
     public Set<Long> listSubOrgIds(Long orgId);
+
+    /**
+     * 登录公用
+     *
+     * @param password
+     * @param sysUser
+     * @return
+     */
+    public LoginResult login(String password, SysUser sysUser) throws NoSuchAlgorithmException;
 }

+ 65 - 20
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/CommonServiceImpl.java

@@ -6,19 +6,23 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.qmth.boot.core.enums.Platform;
+import com.qmth.boot.tools.signature.SignatureType;
 import com.qmth.distributed.print.business.bean.auth.AuthBean;
+import com.qmth.distributed.print.business.bean.auth.ExpireTimeBean;
 import com.qmth.distributed.print.business.bean.dto.OrgDto;
 import com.qmth.distributed.print.business.bean.dto.PrivilegeCacheDto;
+import com.qmth.distributed.print.business.bean.result.LoginResult;
 import com.qmth.distributed.print.business.bean.result.PrivilegeResult;
 import com.qmth.distributed.print.business.bean.result.RolePrivilegeResult;
 import com.qmth.distributed.print.business.config.DictionaryConfig;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.*;
 import com.qmth.distributed.print.business.service.*;
-import com.qmth.distributed.print.business.templete.execute.AsyncCreatePdfTempleteService;
+import com.qmth.distributed.print.business.util.AuthUtil;
 import com.qmth.distributed.print.business.util.OssUtil;
 import com.qmth.distributed.print.business.util.RedisUtil;
 import com.qmth.distributed.print.business.util.ServletUtil;
+import com.qmth.distributed.print.common.SignatureEntityTest;
 import com.qmth.distributed.print.common.contant.SpringContextHolder;
 import com.qmth.distributed.print.common.contant.SystemConstant;
 import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
@@ -82,21 +86,15 @@ public class CommonServiceImpl implements CommonService {
     @Autowired
     private ExamDetailService examDetailService;
 
-    @Autowired
-    private ExamDetailCourseService examDetailCourseService;
-
-    @Resource
-    TBTaskService tbTaskService;
-
-    @Resource
-    AsyncCreatePdfTempleteService asyncCreatePdfTempleteService;
-
     @Autowired
     private SysOrgService sysOrgService;
 
     @Autowired
     private BasicAttachmentService basicAttachmentService;
 
+    @Resource
+    CommonService commonService;
+
     /**
      * 新增用户权限
      *
@@ -364,36 +362,36 @@ public class CommonServiceImpl implements CommonService {
         String attachmentType = (String) jsonObject.get(SystemConstant.TYPE);
         String filePath = (String) jsonObject.get(SystemConstant.PATH);
         // 有htmlPath
-        if(jsonObject.containsKey(SystemConstant.HTML_PATH)){
+        if (jsonObject.containsKey(SystemConstant.HTML_PATH)) {
             htmlPath = (String) jsonObject.get(SystemConstant.HTML_PATH);
         }
         // 有pdfPath
-        if(jsonObject.containsKey(SystemConstant.PDF_PATH)){
+        if (jsonObject.containsKey(SystemConstant.PDF_PATH)) {
             pdfPath = (String) jsonObject.get(SystemConstant.PDF_PATH);
         }
         if (Objects.equals(attachmentType, SystemConstant.LOCAL)) {
             pathUrl = SystemConstant.HTTP + dictionaryConfig.sysDomain().getFileHost() + File.separator + filePath;
-            if(StringUtils.isNotBlank(htmlPath)){
+            if (StringUtils.isNotBlank(htmlPath)) {
                 htmlUrl = SystemConstant.HTTP + dictionaryConfig.sysDomain().getFileHost() + File.separator + htmlPath;
             }
-            if(StringUtils.isNotBlank(pdfPath)){
+            if (StringUtils.isNotBlank(pdfPath)) {
                 pdfUrl = SystemConstant.HTTP + dictionaryConfig.sysDomain().getFileHost() + File.separator + pdfPath;
             }
         } else {
             if (isExpire) {
                 pathUrl = ossUtil.getPrivateUrl(filePath);
-                if(StringUtils.isNotBlank(htmlPath)){
+                if (StringUtils.isNotBlank(htmlPath)) {
                     htmlUrl = ossUtil.getPrivateUrl(htmlPath);
                 }
-                if(StringUtils.isNotBlank(pdfPath)){
+                if (StringUtils.isNotBlank(pdfPath)) {
                     pdfUrl = ossUtil.getPrivateUrl(pdfPath);
                 }
             } else {
-                    pathUrl = dictionaryConfig.aliYunOssDomain().getUrl() + File.separator + filePath;
-                if(StringUtils.isNotBlank(htmlPath)){
+                pathUrl = dictionaryConfig.aliYunOssDomain().getUrl() + File.separator + filePath;
+                if (StringUtils.isNotBlank(htmlPath)) {
                     htmlUrl = dictionaryConfig.aliYunOssDomain().getUrl() + File.separator + htmlPath;
                 }
-                if(StringUtils.isNotBlank(pdfPath)){
+                if (StringUtils.isNotBlank(pdfPath)) {
                     pdfUrl = dictionaryConfig.aliYunOssDomain().getUrl() + File.separator + pdfPath;
                 }
             }
@@ -411,7 +409,7 @@ public class CommonServiceImpl implements CommonService {
         JSONObject object = JSONObject.parseObject(path);
         String filePath = object.getString(SystemConstant.PATH);
         String type = object.getString(SystemConstant.TYPE);
-        if (filePath.endsWith(SystemConstant.HTML_PREFIX) || filePath.endsWith(SystemConstant.FTL_PREFIX) ) {
+        if (filePath.endsWith(SystemConstant.HTML_PREFIX) || filePath.endsWith(SystemConstant.FTL_PREFIX)) {
             StringBuffer sb = new StringBuffer();
             try {
                 InputStream fis;
@@ -638,6 +636,53 @@ public class CommonServiceImpl implements CommonService {
         return stringSet;
     }
 
+    /**
+     * 登录公用
+     *
+     * @param password
+     * @param sysUser
+     * @return
+     * @throws NoSuchAlgorithmException
+     */
+    @Override
+    public LoginResult login(String password, SysUser sysUser) throws NoSuchAlgorithmException {
+        //密码不正确
+        if (!Objects.equals(password, sysUser.getPassword())) {
+            throw ExceptionResultEnum.PASSWORD_ERROR.exception();
+        }
+        //停用
+        if (!sysUser.getEnable()) {
+            throw ExceptionResultEnum.USER_ENABLE.exception();
+        }
+
+        Platform platform = ServletUtil.getRequestPlatform();
+        String deviceId = ServletUtil.getRequestDeviceId();
+        AuthBean authBean = commonService.getUserAuth(sysUser.getId());
+        //添加用户鉴权缓存
+        if (Objects.isNull(authBean)) {
+            throw ExceptionResultEnum.ROLE_ENABLE_AUTHORIZATION.exception();
+        }
+        //生成token
+        String token = SystemConstant.getUuid();
+        cacheService.userCache(sysUser.getId());
+        //添加用户会话缓存
+        Set<RoleTypeEnum> roleType = authBean.getRoleList().stream().map(s -> s.getType()).collect(Collectors.toSet());
+        String sessionId = SessionUtil.digest(sysUser.getId(), Math.abs(roleType.toString().hashCode()), platform.name());
+        //TODO 测试用
+        String test = SignatureEntityTest.build(SignatureType.TOKEN, sessionId, token);
+        ExpireTimeBean expireTime = AuthUtil.getExpireTime(platform);
+        TBSession tbSession = new TBSession(sessionId, String.valueOf(sysUser.getId()), roleType.toString(),
+                platform.name(), platform.name(), deviceId, ServletUtil.getRequest().getLocalAddr(), token,
+                expireTime.getDate().getTime());
+        tbSessionService.saveOrUpdate(tbSession);
+        redisUtil.setUserSession(sessionId, tbSession, expireTime.getExpireSeconds());
+
+        LoginResult loginResult = new LoginResult(sysUser, sessionId, test, roleType);
+        loginResult.setSchoolInfo(Objects.nonNull(authBean.getSchool()) ? loginResult.new SchoolNativeBean(authBean.getSchool()) : null);
+        loginResult.setOrgInfo(Objects.nonNull(authBean.getOrg()) ? loginResult.new OrgNativeBean(authBean.getOrg()) : null);
+        return loginResult;
+    }
+
     private Set<Long> getOrgIds(Set<Long> stringSet, List<OrgDto> orgDtos, Long parentId) {
         for (OrgDto orgDto : orgDtos) {
             Long tempParentId = orgDto.getParentId();

+ 58 - 13
distributed-print/src/main/java/com/qmth/distributed/print/api/ClientController.java

@@ -1,23 +1,45 @@
 package com.qmth.distributed.print.api;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.core.enums.Platform;
+import com.qmth.boot.tools.signature.SignatureType;
+import com.qmth.distributed.print.business.bean.auth.AuthBean;
+import com.qmth.distributed.print.business.bean.auth.ExpireTimeBean;
 import com.qmth.distributed.print.business.bean.dto.ClientExamStudentDto;
 import com.qmth.distributed.print.business.bean.dto.ClientExamTaskDto;
 import com.qmth.distributed.print.business.bean.dto.ClientPrintTaskDto;
+import com.qmth.distributed.print.business.bean.params.ClientLoginParam;
+import com.qmth.distributed.print.business.bean.result.LoginResult;
 import com.qmth.distributed.print.business.entity.SysUser;
+import com.qmth.distributed.print.business.entity.TBSession;
+import com.qmth.distributed.print.business.enums.RoleTypeEnum;
 import com.qmth.distributed.print.business.service.*;
+import com.qmth.distributed.print.business.util.AuthUtil;
+import com.qmth.distributed.print.business.util.RedisUtil;
+import com.qmth.distributed.print.business.util.ServletUtil;
+import com.qmth.distributed.print.common.SignatureEntityTest;
+import com.qmth.distributed.print.common.contant.SystemConstant;
+import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
 import com.qmth.distributed.print.common.util.Result;
 import com.qmth.distributed.print.common.util.ResultUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import com.qmth.distributed.print.common.util.SessionUtil;
+import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.security.NoSuchAlgorithmException;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @Date: 2021/4/19.
@@ -25,23 +47,47 @@ import java.util.Map;
 @Api(tags = "客户端Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.client}")
-@Aac(auth = BOOL.FALSE)
+@Aac(strict = BOOL.TRUE)
 public class ClientController {
 
     @Autowired
     private ClientService clientService;
 
+    @Resource
+    SysUserService sysUserService;
+
+    @Resource
+    CommonService commonService;
+
     /**
      * 登录
      *
-     * @param sysUser
+     * @param login
      * @return
      */
     @ApiOperation(value = "登录")
     @RequestMapping(value = "/user/login", method = RequestMethod.POST)
-    public Result login(@RequestBody SysUser sysUser) {
-
-        return null;
+    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
+    @Aac(auth = BOOL.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());
+        }
+        QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(SysUser::getLoginName, login.getLoginName());
+        SysUser sysUser = sysUserService.getOne(wrapper);
+        //用户不存在
+        if (Objects.isNull(sysUser)) {
+            throw ExceptionResultEnum.USER_NO_DATA.exception();
+        }
+        AuthBean authBean = commonService.getUserAuth(sysUser.getId());
+        if (Objects.nonNull(authBean) && Objects.nonNull(authBean.getRoleList()) && authBean.getRoleList().size() > 0) {
+            Set<RoleTypeEnum> roleType = authBean.getRoleList().stream().map(s -> s.getType()).collect(Collectors.toSet());
+            if (!roleType.contains(RoleTypeEnum.PRINTER)) {
+                throw ExceptionResultEnum.ERROR.exception("客户端只允许" + RoleTypeEnum.PRINTER.getDesc() + "登录");
+            }
+        }
+        return ResultUtil.ok(commonService.login(login.getPassword(), sysUser));
     }
 
     /**
@@ -109,7 +155,7 @@ public class ClientController {
                                   @RequestParam("machineCode") String machineCode,
                                   @RequestParam("isPass") Boolean isPass,
                                   @RequestParam("userId") Long userId) {
-        Boolean isSuccess = clientService.tagPass(schoolId, courseCode,courseName, paperNumber, machineCode, isPass, userId);
+        Boolean isSuccess = clientService.tagPass(schoolId, courseCode, courseName, paperNumber, machineCode, isPass, userId);
         return ResultUtil.ok(isSuccess);
     }
 
@@ -204,7 +250,7 @@ public class ClientController {
     public Result printPreview(@RequestParam("schoolId") Long schoolId,
                                @RequestParam("examDetailId") Long examDetailId) {
         String url = clientService.getUrlByExamDetailId(schoolId, examDetailId);
-        return ResultUtil.ok(url,"");
+        return ResultUtil.ok(url, "");
     }
 
     /**
@@ -254,7 +300,6 @@ public class ClientController {
     }
 
     /**
-     *
      * @param schoolId
      * @param examDetailId
      * @param machineCode
@@ -264,9 +309,9 @@ public class ClientController {
     @ApiOperation(value = "印刷管理-缓存后更新状态")
     @RequestMapping(value = "/print/update_download", method = RequestMethod.POST)
     public Result updateDownload(@RequestParam("schoolId") Long schoolId,
-                                    @RequestParam("examDetailId") Long examDetailId,
-                                    @RequestParam("machineCode") String machineCode,
-                                    @RequestParam("isDownload") Boolean isDownload) {
+                                 @RequestParam("examDetailId") Long examDetailId,
+                                 @RequestParam("machineCode") String machineCode,
+                                 @RequestParam("isDownload") Boolean isDownload) {
         Boolean isSuccess = clientService.updateDownload(schoolId, examDetailId, machineCode, isDownload);
         return ResultUtil.ok(isSuccess);
     }

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

@@ -140,14 +140,6 @@ public class SysController {
         if (Objects.nonNull(sysUser.getSchoolId()) && sysUser.getSchoolId().longValue() != basicSchool.getId().longValue()) {
             throw ExceptionResultEnum.ERROR.exception("用户学校不匹配");
         }
-        //密码不正确
-        if (!Objects.equals(login.getPassword(), sysUser.getPassword())) {
-            throw ExceptionResultEnum.PASSWORD_ERROR.exception();
-        }
-        //停用
-        if (!sysUser.getEnable()) {
-            throw ExceptionResultEnum.USER_ENABLE.exception();
-        }
 //        校验验证码
         SysConfig value = sysConfigService.getByKey("sys.code.enable");
         if (Objects.nonNull(value) && value.getConfigValue().equals("true")) {
@@ -168,33 +160,7 @@ public class SysController {
                 }
             }
         }
-
-        Platform platform = ServletUtil.getRequestPlatform();
-        String deviceId = ServletUtil.getRequestDeviceId();
-        //添加用户鉴权缓存
-        AuthBean authBean = cacheService.userAuthCache(sysUser.getId());
-        if (Objects.isNull(authBean)) {
-            throw ExceptionResultEnum.ROLE_ENABLE_AUTHORIZATION.exception();
-        }
-        //生成token
-        String token = SystemConstant.getUuid();
-        cacheService.userCache(sysUser.getId());
-        //添加用户会话缓存
-        Set<RoleTypeEnum> roleType = authBean.getRoleList().stream().map(s -> s.getType()).collect(Collectors.toSet());
-        String sessionId = SessionUtil.digest(sysUser.getId(), Math.abs(roleType.toString().hashCode()), platform.name());
-        //TODO 测试用
-        String test = SignatureEntityTest.build(SignatureType.TOKEN, sessionId, token);
-        ExpireTimeBean expireTime = AuthUtil.getExpireTime(platform);
-        TBSession tbSession = new TBSession(sessionId, String.valueOf(sysUser.getId()), roleType.toString(),
-                platform.name(), platform.name(), deviceId, ServletUtil.getRequest().getLocalAddr(), token,
-                expireTime.getDate().getTime());
-        tbSessionService.saveOrUpdate(tbSession);
-        redisUtil.setUserSession(sessionId, tbSession, expireTime.getExpireSeconds());
-
-        LoginResult loginResult = new LoginResult(sysUser, sessionId, test, roleType);
-        loginResult.setSchoolInfo(Objects.nonNull(authBean.getSchool()) ? loginResult.new SchoolNativeBean(authBean.getSchool()) : null);
-        loginResult.setOrgInfo(Objects.nonNull(authBean.getOrg()) ? loginResult.new OrgNativeBean(authBean.getOrg()) : null);
-        return ResultUtil.ok(loginResult);
+        return ResultUtil.ok(commonService.login(login.getPassword(), sysUser));
     }
 
     /**