浏览代码

1、修复面试邀约bug
2、增加用户实名制接口

rayson 9 月之前
父节点
当前提交
33983dda97

+ 19 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/user/UserAuthApplyAuditStatusEnum.java

@@ -0,0 +1,19 @@
+package com.citu.module.menduner.system.enums.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 用户实名制申请 0审核中 1审核通过 2审核不通过
+ **/
+@Getter
+@AllArgsConstructor
+public enum UserAuthApplyAuditStatusEnum {
+
+    AUDITING("0", "审核中"),
+    APPROVED("1", "审核通过"),
+    REJECT("2", "审核不通过");
+
+    private final String status;
+    private final String name;
+}

+ 46 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/user/AppUserAuthController.java

@@ -0,0 +1,46 @@
+package com.citu.module.menduner.system.controller.app.jobhunt.user;
+
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppUserAuthRespVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppUserAuthSaveReqVO;
+import com.citu.module.menduner.system.controller.app.recruit.enterprise.auth.AppRecruitEnterpriseAuthSaveReqVO;
+import com.citu.module.menduner.system.service.user.UserAuthService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "求职端 - 用户实名制")
+@RestController
+@RequestMapping("/menduner/system/user-auth")
+@Validated
+public class AppUserAuthController {
+
+    @Resource
+    private UserAuthService userAuthService;
+
+    @PreAuthenticated
+    @GetMapping("/get")
+    @Operation(summary = "获取用户实名认证")
+    public CommonResult<AppUserAuthRespVO> get() {
+        return success(userAuthService.get());
+    }
+
+    @PreAuthenticated
+    @PostMapping("/save")
+    @Operation(summary = "保存")
+    public CommonResult<Boolean> save(
+            @Valid @RequestBody AppUserAuthSaveReqVO reqVO) {
+        userAuthService.save(reqVO);
+        return success(true);
+    }
+
+
+}

+ 15 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/user/vo/AppUserAuthRespVO.java

@@ -0,0 +1,15 @@
+package com.citu.module.menduner.system.controller.app.jobhunt.user.vo;
+
+import com.citu.module.menduner.system.controller.base.user.auth.UserAuthRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "用户实名制 Response VO")
+@Data
+public class AppUserAuthRespVO extends UserAuthRespVO {
+
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+}

+ 23 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/user/vo/AppUserAuthSaveReqVO.java

