浏览代码

1、增加企业邮箱忘记密码
2、优化相关修改密码逻辑

rayson 8 月之前
父节点
当前提交
2c6d99823a
共有 30 个文件被更改,包括 264 次插入78 次删除
  1. 3 3
      citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/enums/sms/SmsSceneEnum.java
  2. 1 3
      menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/service/UserServiceImpl.java
  3. 9 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/CommonConstants.java
  4. 3 1
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java
  5. 1 1
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/user/MdeUserTypeEnum.java
  6. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/api/user/UserApiImpl.java
  7. 8 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/area/AreaController.java
  8. 10 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/position/PositionController.java
  9. 9 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/auth/AppMdeAuthController.java
  10. 47 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/auth/enterprise/AppEnterpriseResetPasswordReqVO.java
  11. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/order/AppTradeOrderController.java
  12. 0 7
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/user/AppMdeUserController.java
  13. 1 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/user/AppUserAuthController.java
  14. 16 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/user/vo/AppMdeUserResetPasswordReqVO.java
  15. 17 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/auth/AppRecruitEnterpriseAuthController.java
  16. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/order/AppRecruitTradeOrderController.java
  17. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/user/AppRecruitUserController.java
  18. 0 8
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/job/JobAdvertisedSaveReqVO.java
  19. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/order/TradeOrderMapper.java
  20. 9 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeAuthService.java
  21. 29 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeAuthServiceImpl.java
  22. 18 6
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeEnterpriseAuthService.java
  23. 67 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeEnterpriseAuthServiceImpl.java
  24. 4 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedServiceImpl.java
  25. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/order/TradeOrderServiceImpl.java
  26. 0 6
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/user/MdeUserService.java
  27. 3 25
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/user/MdeUserServiceImpl.java
  28. 1 0
      menduner/menduner-system-biz/src/main/resources/i18n/messages_en_US.properties
  29. 1 0
      menduner/menduner-system-biz/src/main/resources/i18n/messages_zh_CN.properties
  30. 1 1
      menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/userapi/UserApiTest.java

+ 3 - 3
citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/enums/sms/SmsSceneEnum.java

@@ -23,10 +23,10 @@ public enum SmsSceneEnum implements IntArrayValuable {
 
     ADMIN_MEMBER_LOGIN(21, "admin-sms-login", "后台用户 - 手机号登录"),
 
-    MENDUNER_LOGIN(30, "menduner-user-sms-login", "menduner - 手机号登陆"),
+    MENDUNER_LOGIN(30, "menduner-user-sms-login", "手机号登陆"),
     MENDUNER_UPDATE_MOBILE(31, "menduner-user-update-mobile", "修改手机"),
-    MENDUNER_UPDATE_PASSWORD(32, "menduner-user-update-password", "menduner - 修改密码"),
-    MENDUNER_RESET_PASSWORD(33, "menduner-user-reset-password", "menduner - 忘记密码");
+    MENDUNER_UPDATE_PASSWORD(32, "menduner-user-update-password", "修改密码"),
+    MENDUNER_RESET_PASSWORD(33, "menduner-user-reset-password", "忘记密码");
 
     public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SmsSceneEnum::getScene).toArray();
 

+ 1 - 3
menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/service/UserServiceImpl.java

@@ -1,11 +1,9 @@
 package com.citu.module.menduner.im.service;
 
 import cn.hutool.core.util.IdUtil;
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.citu.framework.common.exception.enums.GlobalErrorCodeConstants;
 import com.citu.framework.common.pojo.CommonResult;
-import com.citu.framework.security.core.util.SecurityFrameworkUtils;
 import com.citu.module.menduner.common.util.LoginUserContext;
 import com.citu.module.menduner.im.controller.app.base.user.ImUserInfoVo;
 import com.citu.module.menduner.im.controller.app.base.user.ImUserReqVo;
@@ -17,7 +15,7 @@ import com.citu.module.menduner.im.service.wukong.WuKongUserService;
 import com.citu.module.menduner.system.api.user.UserApi;
 import com.citu.module.menduner.system.api.user.UserInfoReqDTO;
 import com.citu.module.menduner.system.api.user.UserInfoRespDTO;
-import com.citu.module.menduner.system.enums.MdeUserTypeEnum;
+import com.citu.module.menduner.system.enums.user.MdeUserTypeEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;

+ 9 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/CommonConstants.java

@@ -0,0 +1,9 @@
+package com.citu.module.menduner.system.enums;
+
+/**
+ * 公共常量
+ **/
+public class CommonConstants {
+    /** 邮箱验证码 **/
+    public static final String EMAIL_TEMPLATE_CODE = "menduner-code";
+}

