소스 검색

feat: web忘记密码并发送忘记密码短信

shc 10 달 전
부모
커밋
dc18d912a6

+ 213 - 208
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/CacheConstants.java

@@ -3,213 +3,218 @@ package com.qunzhixinxi.hnqz.admin.api.constant;
 public interface CacheConstants {
 
 
-	String ARTICLE_HOT_KEY = "article_hot_key";
-
-	String USER_NOTICE_KEY = "user_notice_key:";
-	String USER_ADD_NOTICE_KEY = "user_add_notice_key:";
-
-	String DRUG_ENT_PERSONAL_SHARE_KEY1 = "share_drug_ent:";
-	String DRUG_ENT_PERSONAL_SHARE_KEY2 = "userId:";
-
-	/**
-	 * 文章每人分享限制缓存
-	 */
-	String ARTICLE_PERSONAL_SHARE_KEY = "share_article:";
-
-	String SETTLE_PACKAGE_KEY = "settle_package_key:settle";
-
-	String EMAIL_KEY = "email_key:";
-
-	/**
-	 * 税邦云登录key
-	 */
-	String TAX_HELPER_LOGIN_KEY = "TAXHELPER:LOGIN_KEY:";
-
-	/**
-	 * 问问风湿登陆缓存key
-	 */
-	String WENWEN_LOGIN_KEY = "WENWEN_LOGIN_KEY";
-
-	/**
-	 * 甲方缓存
-	 */
-	String PARTY_A_CACHE_KEY = "PARTY_A_CACHE_KEY:";
-
-	/**
-	 * 税邦云认证回调key
-	 */
-	String TAX_HELPER_CHECK_FACE_NOTIFY_KEY = "TAXHELPER::CHECK::FACE::NOTIFY::KEY::";
-
-	/**
-	 * 税邦云结算回调key
-	 */
-	String TAX_HELPER_SETTLEMENT_NOTIFY_KEY = "TAXHELPER::SETTLEMENT::NOTIFY::KEY::";
-
-	/**
-	 * 微信公众号access_token的key
-	 */
-	String SYS_WX_ACCOUNT_TOKEN_KEY = "SYS::WX::ACCOUNT::TOKEN::KEY";
-
-	/**
-	 * 微信公众号发送图文消息key
-	 */
-	String SYS_WX_ACCOUNT_CALLBACK = "SYS::WX::ACCOUNT::CALLBACK";
-
-	/**
-	 * 定时任务-每日统计GMVs的key
-	 */
-	String QUARTZ_DAILY_GMVS_STATISTICS = "QUARTZ::DAILY::GMVS::STATISTICS";
-
-	/**
-	 * 7天
-	 */
-	int NOTICE_TIME = 7;
-
-	int SHARE_TIME = 1;
-
-	int SETTLE_TIME = 2;
-
-	/**
-	 * 渠道限额缓存
-	 */
-	String MONITORING_INDICATOR = "monitoring_indicator";
-
-	/**
-	 * zb报告导出缓存
-	 */
-	String EXPORT_ZB_REPORT_CACHE = "export:zb_report:%s";
-	String EXPORT_ZB_REVIEW_REPORT_CACHE = "export:zb_review_report:%s";
-	String EXPORT_NBA_REPORT_CACHE = "export:nba_report:%s";
-	String EXPORT_NBA_HISTORY_REPORT_CACHE = "export:nba_history_report:%s";
-	String EXPORT_NB_REPORT_CACHE = "export:nb_report:%s";
-	String EXPORT_NB_REVIEW_REPORT_CACHE = "export:nb_review_report:%s";
-
-	String NEW_DRUG_ENT_REPORT_CACHE = "new_export:drug_ent_report:%s";
-	String NEW_PERSONAL_REPORT_CACHE = "new_export:personal_report:%s";
-
-	/**
-	 * excel报告导出缓存
-	 */
-	String EXCEL_EXPORT_ZB_REPORT_CACHE = "excel_export:zb_report:%s";
-	String EXCEL_EXPORT_ZB_REVIEW_REPORT_CACHE = "excel_export:zb_review_report:%s";
-	String EXCEL_EXPORT_NBA_REPORT_CACHE = "excel_export:nba_report:%s";
-	String EXCEL_EXPORT_NBA_HISTORY_REPORT_CACHE = "excel_export:nba_history_report:%s";
-	String EXCEL_EXPORT_NB_REPORT_CACHE = "excel_export:nb_report:%s";
-	String EXCEL_EXPORT_NB_REVIEW_REPORT_CACHE = "excel_export:nb_review_report:%s";
-
-	String NEW_EXCEL_COMMON_REPORT_CACHE = "new_excel_export:common_report:%s";
-
-
-	Long DEF_REPORT_CREATING_TTL = 24L * 60 * 60 * 1000;
-
-	/**
-	 * 批量创建积分包缓存 package:history:#{deptId}:#{userId}
-	 */
-	String BATCH_PACKAGE_HISTORY = "package:history:%s:%s";
-
-	/**
-	 * 任务内容草稿
-	 */
-	String TASK_CONTENT_DRAFT = " typeid%s:userid%s";
-
-	/**
-	 * 用户签约认证响应队列key
-	 */
-	String USER_SIGN_CERT_RESPONSE_MQ_KEY = "USER:SIGN:CERT:RESPONSE:KEY:";
-
-	/**
-	 * 用户签约认证响应结果key
-	 */
-	String USER_SIGN_CERT_RESPONSE_KEY = "USER:SIGN:CERT:RESPONSE:KEY:";
-
-	/**
-	 * 绑卡换绑的新银行卡号
-	 */
-	String BIND_CARD_CONFIRM_NEW_BANK_CARD = "BIND:CARD:CONFIRM:NEW:BANK:CARD:";
-
-	/**
-	 * 自由职家签约结果回调key
-	 */
-	String OLADING_NOTIFY_KEY = "OLADING:NOTIFY:KEY:";
-
-	/**
-	 * 正启之星异步结果回调key
-	 */
-	String ZHEGN_QI_ZHI_XING_NOTIFY_KEY = "ZHEGN:QI:ZHI:XING:NOTIFY:KEY:";
-
-	/**
-	 * 汇企云异步结果回调key
-	 */
-	String HUI_QI_YUN_NOTIFY_KEY = "HUI:QI:YUN:NOTIFY:KEY:";
-
-	/**
-	 * 福建企赋签约异步结果回调key
-	 */
-	String QI_FU_SIGN_NOTIFY_KEY = "ZHONG:YI:YUN:SIGN:NOTIFY:KEY:";
-
-	/**
-	 * 福建企赋结算异步结果回调key
-	 */
-	String QI_FU_SETTLE_NOTIFY_KEY = "ZHONG:YI:YUN:SETTLE:NOTIFY:KEY:";
-
-	/**
-	 * 众蚁云签约异步结果回调key
-	 */
-	String ZHONG_YI_YUN_SIGN_NOTIFY_KEY = "ZHONG:YI:YUN:SIGN:NOTIFY:KEY:";
-
-	/**
-	 * 众蚁云结算异步结果回调key
-	 */
-	String ZHONG_YI_YUN_SETTLE_NOTIFY_KEY = "ZHONG:YI:YUN:SETTLE:NOTIFY:KEY:";
-
-	/**
-	 * 中智结算异步结果回调key
-	 */
-	String ZHONG_ZHI_SETTLE_NOTIFY_KEY = "ZHONG:ZHI:SETTLE:NOTIFY:KEY:";
-
-	/**
-	 * 薪事易结算回调key
-	 */
-	String XIN_SHI_YI_SETTLE_NOTIFY_KEY = "XIN:SHI:YI:SETTLE_NOTIFY_KEY:";
-
-	/**
-	 * 发起阿拉丁认证渠道记录key
-	 */
-	String OLADING_CERT_SEND_CHANNEL = "OLADING:CERT:SEND:CHANNEL:";
-
-	/**
-	 * 发起合创众盈认证渠道记录key
-	 */
-	String HE_CHUANG_CERT_SEND_CHANNEL = "HE:CHUANG:CERT:SEND:CHANNEL:";
-
-	/**
-	 * E证通获取认证结果key
-	 */
-	String EID_RESULT_KEY = "EID:RESULT:KEY:";
-
-	/**
-	 * 任务复审key
-	 */
-	String TASK_REVIEW_KEY = "TASK:REVIEW:KEY:";
-
-	/**
-	 * 任务审核key
-	 */
-	String TASK_APPROVAL_KEY = "TASK:APPROVAL:KEY:";
-
-	/**
-	 * 开票信息缓存key
-	 */
-	String INVOICE_DEPT_KEY = "INVOICE:DEPT:KEY:";
-
-	/**
-	 * 终止积分包key
-	 */
-	String TERMINATE_PACKAGE_KEY = "TERMINATE:PACKAGE:KEY:";
-
-	/**
-	 * 企业任务类型缓存key
-	 */
-	String ENT_TASK_CACHE_KEY = "ENT:TASK:CACHE:KEY:";
+    String ARTICLE_HOT_KEY = "article_hot_key";
+
+    String USER_NOTICE_KEY = "user_notice_key:";
+    String USER_ADD_NOTICE_KEY = "user_add_notice_key:";
+
+    String DRUG_ENT_PERSONAL_SHARE_KEY1 = "share_drug_ent:";
+    String DRUG_ENT_PERSONAL_SHARE_KEY2 = "userId:";
+
+    /**
+     * 文章每人分享限制缓存
+     */
+    String ARTICLE_PERSONAL_SHARE_KEY = "share_article:";
+
+    String SETTLE_PACKAGE_KEY = "settle_package_key:settle";
+
+    String EMAIL_KEY = "email_key:";
+
+    /**
+     * 税邦云登录key
+     */
+    String TAX_HELPER_LOGIN_KEY = "TAXHELPER:LOGIN_KEY:";
+
+    /**
+     * 问问风湿登陆缓存key
+     */
+    String WENWEN_LOGIN_KEY = "WENWEN_LOGIN_KEY";
+
+    /**
+     * 甲方缓存
+     */
+    String PARTY_A_CACHE_KEY = "PARTY_A_CACHE_KEY:";
+
+    /**
+     * 税邦云认证回调key
+     */
+    String TAX_HELPER_CHECK_FACE_NOTIFY_KEY = "TAXHELPER::CHECK::FACE::NOTIFY::KEY::";
+
+    /**
+     * 税邦云结算回调key
+     */
+    String TAX_HELPER_SETTLEMENT_NOTIFY_KEY = "TAXHELPER::SETTLEMENT::NOTIFY::KEY::";
+
+    /**
+     * 微信公众号access_token的key
+     */
+    String SYS_WX_ACCOUNT_TOKEN_KEY = "SYS::WX::ACCOUNT::TOKEN::KEY";
+
+    /**
+     * 微信公众号发送图文消息key
+     */
+    String SYS_WX_ACCOUNT_CALLBACK = "SYS::WX::ACCOUNT::CALLBACK";
+
+    /**
+     * 定时任务-每日统计GMVs的key
+     */
+    String QUARTZ_DAILY_GMVS_STATISTICS = "QUARTZ::DAILY::GMVS::STATISTICS";
+
+    /**
+     * 7天
+     */
+    int NOTICE_TIME = 7;
+
+    int SHARE_TIME = 1;
+
+    int SETTLE_TIME = 2;
+
+    /**
+     * 渠道限额缓存
+     */
+    String MONITORING_INDICATOR = "monitoring_indicator";
+
+    /**
+     * zb报告导出缓存
+     */
+    String EXPORT_ZB_REPORT_CACHE = "export:zb_report:%s";
+    String EXPORT_ZB_REVIEW_REPORT_CACHE = "export:zb_review_report:%s";
+    String EXPORT_NBA_REPORT_CACHE = "export:nba_report:%s";
+    String EXPORT_NBA_HISTORY_REPORT_CACHE = "export:nba_history_report:%s";
+    String EXPORT_NB_REPORT_CACHE = "export:nb_report:%s";
+    String EXPORT_NB_REVIEW_REPORT_CACHE = "export:nb_review_report:%s";
+
+    String NEW_DRUG_ENT_REPORT_CACHE = "new_export:drug_ent_report:%s";
+    String NEW_PERSONAL_REPORT_CACHE = "new_export:personal_report:%s";
+
+    /**
+     * excel报告导出缓存
+     */
+    String EXCEL_EXPORT_ZB_REPORT_CACHE = "excel_export:zb_report:%s";
+    String EXCEL_EXPORT_ZB_REVIEW_REPORT_CACHE = "excel_export:zb_review_report:%s";
+    String EXCEL_EXPORT_NBA_REPORT_CACHE = "excel_export:nba_report:%s";
+    String EXCEL_EXPORT_NBA_HISTORY_REPORT_CACHE = "excel_export:nba_history_report:%s";
+    String EXCEL_EXPORT_NB_REPORT_CACHE = "excel_export:nb_report:%s";
+    String EXCEL_EXPORT_NB_REVIEW_REPORT_CACHE = "excel_export:nb_review_report:%s";
+
+    String NEW_EXCEL_COMMON_REPORT_CACHE = "new_excel_export:common_report:%s";
+
+
+    Long DEF_REPORT_CREATING_TTL = 24L * 60 * 60 * 1000;
+
+    /**
+     * 批量创建积分包缓存 package:history:#{deptId}:#{userId}
+     */
+    String BATCH_PACKAGE_HISTORY = "package:history:%s:%s";
+
+    /**
+     * 任务内容草稿
+     */
+    String TASK_CONTENT_DRAFT = " typeid%s:userid%s";
+
+    /**
+     * 用户签约认证响应队列key
+     */
+    String USER_SIGN_CERT_RESPONSE_MQ_KEY = "USER:SIGN:CERT:RESPONSE:KEY:";
+
+    /**
+     * 用户签约认证响应结果key
+     */
+    String USER_SIGN_CERT_RESPONSE_KEY = "USER:SIGN:CERT:RESPONSE:KEY:";
+
+    /**
+     * 绑卡换绑的新银行卡号
+     */
+    String BIND_CARD_CONFIRM_NEW_BANK_CARD = "BIND:CARD:CONFIRM:NEW:BANK:CARD:";
+
+    /**
+     * 自由职家签约结果回调key
+     */
+    String OLADING_NOTIFY_KEY = "OLADING:NOTIFY:KEY:";
+
+    /**
+     * 正启之星异步结果回调key
+     */
+    String ZHEGN_QI_ZHI_XING_NOTIFY_KEY = "ZHEGN:QI:ZHI:XING:NOTIFY:KEY:";
+
+    /**
+     * 汇企云异步结果回调key
+     */
+    String HUI_QI_YUN_NOTIFY_KEY = "HUI:QI:YUN:NOTIFY:KEY:";
+
+    /**
+     * 福建企赋签约异步结果回调key
+     */
+    String QI_FU_SIGN_NOTIFY_KEY = "ZHONG:YI:YUN:SIGN:NOTIFY:KEY:";
+
+    /**
+     * 福建企赋结算异步结果回调key
+     */
+    String QI_FU_SETTLE_NOTIFY_KEY = "ZHONG:YI:YUN:SETTLE:NOTIFY:KEY:";
+
+    /**
+     * 众蚁云签约异步结果回调key
+     */
+    String ZHONG_YI_YUN_SIGN_NOTIFY_KEY = "ZHONG:YI:YUN:SIGN:NOTIFY:KEY:";
+
+    /**
+     * 众蚁云结算异步结果回调key
+     */
+    String ZHONG_YI_YUN_SETTLE_NOTIFY_KEY = "ZHONG:YI:YUN:SETTLE:NOTIFY:KEY:";
+
+    /**
+     * 中智结算异步结果回调key
+     */
+    String ZHONG_ZHI_SETTLE_NOTIFY_KEY = "ZHONG:ZHI:SETTLE:NOTIFY:KEY:";
+
+    /**
+     * 薪事易结算回调key
+     */
+    String XIN_SHI_YI_SETTLE_NOTIFY_KEY = "XIN:SHI:YI:SETTLE_NOTIFY_KEY:";
+
+    /**
+     * 发起阿拉丁认证渠道记录key
+     */
+    String OLADING_CERT_SEND_CHANNEL = "OLADING:CERT:SEND:CHANNEL:";
+
+    /**
+     * 发起合创众盈认证渠道记录key
+     */
+    String HE_CHUANG_CERT_SEND_CHANNEL = "HE:CHUANG:CERT:SEND:CHANNEL:";
+
+    /**
+     * E证通获取认证结果key
+     */
+    String EID_RESULT_KEY = "EID:RESULT:KEY:";
+
+    /**
+     * 任务复审key
+     */
+    String TASK_REVIEW_KEY = "TASK:REVIEW:KEY:";
+
+    /**
+     * 任务审核key
+     */
+    String TASK_APPROVAL_KEY = "TASK:APPROVAL:KEY:";
+
+    /**
+     * 开票信息缓存key
+     */
+    String INVOICE_DEPT_KEY = "INVOICE:DEPT:KEY:";
+
+    /**
+     * 终止积分包key
+     */
+    String TERMINATE_PACKAGE_KEY = "TERMINATE:PACKAGE:KEY:";
+
+    /**
+     * 企业任务类型缓存key
+     */
+    String ENT_TASK_CACHE_KEY = "ENT:TASK:CACHE:KEY:";
+
+    /**
+     * 用户忘记密码
+     */
+    String USER_FORGET_PWD_KEY = "USER:FORGET:PWD:KEY:";
 
 }

