Pārlūkot izejas kodu

补充工卡登录

车车 4 mēneši atpakaļ
vecāks
revīzija
31fbc6bc14

+ 10 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/jobcard/JobCardController.java

@@ -6,15 +6,18 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.JobCardLoginVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.JobCardPageReqVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.JobCardRespVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.JobCardSaveReqVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.jobcard.JobCardDO;
 import cn.iocoder.yudao.module.iscs.service.jobcard.JobCardService;
+import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginRespVO;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.Resource;
+import jakarta.annotation.security.PermitAll;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -97,4 +100,11 @@ public class JobCardController {
         return success(jobCardService.insertJobCardByCabinet(jobCardDO));
     }
 
+    @Operation(summary = "工作卡登录")
+    @PermitAll
+    @PostMapping("/loginByCard")
+    public CommonResult<AuthLoginRespVO> loginByCard(@RequestBody JobCardLoginVO reqVO) {
+        return success(jobCardService.loginByCard(reqVO));
+    }
+
 }

+ 17 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/jobcard/vo/JobCardLoginVO.java

@@ -0,0 +1,17 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 工作卡 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class JobCardLoginVO {
+
+    @Schema(description = "工作卡NFC", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "工作卡NFC不能为空")
+    private String cardNfc;
+
+}

+ 18 - 5
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/jobcard/JobCardMapper.java

@@ -1,13 +1,15 @@
 package cn.iocoder.yudao.module.iscs.dal.mysql.jobcard;
 
-import java.util.*;
-
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.JobCardPageReqVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.jobcard.JobCardDO;
+import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Mapper;
-import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.*;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 工作卡 Mapper
@@ -32,4 +34,15 @@ public interface JobCardMapper extends BaseMapperX<JobCardDO> {
                 .orderByDesc(JobCardDO::getId));
     }
 
-}
+    @Delete({
+            "<script>",
+            "DELETE FROM isc_job_card",
+            "WHERE id IN",
+            "<foreach item='id' collection='ids' open='(' separator=',' close=')'>",
+            "#{id}",
+            "</foreach>",
+            "</script>"
+    })
+    Boolean physicalDeleteByIds(@Param(value = "ids") List<Long> ids);
+
+}

+ 4 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/jobcard/JobCardService.java

@@ -1,9 +1,11 @@
 package cn.iocoder.yudao.module.iscs.service.jobcard;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.JobCardLoginVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.JobCardPageReqVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.JobCardSaveReqVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.jobcard.JobCardDO;
+import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginRespVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import jakarta.validation.Valid;
 
@@ -63,4 +65,6 @@ public interface JobCardService extends IService<JobCardDO> {
 
     Boolean insertJobCardByCabinet(JobCardDO jobCardDO);
 
+    AuthLoginRespVO loginByCard(JobCardLoginVO vo);
+
 }

+ 24 - 1
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/jobcard/JobCardServiceImpl.java

@@ -4,10 +4,16 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.Assert;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.JobCardLoginVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.JobCardPageReqVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobcard.vo.JobCardSaveReqVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.jobcard.JobCardDO;
 import cn.iocoder.yudao.module.iscs.dal.mysql.jobcard.JobCardMapper;
+import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthPasswordFreeLoginReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import cn.iocoder.yudao.module.system.service.auth.AdminAuthService;
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import jakarta.annotation.Resource;
@@ -31,6 +37,12 @@ public class JobCardServiceImpl extends ServiceImpl<JobCardMapper, JobCardDO> im
 
     @Resource
     private JobCardMapper jobCardMapper;
+    @Resource
+    private AdminAuthService authService;
+    @Resource
+    private AdminUserService adminUserService;
+
+
 
     @Override
     public Long createJobCard(JobCardSaveReqVO createReqVO) {
@@ -64,7 +76,7 @@ public class JobCardServiceImpl extends ServiceImpl<JobCardMapper, JobCardDO> im
         // 校验存在
         validateJobCardExists(ids);
         // 删除
-        jobCardMapper.deleteByIds(ids);
+        jobCardMapper.physicalDeleteByIds(ids);
         }
 
     private void validateJobCardExists(List<Long> ids) {
@@ -101,5 +113,16 @@ public class JobCardServiceImpl extends ServiceImpl<JobCardMapper, JobCardDO> im
         return save(jobCardDO);
     }
 