+ 3 - 1
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java

@@ -146,6 +146,8 @@ public interface ErrorCodeConstants {
 
     ErrorCode MDE_USER_MOBILE_EXISTS_OTHER = new ErrorCode(1_100_016_025, "该手机号已被其他用户使用");
 
+    ErrorCode MDE_USER_EMAIL_CODE_NOT_NULL= new ErrorCode(1_100_016_026, "邮箱验证码不能为空");
+
     // ========== AUTH 模块 1_100_017_000 ==========
     ErrorCode MDE_AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1_100_017_001, "登录失败,账号密码不正确");
     ErrorCode MDE_AUTH_LOGIN_USER_DISABLED = new ErrorCode(1_100_017_002, "登录失败,账号被禁用");
@@ -169,7 +171,7 @@ public interface ErrorCodeConstants {
     ErrorCode MDE_AUTH_TOKEN_NOT_NULL = new ErrorCode(1_100_017_018, "访问令牌不能为空");
 
     ErrorCode MDE_USER_EMAIL_NOT_REGISTERED = new ErrorCode(1_100_017_019, "邮箱号未注册");
-
+    ErrorCode MDE_USER_EMAIL_CODE_ERROR = new ErrorCode(1_100_017_020, "邮箱验证码不正确");
 
     // ========== 角色模块 1_100_018_000 ==========
     ErrorCode MDE_ROLE_NOT_EXISTS = new ErrorCode(1_100_018_001, "角色不存在");

+ 1 - 1
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/MdeUserTypeEnum.java → menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/user/MdeUserTypeEnum.java

@@ -1,4 +1,4 @@
-package com.citu.module.menduner.system.enums;
+package com.citu.module.menduner.system.enums.user;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/api/user/UserApiImpl.java

@@ -4,7 +4,7 @@ import com.citu.framework.common.pojo.CommonResult;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
 import com.citu.module.menduner.system.dal.mysql.enterprise.EnterpriseUserBindMapper;
 import com.citu.module.menduner.system.dal.mysql.person.PersonInfoMapper;
-import com.citu.module.menduner.system.enums.MdeUserTypeEnum;
+import com.citu.module.menduner.system.enums.user.MdeUserTypeEnum;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RestController;
 

+ 8 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/area/AreaController.java

@@ -6,6 +6,8 @@ import com.citu.framework.common.pojo.PageParam;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
 import com.citu.framework.excel.core.util.ExcelUtils;
+import com.citu.module.menduner.system.controller.app.jobhunt.area.vo.AppAreaChildrenRespVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.area.vo.AppAreaListReqVO;
 import com.citu.module.menduner.system.controller.base.area.*;
 import com.citu.module.menduner.system.dal.dataobject.area.AreaDO;
 import com.citu.module.menduner.system.service.area.AreaService;
@@ -122,5 +124,11 @@ public class AreaController {
         return success(list);
     }
 
+    @GetMapping("/get/tree")
+    @Operation(summary = "获取区域树形")
+    public CommonResult<List<AppAreaChildrenRespVO>> getArea(@Valid AppAreaListReqVO listReqVO) {
+        List<AppAreaChildrenRespVO> list = areaService.getArea(listReqVO);
+        return success(list);
+    }
 
 }

+ 10 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/position/PositionController.java

@@ -6,6 +6,8 @@ import com.citu.framework.common.pojo.PageParam;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
 import com.citu.framework.excel.core.util.ExcelUtils;
+import com.citu.module.menduner.system.controller.app.jobhunt.position.vo.AppPositionChildrenRespVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.position.vo.AppPositionListReqVO;
 import com.citu.module.menduner.system.controller.base.position.PositionListReqVO;
 import com.citu.module.menduner.system.controller.base.position.PositionPageReqVO;
 import com.citu.module.menduner.system.controller.base.position.PositionRespVO;
@@ -100,6 +102,14 @@ public class PositionController {
                 BeanUtils.toBean(list, PositionRespVO.class));
     }
 