+ 5 - 4
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/UserPwd.java

@@ -3,22 +3,23 @@ package com.qunzhixinxi.hnqz.admin.api.dto;
 import com.qunzhixinxi.hnqz.common.core.entity.BaseEntity;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 
 @Data
 public class UserPwd {
 
 	//手机号
-	@NotEmpty(message = "用户名不能为空")
+	@NotBlank(message = "用户名不能为空")
 	private String userName;
 
-	@NotEmpty(message = "新密码不能为空", groups = {BaseEntity.Renew.class})
+	@NotBlank(message = "新密码不能为空", groups = {BaseEntity.Renew.class})
 	private String p1;
 
-	@NotEmpty(message = "新密码不能为空", groups = {BaseEntity.Renew.class})
+	@NotBlank(message = "新密码不能为空", groups = {BaseEntity.Renew.class})
 	private String p2;
 
-	@NotEmpty(message = "验证码不能为空")
+	@NotBlank(message = "验证码不能为空")
 	private String code;
 
 }

+ 12 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/MobileController.java

@@ -30,6 +30,18 @@ public class MobileController {
         return cnbgMobileService.sendSmsCode(mobile);
     }
 
+    /**
+     * 忘记密码
+     *
+     * @param mobile 手机号
+     * @return 发送结果
+     */
+    @Inner(value = false)
+    @GetMapping("/upd/{mobile}")
+    public R<Boolean> sendSmsCode1(@PathVariable String mobile) {
+        return cnbgMobileService.sendSmsCode(mobile);
+    }
+
 
     @GetMapping("/pc/{mobile}")
     public R<Boolean> sendSmsCodePc(@PathVariable String mobile) {

+ 23 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java

@@ -73,10 +73,13 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import static com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants.USER_FORGET_PWD_KEY;
+
 /**
  * 用户管理
  *
@@ -330,16 +333,34 @@ public class SysUserController {
     }
 
     /**
-     * 修改密码
+     * 忘记密码(更新)
      *
      * @param userPwd 用户信息
      * @return success/false
      */
     @Inner(value = false)
-    @SysLog("修改密码")
+    @SysLog("忘记密码(更新)")
     @PostMapping("/upd")
     public R<?> updatePwd(@RequestBody @Validated UserPwd userPwd) {
 
+        // 校验验证码是否准确
+        final String key = USER_FORGET_PWD_KEY + userPwd.getUserName();
+        if (Boolean.TRUE.equals(redisTemplate.hasKey(key))){
+            Object o = redisTemplate.opsForValue().get(key);
+           if (Objects.isNull(o)){
+               throw new RuntimeException("验证码不存在或者已过期");
+           }
+           String code = (String) o;
+
+           if (!StrUtil.equals(code, userPwd.getCode())){
+               throw new RuntimeException("验证码错误");
+           }
+
+        } else {
+            throw new RuntimeException("验证码不存在或者已过期");
+        }
+
+
         return userService.updatePwd(userPwd);
     }
 

+ 8 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/MobileService.java

@@ -18,6 +18,14 @@ public interface MobileService {
      */
     R<Boolean> sendSmsCode(String mobile);
 
+    /**
+     * 忘记密码发送验证码
+     *
+     * @param mobile mobile
+     * @return code
+     */
+    R<Boolean> sendSmsCode1(String mobile);
+
 
     /**
      * 发送手机验证码

+ 44 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/CnbgMobileServiceImpl.java

@@ -2,12 +2,15 @@ package com.qunzhixinxi.hnqz.admin.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.RegexPool;
+import cn.hutool.core.util.PhoneUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.ReUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.qunzhixinxi.hnqz.admin.api.dto.UserDTO;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysRole;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserMapper;
 import com.qunzhixinxi.hnqz.admin.service.MobileService;
@@ -19,15 +22,19 @@ import com.qunzhixinxi.hnqz.common.core.util.R;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
+import org.checkerframework.checker.regex.RegexUtil;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import static com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants.USER_FORGET_PWD_KEY;
+
 /**
  * 中生短信服务
  *
@@ -109,7 +116,7 @@ public class CnbgMobileServiceImpl implements MobileService {
             return R.ok(Boolean.FALSE, "请联系管理员为您开通账号");
         }
 
-        //if (CollUtil.isEmpty(userList)) {
+        // if (CollUtil.isEmpty(userList)) {
         //    log.info("请联系管理员为您开通账号:{}", mobile);
         //    return R.ok(Boolean.FALSE, "请联系管理员为您开通账号");
         //}
@@ -135,6 +142,42 @@ public class CnbgMobileServiceImpl implements MobileService {
         return R.ok(Boolean.TRUE, "验证码发送成功");
     }
 
+    /**
+     * 忘记密码发送验证码
+     *
+     * @param mobile mobile
+     * @return code
+     */
+    @Override
+    public R<Boolean> sendSmsCode1(String mobile) {
+
+        mobile = StrUtil.trim(mobile);
+        final String key = USER_FORGET_PWD_KEY + mobile;
+        Object codeObj = redisTemplate.opsForValue().get(key);
+
+        if (Objects.nonNull(codeObj)) {
+            log.info("手机号验证码未过期:{},{}", mobile, codeObj);
+            return R.ok(Boolean.FALSE, "验证码发送过频繁");
+        }
+
+        List<SysUser> sysUsers = userMapper.selectList(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, mobile));
+        if (CollUtil.isEmpty(sysUsers)) {
+            return R.ok(Boolean.FALSE, "用户不存在,请核实手机号");
+        }
+
+        boolean isMobile = PhoneUtil.isMobile(mobile);
+
+
+        String code = isMobile ? RandomUtil.randomNumbers(Integer.parseInt(SecurityConstants.CODE_SIZE)) : "5657";
+        if (isMobile) {
+            CnbgSendSmsUtils.sendSms1(sysUsers.get(0).getRealname(), mobile, code, "5");
+        }
+
+        log.debug("手机号生成验证码成功:{},{}", mobile, code);
+        redisTemplate.opsForValue().set(key, code, SecurityConstants.CODE_TIME, TimeUnit.SECONDS);
+        return R.ok(Boolean.TRUE, "验证码发送成功");
+    }
+
 
     /**
      * 发送手机验证码

+ 0 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserServiceImpl.java

@@ -31,7 +31,6 @@ import com.qunzhixinxi.hnqz.admin.api.dto.CommonUserDTO;
 import com.qunzhixinxi.hnqz.admin.api.model.input.UserCertificationInput;
 import com.qunzhixinxi.hnqz.admin.api.model.output.UserCertificationOutput;
 import com.qunzhixinxi.hnqz.admin.api.constant.enums.DelEnum;
-import com.qunzhixinxi.hnqz.admin.api.constant.enums.LockEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRelationMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptSubMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserMapper;

+ 27 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/util/CnbgSendSmsUtils.java

@@ -31,6 +31,7 @@ public class CnbgSendSmsUtils {
     private static final String CONTENT_TYPE = "application/json;charset=UTF-8";
     private static final String TIMESTAMP_PATTERN = "MMddHHmmss";
     private static final String CONTENT_PATTERN = "您好,%s,本次登录验证码为:%s,有效期%s分钟";
+    private static final String CONTENT_UPD_PATTERN = "您好,%s,忘记密码,验证码为:%s,有效期%s分钟";
 
     /**
      * 发送短信验证码
@@ -58,6 +59,32 @@ public class CnbgSendSmsUtils {
 
     }
 
+    /**
+     * 发送短信验证码
+     *
+     * @param realName   真实名称
+     * @param mobile     手机号
+     * @param randomCode 随机码
+     * @param expires    过期时间(分钟)
+     * @return 发送结果
+     */
+    public static String sendSms1(String realName, String mobile, String randomCode, String expires) {
+
+        String timestamp = getTimestamp();
+
+        Map<String, String> bodyMap = new HashMap<>();
+        bodyMap.put("userid", USER_ID);
+        bodyMap.put("pwd", encodePwd(timestamp));
+        bodyMap.put("mobile", mobile.trim());
+
+        String plainContent = String.format(CONTENT_UPD_PATTERN, realName, randomCode, expires);
+        bodyMap.put("content", encodeContent(plainContent));
+        bodyMap.put("timestamp", timestamp);
+
+        return HttpUtil.createPost(URL).contentType(CONTENT_TYPE).body(JSONUtil.toJsonStr(bodyMap)).execute().body();
+
+    }
+
 
     private static String getTimestamp() {
         return DateTimeFormatter.ofPattern(TIMESTAMP_PATTERN).format(LocalDateTime.now());