+    @Override
+    public AuthLoginRespVO loginByCard(JobCardLoginVO vo) {
+        JobCardDO one = getOne(Wrappers.<JobCardDO>lambdaQuery()
+                .eq(JobCardDO::getCardNfc, vo.getCardNfc()));
+        Assert.isTrue(one != null, "该卡尚未绑定用户!");
+        AdminUserDO user = adminUserService.getUser(one.getUserId());
+        Assert.isTrue(user != null, "用户不存在!");
+        AuthLoginRespVO authLoginRespVO = authService.passwordFreeLogin(new AuthPasswordFreeLoginReqVO().setUsername(user.getUsername()));
+        return authLoginRespVO;
+    }
+
 
 }

+ 26 - 0
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthPasswordFreeLoginReqVO.java

@@ -0,0 +1,26 @@
+package cn.iocoder.yudao.module.system.controller.admin.auth.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.Pattern;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.validator.constraints.Length;
+
+@Schema(description = "管理后台 - 账号密码登录 Request VO,如果登录并绑定社交用户,需要传递 social 开头的参数")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class AuthPasswordFreeLoginReqVO extends CaptchaVerificationReqVO {
+
+    @Schema(description = "账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudaoyuanma")
+    @NotEmpty(message = "登录账号不能为空")
+    @Length(min = 4, max = 16, message = "账号长度为 4-16 位")
+    @Pattern(regexp = "^[A-Za-z0-9]+$", message = "账号格式为数字以及字母")
+    private String username;
+
+
+}

+ 8 - 0
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java

@@ -85,4 +85,12 @@ public interface AdminAuthService {
      */
     void resetPassword(AuthResetPasswordReqVO reqVO);
 
+    /**
+     * 账号登录
+     *
+     * @param reqVO 登录信息
+     * @return 登录结果
+     */
+    AuthLoginRespVO passwordFreeLogin(@Valid AuthPasswordFreeLoginReqVO reqVO);
+
 }

+ 31 - 0
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java

@@ -361,4 +361,35 @@ public class AdminAuthServiceImpl implements AdminAuthService {
 
         userService.updateUserPassword(userByMobile.getId(), reqVO.getPassword());
     }
+
+    @Override
+    public AuthLoginRespVO passwordFreeLogin(AuthPasswordFreeLoginReqVO reqVO) {
+
+        // 使用账号密码,进行登录
+        AdminUserDO user = authenticateNoPass(reqVO.getUsername());
+
+        // 创建 Token 令牌,记录登录日志
+        AuthLoginRespVO tokenAfterLoginSuccess = createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME);
+        tokenAfterLoginSuccess.setUsername(user.getUsername());
+        tokenAfterLoginSuccess.setNickname(user.getNickname());
+        return tokenAfterLoginSuccess;
+    }
+
+    public AdminUserDO authenticateNoPass(String username) {
+        final LoginLogTypeEnum logTypeEnum = LoginLogTypeEnum.LOGIN_USERNAME;
+        // 校验账号是否存在
+        AdminUserDO user = userService.getUserByUsername(username);
+        if (user == null) {
+            createLoginLog(null, username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
+            throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
+        }
+        // 校验是否禁用
+        if (CommonStatusEnum.isDisable(user.getStatus())) {
+            createLoginLog(user.getId(), username, logTypeEnum, LoginResultEnum.USER_DISABLED);
+            throw exception(AUTH_LOGIN_USER_DISABLED);
+        }
+        // 新增登录校验规则
+        // addAuthenticate(user, username);
+        return user;
+    }
 }

+ 1 - 0
yudao-server/src/main/resources/application.yaml

@@ -276,6 +276,7 @@ yudao:
     enable: true
     ignore-urls:
       - /jmreport/* # 积木报表,无法携带租户编号
+      - /admin-api/iscs/job-card/*
     ignore-visit-urls:
       - /admin-api/system/user/profile/**
       - /admin-api/system/auth/**