+    @GetMapping("/get/tree")
+    @Operation(summary = "获取职位树形")
+    public CommonResult<List<AppPositionChildrenRespVO>> getPosition(@Valid AppPositionListReqVO listReqVO) {
+        List<AppPositionChildrenRespVO> list = positionService.getPosition(listReqVO);
+        return success(list);
+    }
+
+
     @GetMapping("/sync/boss")
     @Operation(summary = "同步Boss职位类型")
     public void syncBossPosition() {

+ 9 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/auth/AppMdeAuthController.java

@@ -7,6 +7,7 @@ import com.citu.framework.security.config.SecurityProperties;
 import com.citu.framework.security.core.util.SecurityFrameworkUtils;
 import com.citu.module.menduner.common.util.LoginUserContext;
 import com.citu.module.menduner.system.controller.app.jobhunt.auth.vo.*;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppMdeUserResetPasswordReqVO;
 import com.citu.module.menduner.system.convert.MdeAuthConvert;
 import com.citu.module.menduner.system.service.auth.MdeAuthService;
 import com.citu.module.system.api.social.SocialClientApi;
@@ -68,6 +69,14 @@ public class AppMdeAuthController {
         return success(authService.refreshToken(refreshToken));
     }
 
+    @PutMapping("/reset-password")
+    @Operation(summary = "重置密码", description = "用户忘记密码时使用")
+    public CommonResult<Boolean> resetUserPassword(@RequestBody @Valid AppMdeUserResetPasswordReqVO reqVO) {
+        authService.resetUserPassword(reqVO);
+        return success(true);
+    }
+
+
     // ========== 短信登录相关 ==========
 
     @PostMapping("/sms-login")

+ 47 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/auth/enterprise/AppEnterpriseResetPasswordReqVO.java

@@ -0,0 +1,47 @@
+package com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+
+@Schema(description = "企业用户 - 重置密码 Request VO")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class AppEnterpriseResetPasswordReqVO {
+
+    @NotBlank(message = "{1_100_021_006}")
+    @Schema(description = "企业邮箱")
+    private String email;
+
+    @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "buzhidao")
+    @NotEmpty(message = "{1_100_016_019}")
+//    @Length(min = 4, max = 16, message = "{1_100_016_014}")
+    private String password;
+
+    @NotEmpty(message = "{1_100_016_026}")
+    @Schema(description = "邮箱验证码")
+    private String code;
+
+
+    // ========== 图片验证码相关 ==========
+
+    @Schema(description = "验证码,验证码开启时,需要传递", requiredMode = Schema.RequiredMode.REQUIRED,
+            example = "PfcH6mgr8tpXuMWFjvW6YVaqrswIuwmWI5dsVZSg7sGpWtDCUbHuDEXl3cFB1+VvCC/rAkSwK8Fad52FSuncVg==")
+    @NotEmpty(message = "{1_100_017_015}", groups = AppEnterpriseResetPasswordReqVO.CodeEnableGroup.class)
+    private String captchaVerification;
+
+
+    /**
+     * 开启验证码的 Group
+     */
+    public interface CodeEnableGroup {
+    }
+
+}

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/order/AppTradeOrderController.java

@@ -10,7 +10,7 @@ import com.citu.module.menduner.system.controller.base.order.AppTradeOrderGetReq
 import com.citu.module.menduner.system.controller.base.order.AppTradeOrderCreateReqVO;
 import com.citu.module.menduner.system.controller.base.order.AppTradeOrderGetRespVO;
 import com.citu.module.menduner.system.controller.base.order.TradeOrderCreateReqVO;
-import com.citu.module.menduner.system.enums.MdeUserTypeEnum;
+import com.citu.module.menduner.system.enums.user.MdeUserTypeEnum;
 import com.citu.module.menduner.system.service.order.TradeOrderService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;

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

@@ -83,12 +83,5 @@ public class AppMdeUserController {
         return success(true);
     }
 
-    @PutMapping("/reset-password")
-    @Operation(summary = "重置密码", description = "用户忘记密码时使用")
-    public CommonResult<Boolean> resetUserPassword(@RequestBody @Valid AppMdeUserResetPasswordReqVO reqVO) {
-        mdeUserService.resetUserPassword(reqVO);
-        return success(true);
-    }
-
 
 }

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

@@ -43,4 +43,5 @@ public class AppUserAuthController {
     }
 
 
+
 }

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

@@ -1,6 +1,7 @@
 package com.citu.module.menduner.system.controller.app.jobhunt.user.vo;
 
 import com.citu.framework.common.validation.Mobile;
+import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseResetPasswordReqVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -35,4 +36,19 @@ public class AppMdeUserResetPasswordReqVO {
     @Mobile
     private String phone;
 
+    // ========== 图片验证码相关 ==========
+
+    @Schema(description = "验证码,验证码开启时,需要传递", requiredMode = Schema.RequiredMode.REQUIRED,
+            example = "PfcH6mgr8tpXuMWFjvW6YVaqrswIuwmWI5dsVZSg7sGpWtDCUbHuDEXl3cFB1+VvCC/rAkSwK8Fad52FSuncVg==")
+    @NotEmpty(message = "{1_100_017_015}", groups = AppEnterpriseResetPasswordReqVO.CodeEnableGroup.class)
+    private String captchaVerification;
+
+
+    /**
+     * 开启验证码的 Group
+     */
+    public interface CodeEnableGroup {
+    }
+
+
 }