@@ -0,0 +1,23 @@
+package com.citu.module.menduner.system.controller.app.jobhunt.user.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+
+
+@Schema(description = "求职端 - 用户实名制保存 Request VO")
+@Data
+public class AppUserAuthSaveReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20280")
+    private Long id;
+
+    @Schema(description = "正面", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
+    @NotEmpty(message = "正面不能为空")
+    private String frontUrl;
+
+    @Schema(description = "反面", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
+    @NotEmpty(message = "反面不能为空")
+    private String backUrl;
+}

+ 4 - 5
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/user/auth/UserAuthRespVO.java

@@ -1,13 +1,12 @@
 package com.citu.module.menduner.system.controller.base.user.auth;
 
 
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.util.*;
-import org.springframework.format.annotation.DateTimeFormat;
+import lombok.Data;
+
 import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
 
 @Schema(description = "管理后台 - 用户实名制 Response VO")
 @Data

+ 11 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/user/UserAuthDO.java

@@ -1,9 +1,7 @@
 package com.citu.module.menduner.system.dal.dataobject.user;
 
 
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import com.citu.framework.mybatis.core.dataobject.BaseDO;
 import lombok.*;
 
@@ -44,38 +42,47 @@ public class UserAuthDO extends BaseDO {
     /**
      * 姓名
      */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
     private String name;
     /**
      * 性别
      */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
     private String gender;
     /**
      * 民族
      */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
     private String ethnicity;
     /**
      * 出生日期
      */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
     private LocalDateTime birthDate;
     /**
      * 住址
      */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
     private String address;
     /**
      * 身份证号码
      */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
     private String idNumber;
     /**
      * 签发机关
      */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
     private String issuingAuthority;
     /**
      * 签发日期
      */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
     private LocalDateTime issueDate;
     /**
      * 失效日期
      */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
     private LocalDateTime expiryDate;
     /**
      * 审核状态(0审核中 1审核通过 2审核不通过)
@@ -84,6 +91,7 @@ public class UserAuthDO extends BaseDO {
     /**
      * 审核原因
      */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
     private String reason;
 
 }

+ 0 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/auth/EnterpriseAuthService.java

@@ -98,5 +98,4 @@ public interface EnterpriseAuthService {
      */
     void save(AppRecruitEnterpriseAuthSaveReqVO reqVO);
 
-
 }

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/interview/InterviewInviteServiceImpl.java

@@ -215,7 +215,7 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
         Long userId = LoginUserContext.getUserId(loginUser);
         InterviewInviteDO interviewInvite = BeanUtils.toBean(reqVO, InterviewInviteDO.class);
         // 检查时间是否小于当前时间
-        if(LocalDateTime.now().isBefore(reqVO.getTime())) {
+        if(LocalDateTime.now().isAfter(reqVO.getTime())) {
             throw exception(INTERVIEW_INVITE_TIME_LESS_THAN_NOW);
         }
         if(mapper.checkExistsTime(reqVO.getId(),enterpriseId, userId, reqVO.getJobId(),reqVO.getTime())) {

+ 9 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/user/UserAuthService.java

@@ -2,6 +2,8 @@ package com.citu.module.menduner.system.service.user;
 
 
 import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppUserAuthRespVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppUserAuthSaveReqVO;
 import com.citu.module.menduner.system.controller.base.user.auth.UserAuthPageReqVO;
 import com.citu.module.menduner.system.controller.base.user.auth.UserAuthSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.user.UserAuthDO;
@@ -53,4 +55,11 @@ public interface UserAuthService {
      */
     PageResult<UserAuthDO> getUserAuthPage(UserAuthPageReqVO pageReqVO);
 
+    // ========== 求职端 ==========
+    /** 获取用户实名制信息 **/
+    AppUserAuthRespVO get();
+
+    /** 保存更新用户实名制信息 **/
+    void save(AppUserAuthSaveReqVO reqVO);
+
 }

+ 85 - 7
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/user/UserAuthServiceImpl.java

@@ -1,12 +1,19 @@
 package com.citu.module.menduner.system.service.user;
 
 
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.citu.framework.baiduaip.core.AipOcrClient;
+import com.citu.framework.baiduaip.core.ocr.IDCardInfo;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.common.util.LoginUserContext;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppUserAuthRespVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppUserAuthSaveReqVO;
 import com.citu.module.menduner.system.controller.base.user.auth.UserAuthPageReqVO;
 import com.citu.module.menduner.system.controller.base.user.auth.UserAuthSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.user.UserAuthDO;
 import com.citu.module.menduner.system.dal.mysql.user.UserAuthMapper;
+import com.citu.module.menduner.system.enums.enterprise.EnterpriseAuthStatusEnum;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -25,13 +32,16 @@ import static com.citu.module.menduner.system.enums.ErrorCodeConstants.USER_AUTH
 public class UserAuthServiceImpl implements UserAuthService {
 
     @Resource
-    private UserAuthMapper userAuthMapper;
+    private UserAuthMapper mapper;
+
+    @Resource
+    private AipOcrClient aipOcrClient;
 
     @Override
     public Long createUserAuth(UserAuthSaveReqVO createReqVO) {
         // 插入
         UserAuthDO userAuth = BeanUtils.toBean(createReqVO, UserAuthDO.class);
-        userAuthMapper.insert(userAuth);
+        mapper.insert(userAuth);
         // 返回
         return userAuth.getId();
     }
@@ -42,7 +52,7 @@ public class UserAuthServiceImpl implements UserAuthService {
         validateUserAuthExists(updateReqVO.getId());
         // 更新
         UserAuthDO updateObj = BeanUtils.toBean(updateReqVO, UserAuthDO.class);
-        userAuthMapper.updateById(updateObj);
+        mapper.updateById(updateObj);
     }
 
     @Override
@@ -50,23 +60,91 @@ public class UserAuthServiceImpl implements UserAuthService {
         // 校验存在
         validateUserAuthExists(id);
         // 删除
-        userAuthMapper.deleteById(id);
+        mapper.deleteById(id);
     }
 
     private void validateUserAuthExists(Long id) {
-        if (userAuthMapper.selectById(id) == null) {
+        if (mapper.selectById(id) == null) {
             throw exception(USER_AUTH_NOT_EXISTS);
         }
     }
 
     @Override
     public UserAuthDO getUserAuth(Long id) {
-        return userAuthMapper.selectById(id);
+        return mapper.selectById(id);
     }
 
     @Override
     public PageResult<UserAuthDO> getUserAuthPage(UserAuthPageReqVO pageReqVO) {
-        return userAuthMapper.selectPage(pageReqVO);
+        return mapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public AppUserAuthRespVO get() {
+        UserAuthDO userAuth =
+                mapper.selectOne(UserAuthDO::getUserId, LoginUserContext.getUserId());
+        return BeanUtils.toBean(userAuth, AppUserAuthRespVO.class);
+    }
+
+    @Override
+    @DSTransactional
+    public void save(AppUserAuthSaveReqVO reqVO) {
+        Long userId = LoginUserContext.getUserId();
+        UserAuthDO entity =
+                mapper.selectOne(UserAuthDO::getUserId, LoginUserContext.getUserId());
+        if (null == entity) {
+            UserAuthDO auth = BeanUtils.toBean(reqVO, UserAuthDO.class);
+            auth.setId(null);
+            auth.setUserId(userId);
+            auth.setFrontUrl(reqVO.getFrontUrl());
+            auth.setBackUrl(reqVO.getBackUrl());
+            auth.setStatus(EnterpriseAuthStatusEnum.AUDITING.getStatus());
+            IDCardInfo cardInfo =  aipOcrClient.idcard(reqVO.getFrontUrl(), reqVO.getBackUrl());
+            if(null != cardInfo) {
+                fill(cardInfo,auth);
+            }
+
+            mapper.insert(auth);
+        } else {
+            // 重新提交
+            entity.setFrontUrl(reqVO.getFrontUrl());
+            entity.setBackUrl(reqVO.getBackUrl());
+            entity.setStatus(EnterpriseAuthStatusEnum.AUDITING.getStatus());
+            IDCardInfo cardInfo =  aipOcrClient.idcard(reqVO.getFrontUrl(), reqVO.getBackUrl());
+            if(null != cardInfo) {
+                fill(cardInfo,entity);
+            }
+            mapper.updateById(entity);
+        }
+    }
+
+    /** 填充身份证信息 **/
+    public void fill(IDCardInfo cardInfo, UserAuthDO auth) {
+        if(null != cardInfo) {
+            auth.setName(cardInfo.getName());
+            auth.setGender(cardInfo.getGender());
+            auth.setEthnicity(cardInfo.getEthnicity());
+            auth.setBirthDate(cardInfo.getBirthDate().atStartOfDay());
+            auth.setAddress(cardInfo.getAddress());
+            auth.setIdNumber(cardInfo.getIdNumber());
+            auth.setIssuingAuthority(cardInfo.getIssuingAuthority());
+            auth.setIssueDate(cardInfo.getIssueDate().atStartOfDay());
+            auth.setExpiryDate(cardInfo.getExpiryDate().atStartOfDay());
+            auth.setStatus(EnterpriseAuthStatusEnum.APPROVED.getStatus());
+            auth.setReason(EnterpriseAuthStatusEnum.APPROVED.name());
+        }else {
+            auth.setName(null);
+            auth.setGender(null);
+            auth.setEthnicity(null);
+            auth.setBirthDate(null);
+            auth.setAddress(null);
+            auth.setIdNumber(null);
+            auth.setIssuingAuthority(null);
+            auth.setIssueDate(null);
+            auth.setExpiryDate(null);
+            auth.setStatus(EnterpriseAuthStatusEnum.REJECT.getStatus());
+            auth.setReason("身份证信息解析失败,请重新按要求上传清晰的照片");
+        }
     }
 
 }