+ 17 - 5
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/auth/AppRecruitEnterpriseAuthController.java

@@ -6,8 +6,7 @@ import com.citu.framework.security.config.SecurityProperties;
 import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.framework.security.core.util.SecurityFrameworkUtils;
 import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseAuthSwitchLoginReqVO;
-import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseAuthLoginReqVO;
-import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseAuthSmsLoginReqVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseResetPasswordReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.auth.vo.AppMdeAuthLoginRespVO;
 import com.citu.module.menduner.system.service.auth.MdeEnterpriseAuthService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -21,7 +20,6 @@ import javax.annotation.Resource;
 import javax.annotation.security.PermitAll;
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
-
 import java.util.Objects;
 
 import static com.citu.framework.common.pojo.CommonResult.success;
@@ -48,7 +46,7 @@ public class AppRecruitEnterpriseAuthController {
     public CommonResult<Boolean> logout(HttpServletRequest request, @RequestParam("token") String token) {
         String currentToken = SecurityFrameworkUtils.obtainAuthorization(request,
                 securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
-        if(!Objects.equals(currentToken, token)) {
+        if (!Objects.equals(currentToken, token)) {
             // 无法登出不是自己的令牌
             return success(false);
         }
@@ -67,7 +65,21 @@ public class AppRecruitEnterpriseAuthController {
                                                             @RequestParam("refreshToken") String refreshToken) {
         String accessToken = SecurityFrameworkUtils.obtainAuthorization(request,
                 securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
-        return success(enterpriseAuthService.refreshToken(accessToken,refreshToken));
+        return success(enterpriseAuthService.refreshToken(accessToken, refreshToken));
+    }
+
+    @PostMapping("/send-email-code")
+    @Operation(summary = "发送邮箱验证码")
+    public CommonResult<Boolean> sendEmailCode(@RequestParam("email") String email) {
+        enterpriseAuthService.sendEmail(email);
+        return success(true);
+    }
+
+    @PutMapping("/reset-password")
+    @Operation(summary = "重置密码", description = "用户忘记密码时使用")
+    public CommonResult<Boolean> resetUserPassword(@RequestBody @Valid AppEnterpriseResetPasswordReqVO reqVO) {
+        enterpriseAuthService.resetPassword(reqVO);
+        return success(true);
     }
 
     // ========== 自动登录相关 ==========

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/order/AppRecruitTradeOrderController.java

@@ -9,7 +9,7 @@ import com.citu.module.menduner.system.controller.base.order.AppTradeOrderCreate
 import com.citu.module.menduner.system.controller.base.order.AppTradeOrderGetReqVO;
 import com.citu.module.menduner.system.controller.base.order.AppTradeOrderGetRespVO;
 import com.citu.module.menduner.system.controller.base.order.TradeOrderCreateReqVO;
-import com.citu.module.menduner.system.enums.MdeUserTypeEnum;
+import com.citu.module.menduner.system.enums.user.MdeUserTypeEnum;
 import com.citu.module.menduner.system.enums.order.TradeOrderTypeEnum;
 import com.citu.module.menduner.system.service.order.TradeOrderService;
 import io.swagger.v3.oas.annotations.Operation;

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/user/AppRecruitUserController.java

@@ -102,7 +102,7 @@ public class AppRecruitUserController {
     }
 
     @PutMapping("/update-password")
-    @Operation(summary = "重置用户密码")
+    @Operation(summary = "修改用户密码")
     public CommonResult<Boolean> updateUserPassword(@Valid @RequestBody AppRecruitEnterpriseUpdatePasswordReqVO reqVO) {
         service.updatePassword(reqVO.getId(), reqVO.getPassword());
         return success(true);

+ 0 - 8
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/job/JobAdvertisedSaveReqVO.java

@@ -17,14 +17,6 @@ public class JobAdvertisedSaveReqVO {
     @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4770")
     private Long id;
 
-    @Schema(description = "企业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29465")
-    @NotNull(message = "{1_100_019_002}")
-    private Long enterpriseId;
-
-    @Schema(description = "发布用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "9592")
-    @NotNull(message = "{1_100_025_005}")
-    private Long userId;
-
     @Schema(description = "工作地区", requiredMode = Schema.RequiredMode.REQUIRED, example = "25976")
     @NotNull(message = "{1_100_004_003}")
     private Long areaId;

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/order/TradeOrderMapper.java

@@ -11,7 +11,7 @@ import com.citu.module.menduner.system.controller.app.recruit.order.vo.AppRecrui
 import com.citu.module.menduner.system.controller.app.recruit.order.vo.AppRecruitTradeOrderRespVO;
 import com.citu.module.menduner.system.controller.base.order.TradeOrderPageReqVO;
 import com.citu.module.menduner.system.dal.dataobject.order.TradeOrderDO;
-import com.citu.module.menduner.system.enums.MdeUserTypeEnum;
+import com.citu.module.menduner.system.enums.user.MdeUserTypeEnum;
 import com.citu.module.menduner.system.enums.order.TradeOrderRefundStatusEnum;
 import com.citu.module.menduner.system.enums.order.TradeOrderStatusEnum;
 import org.apache.ibatis.annotations.Mapper;

+ 9 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeAuthService.java

@@ -2,7 +2,7 @@ package com.citu.module.menduner.system.service.auth;
 
 
 import com.citu.module.menduner.system.controller.app.jobhunt.auth.vo.*;
-import org.springframework.web.bind.annotation.RequestBody;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppMdeUserResetPasswordReqVO;
 
 import javax.validation.Valid;
 
@@ -82,7 +82,7 @@ public interface MdeAuthService {
     /**
      * 校验短信验证码是否正确
      *
-     * @param reqVO  校验信息
+     * @param reqVO 校验信息
      */
     void validateSmsCode(AppMdeAuthSmsValidateReqVO reqVO);
 
@@ -95,5 +95,12 @@ public interface MdeAuthService {
     AppMdeAuthLoginRespVO refreshToken(String refreshToken);
 
 
+    /**
+     * 忘记密码
+     *
+     * @param reqVO 请求信息
+     */
+    void resetUserPassword(AppMdeUserResetPasswordReqVO reqVO);
+
 
 }

+ 29 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeAuthServiceImpl.java

@@ -11,7 +11,9 @@ import com.citu.framework.common.util.validation.ValidationUtils;
 import com.citu.module.menduner.common.enums.EventAsyncUrlEnum;
 import com.citu.module.menduner.common.enums.PointBizTypeEnum;
 import com.citu.module.menduner.common.message.EventAsyncConfirmMessage;
+import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseResetPasswordReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.auth.vo.*;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppMdeUserResetPasswordReqVO;
 import com.citu.module.menduner.system.convert.MdeAuthConvert;
 import com.citu.module.menduner.system.dal.dataobject.user.MdeUserDO;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
@@ -303,21 +305,21 @@ public class MdeAuthServiceImpl implements MdeAuthService {
     @Override
     public void sendSmsCode(Long userId, AppMdeAuthSmsSendReqVO reqVO) {
         // 情况 1:如果是修改手机场景,需要校验新手机号是否已经注册,说明不能使用该手机了
-        if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene())) {
+        if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MENDUNER_UPDATE_MOBILE.getScene())) {
             MdeUserDO user = userService.getUserByPhone(reqVO.getPhone());
             if (user != null && !Objects.equals(user.getId(), userId)) {
                 throw exception(MDE_AUTH_MOBILE_USED);
             }
         }
         // 情况 2:如果是重置密码场景,需要校验手机号是存在的
-        if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_RESET_PASSWORD.getScene())) {
+        if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MENDUNER_RESET_PASSWORD.getScene())) {
             MdeUserDO user = userService.getUserByPhone(reqVO.getPhone());
             if (user == null) {
                 throw exception(MDE_USER_MOBILE_NOT_EXISTS);
             }
         }
         // 情况 3:如果是修改密码场景,需要查询手机号,无需前端传递
-        if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_UPDATE_PASSWORD.getScene())) {
+        if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MENDUNER_UPDATE_PASSWORD.getScene())) {
             MdeUserDO user = userService.getMdeUser(userId);
             // TODO 芋艿:后续 member user 手机非强绑定,这块需要做下调整;
             reqVO.setPhone(user.getPhone());
@@ -328,6 +330,30 @@ public class MdeAuthServiceImpl implements MdeAuthService {
                 .getCheckedData();
     }
 
+    @Override
+    public void resetUserPassword(AppMdeUserResetPasswordReqVO reqVO) {
+        if (captchaEnable) {
+            // 校验验证码
+            ValidationUtils.validate(validator, reqVO, AppMdeUserResetPasswordReqVO.CodeEnableGroup.class);
+            CaptchaVO captchaVO = new CaptchaVO();
+            captchaVO.setCaptchaVerification(reqVO.getCaptchaVerification());
+            ResponseModel response = captchaService.verification(captchaVO);
+            // 验证不通过
+            if (!response.isSuccess()) {
+                // 创建登录失败日志(验证码不正确)
+                throw exception(MDE_AUTH_LOGIN_CAPTCHA_CODE_ERROR, response.getRepMsg());
+            }
+        }
+        // 检验用户是否存在
+        MdeUserDO user = userService.getUserByPhone(reqVO.getPhone());
+        // 使用验证码
+        smsCodeApi.useSmsCode(MdeAuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MENDUNER_RESET_PASSWORD,
+                getClientIP())).getCheckedData();
+
+        // 更新密码
+        userService.updateUserPassword(user.getId(),reqVO.getPassword());
+    }
+
     @Override
     public void validateSmsCode(AppMdeAuthSmsValidateReqVO reqVO) {
         smsCodeApi.validateSmsCode(MdeAuthConvert.INSTANCE.convert(reqVO).setMobile(reqVO.getPhone())).getCheckedData();

+ 18 - 6
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeEnterpriseAuthService.java

@@ -1,9 +1,8 @@
 package com.citu.module.menduner.system.service.auth;
 
 import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseAuthSwitchLoginReqVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseResetPasswordReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.auth.vo.AppMdeAuthLoginRespVO;
-import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseAuthLoginReqVO;
-import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseAuthSmsLoginReqVO;
 
 import javax.validation.Valid;
 
@@ -18,11 +17,12 @@ public interface MdeEnterpriseAuthService {
 
     /**
      * 邮箱 + 密码登录
-     * @param email 邮箱
+     *
+     * @param email    邮箱
      * @param password 密码
      * @return 登录结果
      */
-    AppMdeAuthLoginRespVO login(String email,String password);
+    AppMdeAuthLoginRespVO login(String email, String password);
 
     /**
      * 切换登录
@@ -42,11 +42,23 @@ public interface MdeEnterpriseAuthService {
     /**
      * 刷新访问令牌
      *
-     * @param accessToken 访问令牌
+     * @param accessToken  访问令牌
      * @param refreshToken 刷新令牌
      * @return 登录结果
      */
-    AppMdeAuthLoginRespVO refreshToken(String accessToken,String refreshToken);
+    AppMdeAuthLoginRespVO refreshToken(String accessToken, String refreshToken);
 
+    /**
+     * 发送邮箱验证码
+     *
+     * @param email 邮箱
+     */
+    void sendEmail(String email);
 
+    /**
+     * 重置密码
+     *
+     * @param reqVO 重置信息
+     */
+    void resetPassword(AppEnterpriseResetPasswordReqVO reqVO);
 }

+ 67 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeEnterpriseAuthServiceImpl.java

@@ -2,23 +2,29 @@ package com.citu.module.menduner.system.service.auth;
 
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.RandomUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.citu.framework.common.enums.UserTypeEnum;
 import com.citu.framework.common.util.monitor.TracerUtils;
 import com.citu.framework.common.util.servlet.ServletUtils;
+import com.citu.framework.common.util.validation.ValidationUtils;
 import com.citu.framework.security.core.LoginUser;
 import com.citu.module.menduner.common.util.LoginUserContext;
 import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseAuthSwitchLoginReqVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.auth.enterprise.AppEnterpriseResetPasswordReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.auth.vo.AppMdeAuthLoginRespVO;
 import com.citu.module.menduner.system.convert.MdeAuthConvert;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseUserBindDO;
 import com.citu.module.menduner.system.dal.dataobject.user.MdeUserDO;
+import com.citu.module.menduner.system.enums.CommonConstants;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
 import com.citu.module.menduner.system.service.enterprise.bind.EnterpriseUserBindService;
 import com.citu.module.menduner.system.service.enterprise.register.EnterpriseRegisterService;
 import com.citu.module.menduner.system.service.user.MdeUserService;
 import com.citu.module.system.api.logger.LoginLogApi;
 import com.citu.module.system.api.logger.dto.LoginLogCreateReqDTO;
+import com.citu.module.system.api.mail.MailSendApi;
+import com.citu.module.system.api.mail.dto.MailSendSingleToUserReqDTO;
 import com.citu.module.system.api.oauth2.OAuth2TokenApi;
 import com.citu.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO;
 import com.citu.module.system.api.oauth2.dto.OAuth2AccessTokenCreateReqDTO;
@@ -26,11 +32,18 @@ import com.citu.module.system.api.oauth2.dto.OAuth2AccessTokenRespDTO;
 import com.citu.module.system.enums.logger.LoginLogTypeEnum;
 import com.citu.module.system.enums.logger.LoginResultEnum;
 import com.citu.module.system.enums.oauth2.OAuth2ClientConstants;
+import com.xingyuv.captcha.model.common.ResponseModel;
+import com.xingyuv.captcha.model.vo.CaptchaVO;
+import com.xingyuv.captcha.service.CaptchaService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import javax.validation.Validator;
 import java.util.Objects;
+import java.util.concurrent.TimeUnit;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.citu.framework.common.util.servlet.ServletUtils.getClientIP;
@@ -52,11 +65,23 @@ public class MdeEnterpriseAuthServiceImpl implements MdeEnterpriseAuthService {
     protected LoginLogApi loginLogApi;
     @Resource
     protected OAuth2TokenApi oauth2TokenApi;
+    /**
+     * 验证码的开关,默认为 true
+     */
+    @Value("${citu.captcha.enable:true}")
+    protected Boolean captchaEnable;
+    @Resource
+    protected Validator validator;
+    @Resource
+    protected CaptchaService captchaService;
     @Resource
     private EnterpriseUserBindService userBindService;
     @Resource
     private EnterpriseRegisterService registerService;
-
+    @Resource
+    private MailSendApi mailSendApi;
+    @Resource
+    private RedisTemplate<String, Object> redisTemplate;
 
     @Override
     @DSTransactional
@@ -225,4 +250,45 @@ public class MdeEnterpriseAuthServiceImpl implements MdeEnterpriseAuthService {
         ).getCheckedData();
         return MdeAuthConvert.INSTANCE.convert(accessTokenDO, null);
     }
+
+
+    @Override
+    public void sendEmail(String email) {
+        MailSendSingleToUserReqDTO reqDTO = new MailSendSingleToUserReqDTO();
+        reqDTO.setMail(email);
+        reqDTO.setTemplateCode(CommonConstants.EMAIL_TEMPLATE_CODE);
+        Object code = RandomUtil.randomNumbers(6);
+        reqDTO.setTemplateParams(MapUtil.builder("code", code).build());
+        mailSendApi.sendSingleMailToMember(reqDTO).getCheckedData();
+        redisTemplate.opsForValue().set(email, code, 5, TimeUnit.MINUTES);
+    }
+
+    @Override
+    public void resetPassword(AppEnterpriseResetPasswordReqVO reqVO) {
+        if (captchaEnable) {
+            // 校验验证码
+            ValidationUtils.validate(validator, reqVO, AppEnterpriseResetPasswordReqVO.CodeEnableGroup.class);
+            CaptchaVO captchaVO = new CaptchaVO();
+            captchaVO.setCaptchaVerification(reqVO.getCaptchaVerification());
+            ResponseModel response = captchaService.verification(captchaVO);
+            // 验证不通过
+            if (!response.isSuccess()) {
+                // 创建登录失败日志(验证码不正确)
+                throw exception(MDE_AUTH_LOGIN_CAPTCHA_CODE_ERROR, response.getRepMsg());
+            }
+        }
+        Object code = redisTemplate.opsForValue().get(reqVO.getEmail());
+        if (null == code || !reqVO.getCode().equals(code.toString())) {
+            throw exception(MDE_USER_EMAIL_CODE_ERROR);
+        }
+
+        EnterpriseUserBindDO user = userBindService.getByEmail(reqVO.getEmail());
+        if (null == user) {
+            throw exception(MDE_USER_EMAIL_NOT_REGISTERED);
+        }
+
+        userBindService.updatePassword(user.getId(), reqVO.getPassword());
+        redisTemplate.delete(reqVO.getEmail());
+
+    }
 }

+ 4 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedServiceImpl.java

@@ -85,6 +85,8 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
         jobAdvertised.setStatus(JobStatusEnum.ENABLE.getStatus());
         jobAdvertised.setTop(false);
         jobAdvertised.setHire(true);
+        jobAdvertised.setEnterpriseId(DEFAULT_ENTERPRISE_ID);
+        jobAdvertised.setUserId(DEFAULT_USER_ID);
         return save(jobAdvertised,  DEFAULT_ENTERPRISE_ID, DEFAULT_USER_ID);
     }
 
@@ -94,6 +96,8 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
         validateJobAdvertisedExists(updateReqVO.getId());
         // 更新
         JobAdvertisedDO updateObj = BeanUtils.toBean(updateReqVO, JobAdvertisedDO.class);
+        updateObj.setEnterpriseId(DEFAULT_ENTERPRISE_ID);
+        updateObj.setUserId(DEFAULT_USER_ID);
         save(updateObj, DEFAULT_ENTERPRISE_ID, DEFAULT_USER_ID);
     }
 

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/order/TradeOrderServiceImpl.java

@@ -13,7 +13,7 @@ import com.citu.module.menduner.system.controller.base.order.TradeOrderCreateReq
 import com.citu.module.menduner.system.controller.base.order.TradeOrderPageReqVO;
 import com.citu.module.menduner.system.dal.dataobject.order.TradeOrderDO;
 import com.citu.module.menduner.system.dal.mysql.order.TradeOrderMapper;
-import com.citu.module.menduner.system.enums.MdeUserTypeEnum;
+import com.citu.module.menduner.system.enums.user.MdeUserTypeEnum;
 import com.citu.module.menduner.system.enums.order.TradeOrderCancelTypeEnum;
 import com.citu.module.menduner.system.enums.order.TradeOrderRefundStatusEnum;
 import com.citu.module.menduner.system.enums.order.TradeOrderStatusEnum;

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

@@ -173,12 +173,6 @@ public interface MdeUserService {
      */
     void updateUserStatus(Long id, String status);
 
-    /**
-     * 忘记密码
-     *
-     * @param reqVO 请求信息
-     */
-    void resetUserPassword(AppMdeUserResetPasswordReqVO reqVO);
 
     /**
      * 修改vip

+ 3 - 25
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/user/MdeUserServiceImpl.java

@@ -361,35 +361,13 @@ public class MdeUserServiceImpl implements MdeUserService {
         // 检测用户是否存在
         MdeUserDO user = validateUserExists(userId);
         // 校验验证码
-//        smsCodeApi.useSmsCode(new SmsCodeUseReqDTO().setMobile(user.getPhone()).setCode(reqVO.getCode())
-//                .setScene(SmsSceneEnum.MEMBER_UPDATE_PASSWORD.getScene()).setUsedIp(getClientIP())).getCheckedData();
+        smsCodeApi.useSmsCode(new SmsCodeUseReqDTO().setMobile(user.getPhone()).setCode(reqVO.getCode())
+                .setScene(SmsSceneEnum.MEMBER_UPDATE_PASSWORD.getScene()).setUsedIp(getClientIP())).getCheckedData();
 
         // 更新用户密码
-        mdeUserMapper.updateById(MdeUserDO.builder().id(userId)
-                .password(passwordEncoder.encode(reqVO.getPassword())).build());
+        updateUserPassword(userId,reqVO.getPassword());
     }
 
-    private MdeUserDO validateUserExists(String mobile) {
-        MdeUserDO user = mdeUserMapper.selectByPhone(mobile);
-        if (user == null) {
-            throw exception(MDE_USER_MOBILE_NOT_EXISTS);
-        }
-        return user;
-    }
-
-    @Override
-    public void resetUserPassword(AppMdeUserResetPasswordReqVO reqVO) {
-        // 检验用户是否存在
-        MdeUserDO user = validateUserExists(reqVO.getPhone());
-
-        // 使用验证码
-//        smsCodeApi.useSmsCode(MdeAuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MENDUNER_RESET_PASSWORD,
-//                getClientIP())).getCheckedData();
-
-        // 更新密码
-        mdeUserMapper.updateById(MdeUserDO.builder().id(user.getId())
-                .password(passwordEncoder.encode(reqVO.getPassword())).build());
-    }
 
     @Override
     public void updateVip(Long id, String vipFlag, LocalDateTime vipExpireDate) {

+ 1 - 0
menduner/menduner-system-biz/src/main/resources/i18n/messages_en_US.properties

@@ -138,6 +138,7 @@
 1_100_017_017=Unregistered user, please register individual user first before applying for enterprise user
 1_100_017_018=Access token cannot be empty
 1_100_017_019=Email number not registered
+1_100_017_020=Email verification code incorrect
 # ========== 角色模块 1_100_018_000 ==========
 1_100_018_001=Character does not exist
 1_100_018_002=A role named [{}] already exists

+ 1 - 0
menduner/menduner-system-biz/src/main/resources/i18n/messages_zh_CN.properties

@@ -138,6 +138,7 @@
 1_100_017_017=未注册用户,请先注册人才用户再申请企业用户
 1_100_017_018=访问令牌不能为空
 1_100_017_019=邮箱号未注册
+1_100_017_020=邮箱验证码不正确
 # ========== 角色模块 1_100_018_000 ==========
 1_100_018_001=角色不存在
 1_100_018_002=已经存在名为【{}】的角色

+ 1 - 1
menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/userapi/UserApiTest.java

@@ -5,7 +5,7 @@ import com.citu.framework.test.core.ut.BaseMockitoUnitTest;
 import com.citu.module.menduner.system.api.user.UserApi;
 import com.citu.module.menduner.system.api.user.UserInfoReqDTO;
 import com.citu.module.menduner.system.api.user.UserInfoRespDTO;
-import com.citu.module.menduner.system.enums.MdeUserTypeEnum;
+import com.citu.module.menduner.system.enums.user.MdeUserTypeEnum;
 import org.mockito.Mock;
 
 import java.util.ArrayList;