Przeglądaj źródła

add 小程序登录注册

he2802 3 lat temu
rodzic
commit
144fbb5c62
32 zmienionych plików z 936 dodań i 22 usunięć
  1. 9 0
      zhongzheng-admin/src/main/resources/application.yml
  2. 44 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/LoginController.java
  3. 49 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/SmsController.java
  4. 2 13
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserController.java
  5. 9 0
      zhongzheng-api/src/main/resources/application.yml
  6. 6 0
      zhongzheng-common/pom.xml
  7. 7 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/constant/Constants.java
  8. 54 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/SmsUtils.java
  9. 23 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java
  10. 52 1
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  11. 1 1
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java
  12. 12 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/bo/SmsAddBo.java
  13. 16 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/IAliSmsService.java
  14. 167 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/impl/AliSmsServiceImpl.java
  15. 18 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/vo/ResultBean.java
  16. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java
  17. 39 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/SmsAddBo.java
  18. 45 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/SmsEditBo.java
  19. 51 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/SmsQueryBo.java
  20. 43 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/domain/Sms.java
  21. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/mapper/SmsMapper.java
  22. 52 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/ISmsService.java
  23. 102 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/SmsServiceImpl.java
  24. 43 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/SmsVo.java
  25. 24 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserAppForgetBo.java
  26. 25 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserAppRegisterBo.java
  27. 2 6
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserEditBo.java
  28. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/User.java
  29. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java
  30. 18 0
      zhongzheng-system/src/main/resources/mapper/modules/base/SmsMapper.xml
  31. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml
  32. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserMapper.xml

+ 9 - 0
zhongzheng-admin/src/main/resources/application.yml

@@ -257,3 +257,12 @@ tencent:
   cloud:
     SecretId: AKIDd6XkjTw9D1atwkJceS2NSIuHPK1ThfOr
     SecretKey: GG2ZqrdCWcS6Yx72h6F7k7E4ey2qPnwq
+
+aliyun:
+  sms:
+    signName: 祥粤学校
+    registerTemplateCode: SMS_228670004
+    loginTemplateCode: SMS_228670005
+    forgetTemplateCode: SMS_228685033
+    accessKeyId: LTAIgC8O2WUXvXuR
+    accessKeySecret: 1yyCazuT1M6MruBXzgFjP0p9gdMlwX

+ 44 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/LoginController.java

@@ -0,0 +1,44 @@
+package com.zhongzheng.controller.user;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.modules.user.bo.UserAppRegisterBo;
+import com.zhongzheng.modules.user.service.IUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 客户端用户Controller
+ *
+ * @author hjl
+ * @date 2021-06-08
+ */
+@Api(value = "短信控制器", tags = {"短信控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/app/common/")
+public class LoginController extends BaseController {
+
+    private final IUserService iUserService;
+
+    /**
+     * 用户注册
+     */
+    @ApiOperation("小程序用户注册")
+    @PostMapping("/register_small")
+    public AjaxResult<Void> register_small(@RequestBody UserAppRegisterBo bo) {
+        return toAjax(iUserService.registerUser(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("小程序忘记密码")
+    @PostMapping("/register_forget")
+    public AjaxResult<Void> register_forget(@RequestBody UserAppRegisterBo bo) {
+        return toAjax(iUserService.registerUser(bo) ? 1 : 0);
+    }
+}

+ 49 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/SmsController.java

@@ -0,0 +1,49 @@
+package com.zhongzheng.controller.user;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.modules.alisms.bo.SmsAddBo;
+import com.zhongzheng.modules.alisms.service.IAliSmsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 客户端用户Controller
+ *
+ * @author hjl
+ * @date 2021-06-08
+ */
+@Api(value = "短信控制器", tags = {"短信控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/app/common/sms")
+public class SmsController extends BaseController {
+
+    private final IAliSmsService iSmsService;
+
+
+    @ApiOperation("获取注册短信")
+    @PostMapping("/register")
+    public AjaxResult register(@RequestBody SmsAddBo bo) {
+        iSmsService.sendRegisterSms(bo.getTel());
+        return AjaxResult.success();
+    }
+
+
+    @ApiOperation("获取注册短信")
+    @PostMapping("/login")
+    public AjaxResult login(@RequestBody SmsAddBo bo) {
+        iSmsService.sendLoginSms(bo.getTel());
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("获取忘记短信")
+    @PostMapping("/forget")
+    public AjaxResult forget(@RequestBody SmsAddBo bo) {
+        iSmsService.sendForgetSms(bo.getTel());
+        return AjaxResult.success();
+    }
+}

+ 2 - 13
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserController.java

@@ -3,33 +3,21 @@ package com.zhongzheng.controller.user;
 import com.zhongzheng.common.annotation.Log;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
-import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.enums.BusinessType;
 import com.zhongzheng.common.utils.ServletUtils;
-import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.framework.web.service.WxTokenService;
-import com.zhongzheng.modules.course.vo.CourseVo;
 import com.zhongzheng.modules.user.bo.RanKingUserQuery;
-import com.zhongzheng.modules.user.bo.UserAddBo;
 import com.zhongzheng.modules.user.bo.UserEditBo;
-import com.zhongzheng.modules.user.bo.UserQueryBo;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.vo.RanKingUser;
-import com.zhongzheng.modules.user.vo.UserBankRecordVo;
-import com.zhongzheng.modules.user.vo.UserStudyRecordVo;
-import com.zhongzheng.modules.user.vo.UserVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import java.math.BigDecimal;
-import java.util.Arrays;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -59,7 +47,6 @@ public class UserController extends BaseController {
     public AjaxResult<Void> edit(@RequestBody UserEditBo bo) throws IllegalAccessException {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         bo.setUserId(loginUser.getUser().getUserId());
-        bo.setNull();
         return toAjax(iUserService.updateByEditBo(bo) ? 1 : 0);
     }
 
@@ -94,4 +81,6 @@ public class UserController extends BaseController {
         return AjaxResult.success(list);
     }
 
+
+
 }

+ 9 - 0
zhongzheng-api/src/main/resources/application.yml

@@ -255,3 +255,12 @@ tencent:
   cloud:
     SecretId: AKIDd6XkjTw9D1atwkJceS2NSIuHPK1ThfOr
     SecretKey: GG2ZqrdCWcS6Yx72h6F7k7E4ey2qPnwq
+
+aliyun:
+  sms:
+    signName: 祥粤学校
+    registerTemplateCode: SMS_228670004
+    loginTemplateCode: SMS_228670005
+    forgetTemplateCode: SMS_228685033
+    accessKeyId: LTAIgC8O2WUXvXuR
+    accessKeySecret: 1yyCazuT1M6MruBXzgFjP0p9gdMlwX

+ 6 - 0
zhongzheng-common/pom.xml

@@ -67,6 +67,12 @@
             <version>3.10.2</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dysmsapi20170525</artifactId>
+            <version>2.0.7</version>
+        </dependency>
+
         <!-- 阿里JSON解析器 -->
         <dependency>
             <groupId>com.alibaba</groupId>

+ 7 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/constant/Constants.java

@@ -96,6 +96,13 @@ public class Constants
      */
     public static final String WX_TOKEN_PREFIX = "WX ";
 
+    public static final String REGISTER = "REGISTER-";
+    public static final String FORGET = "FORGET-";
+    public static final String LOGIN = "LOGIN-";
+
+    //默认头像
+    public static final String DEFAULT_AVATAR = "oss/images/avatar/20210623/1624414559368_44562477.png";
+
     /**
      * 令牌前缀
      */

+ 54 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/SmsUtils.java

@@ -0,0 +1,54 @@
+package com.zhongzheng.common.utils;
+
+import com.aliyun.tea.*;
+import com.aliyun.dysmsapi20170525.*;
+import com.aliyun.dysmsapi20170525.models.*;
+import com.aliyun.teaopenapi.*;
+import com.aliyun.teaopenapi.models.*;
+
+public class SmsUtils {
+    //产品名称:云通信短信API产品,开发者无需替换
+    static final String product = "Dysmsapi";
+    //产品域名,开发者无需替换
+    static final String domain = "dysmsapi.aliyuncs.com";
+
+    // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
+    static final String accessKeyId = "yourAccessKeyId";
+    static final String accessKeySecret = "yourAccessKeySecret";
+
+    public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
+        Config config = new Config()
+                // 您的AccessKey ID
+                .setAccessKeyId(accessKeyId)
+                // 您的AccessKey Secret
+                .setAccessKeySecret(accessKeySecret);
+        // 访问的域名
+        config.endpoint = "dysmsapi.aliyuncs.com";
+        return new com.aliyun.dysmsapi20170525.Client(config);
+    }
+
+    public static SendSmsResponse sendSms(String tel,String signName,String templateCode,String Param,String accessKeyId,String accessKeySecret) throws  Exception {
+        //可自助调整超时时间
+      /*  System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
+        System.setProperty("sun.net.client.defaultReadTimeout", "10000");*/
+
+        com.aliyun.dysmsapi20170525.Client client = SmsUtils.createClient(accessKeyId, accessKeySecret);
+        SendSmsRequest request = new SendSmsRequest();
+        //必填:待发送手机号
+        request.setPhoneNumbers(tel);
+        //必填:短信签名-可在短信控制台中找到
+        request.setSignName(signName);
+        //必填:短信模板-可在短信控制台中找到
+        request.setTemplateCode(templateCode);
+        //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
+        //"{\"name\":\"Tom\", \"code\":\"123\"}"
+        request.setTemplateParam(Param);
+        //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
+        //request.setSmsUpExtendCode("90997");
+        //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
+    //    request.setOutId("yourOutId");
+        SendSmsResponse sendSmsResponse = client.sendSms(request);
+
+        return sendSmsResponse;
+    }
+}

+ 23 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java

@@ -0,0 +1,23 @@
+package com.zhongzheng.common.utils;
+
+import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
+import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
+import com.aliyun.teaopenapi.models.Config;
+
+import java.util.Random;
+
+public class ToolsUtils {
+    /**
+     * 获取模块编码参数
+     */
+    public static String getSmsCode()
+    {
+        Random random = new Random();
+        String result="";
+        for (int i=0;i<6;i++)
+        {
+            result+=random.nextInt(10);
+        }
+       return result;
+    }
+}

+ 52 - 1
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -9,8 +9,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
+import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
-import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.*;
+import com.zhongzheng.common.utils.ip.IpUtils;
 import com.zhongzheng.modules.collect.domain.CollectBank;
 import com.zhongzheng.modules.collect.domain.CollectCourse;
 import com.zhongzheng.modules.collect.domain.CollectNote;
@@ -21,6 +24,7 @@ import com.zhongzheng.modules.course.domain.MajorCategory;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.UserBankRecord;
+import com.zhongzheng.modules.user.domain.UserSchoolInfo;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.modules.user.mapper.UserMapper;
 import com.zhongzheng.modules.user.service.IUserService;
@@ -38,6 +42,7 @@ import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.sql.Timestamp;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 
@@ -70,6 +75,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     @Autowired
     private UserMapper userMapper;
 
+    @Autowired
+    private RedisCache redisCache;
+
 
     @Override
     public UserVo queryById(Long userId) {
@@ -370,6 +378,49 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return baseMapper.selectLookNum(userId);
     }
 
+    @Override
+    public Boolean registerUser(UserAppRegisterBo bo) {
+        if(bo.getTel()==null){
+            throw new CustomException("手机号不能为空");
+        }
+        if(bo.getPwd()==null){
+            throw new CustomException("密码不能为空");
+        }
+        String key = Constants.REGISTER + bo.getTel();
+        String code =  redisCache.getCacheObject(key);
+        if(code==null){
+            throw new CustomException("验证码错误");
+        }
+        if(!code.equals(bo.getCode())){
+            throw new CustomException("验证码错误");
+        }
+        User user = getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getTelphone,bo.getTel()).last("limit 1"));
+        if(Validator.isNotNull(user)){
+            throw new CustomException("该手机号已注册");
+        }
+        User inertData = new User();
+        inertData.setTelphone(bo.getTel());
+        //隐藏手机号作为初始昵称
+        inertData.setNickname(TelPhoneUtils.hideTelPhone(bo.getTel()));
+        //雪花算法产生账号ID
+        SnowflakeIdUtils idWorker = new SnowflakeIdUtils(3, 1);
+        inertData.setUserAccount(String.valueOf(idWorker.nextId()));
+        inertData.setSex(1);
+        inertData.setStatus(1);
+        inertData.setRegisterPlat("1");
+        inertData.setAvatar(Constants.DEFAULT_AVATAR);
+        inertData.setLastLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
+        inertData.setLastLoginTime(DateUtils.getNowTime());
+        inertData.setCreateTime(DateUtils.getNowTime());
+        inertData.setUpdateTime(DateUtils.getNowTime());
+        inertData.setPassword(SecurityUtils.encryptPassword(bo.getPwd()));
+        if(!save(inertData)){
+            throw new CustomException("注册失败");
+        }
+        return true;
+    }
+
     /**
      * 获取当前月第一天
      * @param month

+ 1 - 1
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java

@@ -146,7 +146,7 @@ public class WxLoginService
         bo.setSex(1);
         bo.setStatus(1);
         bo.setRegisterPlat("1");
-        bo.setAvatar("oss/images/avatar/20210623/1624414559368_44562477.png");
+        bo.setAvatar(Constants.DEFAULT_AVATAR);
         bo.setLastLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
         bo.setLastLoginTime(DateUtils.getNowTime());
         bo.setCreateTime(DateUtils.getNowTime());

+ 12 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/bo/SmsAddBo.java

@@ -0,0 +1,12 @@
+package com.zhongzheng.modules.alisms.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class SmsAddBo {
+    @ApiModelProperty("手机号")
+    private String tel;
+    @ApiModelProperty("唯一识别码")
+    private String uuid;
+}

+ 16 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/IAliSmsService.java

@@ -0,0 +1,16 @@
+package com.zhongzheng.modules.alisms.service;
+
+
+import com.zhongzheng.modules.alisms.vo.ResultBean;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface IAliSmsService {
+    ResultBean sendSms(String tel,String param);
+
+    Boolean sendRegisterSms(String tel);
+
+    Boolean sendForgetSms(String tel);
+
+    Boolean sendLoginSms(String tel);
+}

+ 167 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/impl/AliSmsServiceImpl.java

@@ -0,0 +1,167 @@
+package com.zhongzheng.modules.alisms.service.impl;
+
+
+import cn.hutool.core.lang.Validator;
+import com.alibaba.fastjson.JSON;
+import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.core.redis.RedisCache;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.SmsUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.common.utils.ip.IpUtils;
+import com.zhongzheng.modules.alisms.service.IAliSmsService;
+import com.zhongzheng.modules.alisms.vo.ResultBean;
+import com.zhongzheng.modules.base.bo.SmsAddBo;
+import com.zhongzheng.modules.base.service.ISmsService;
+import com.zhongzheng.modules.user.domain.User;
+import com.zhongzheng.modules.user.service.IUserService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+
+@Service
+public class AliSmsServiceImpl implements IAliSmsService {
+    private static final Logger LOGGER = LoggerFactory.getLogger(AliSmsServiceImpl.class);
+
+    @Value("${aliyun.sms.signName}")
+    private String SIGNNAME;
+    @Value("${aliyun.sms.registerTemplateCode}")
+    private String REGISTERTEMPLATECODE;
+    @Value("${aliyun.sms.accessKeyId}")
+    private String ACCESSKEYID;
+    @Value("${aliyun.sms.accessKeySecret}")
+    private String ACCESSKEYSECRET;
+    @Value("${aliyun.sms.loginTemplateCode}")
+    private String LOGINTEMPLATECODE;
+    @Value("${aliyun.sms.forgetTemplateCode}")
+    private String FORGETTEMPLATECODE;
+
+    @Autowired
+    private IUserService iUserService;
+
+    @Autowired
+    private RedisCache redisCache;
+
+    @Autowired
+    private ISmsService iSmsService;
+
+
+    @Override
+    public ResultBean sendSms(String tel, String param) {
+        try{
+            SendSmsResponse response = SmsUtils.sendSms(tel,SIGNNAME,REGISTERTEMPLATECODE,param,ACCESSKEYID,ACCESSKEYSECRET);
+            System.out.println(response);
+        }catch (Exception e){
+
+        }
+
+        return null;
+    }
+
+    @Override
+    public Boolean sendRegisterSms(String tel) {
+        if(tel==null){
+            throw new CustomException("手机号码不能为空");
+        }
+        User user = iUserService.getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getTelphone,tel).last("limit 1"));
+        if(Validator.isNotNull(user)){
+            throw new CustomException("该手机号已注册");
+        }
+        String code = ToolsUtils.getSmsCode();
+        String key = Constants.REGISTER + tel;
+        redisCache.setCacheObject(key,code,5, TimeUnit.MINUTES);//5分钟
+        try{
+            Map<String,Object> param = new HashMap<>();
+            param.put("code",code);
+            SendSmsResponse response = SmsUtils.sendSms(tel,SIGNNAME,REGISTERTEMPLATECODE, JSON.toJSONString(param),ACCESSKEYID,ACCESSKEYSECRET);
+            System.out.println(response.getBody().getMessage());
+            if(response.getBody().getMessage().equals("OK")){
+                SmsAddBo smsAddBo = new SmsAddBo();
+                smsAddBo.setCode(code);
+                smsAddBo.setTel(tel);
+                smsAddBo.setType(1L);
+                smsAddBo.setIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
+                iSmsService.insertByAddBo(smsAddBo);
+                return true;
+            }
+        }catch (Exception e){
+            throw new CustomException(e.getMessage());
+        }
+        return false;
+    }
+
+    @Override
+    public Boolean sendForgetSms(String tel) {
+        if(tel==null){
+            throw new CustomException("手机号码不能为空");
+        }
+        User user = iUserService.getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getTelphone,tel).last("limit 1"));
+        if(Validator.isEmpty(user)){
+            throw new CustomException("该手机号未注册");
+        }
+        String code = ToolsUtils.getSmsCode();
+        String key = Constants.FORGET + tel;
+        redisCache.setCacheObject(key,code,5, TimeUnit.MINUTES);//5分钟
+        try{
+            Map<String,Object> param = new HashMap<>();
+            param.put("code",code);
+            SendSmsResponse response = SmsUtils.sendSms(tel,SIGNNAME,FORGETTEMPLATECODE, JSON.toJSONString(param),ACCESSKEYID,ACCESSKEYSECRET);
+            if(response.getBody().getMessage().equals("OK")){
+                SmsAddBo smsAddBo = new SmsAddBo();
+                smsAddBo.setCode(code);
+                smsAddBo.setTel(tel);
+                smsAddBo.setType(2L);
+                smsAddBo.setIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
+                iSmsService.insertByAddBo(smsAddBo);
+                return true;
+            }
+        }catch (Exception e){
+            throw new CustomException(e.getMessage());
+        }
+        return false;
+    }
+
+    @Override
+    public Boolean sendLoginSms(String tel) {
+        if(tel==null){
+            throw new CustomException("手机号码不能为空");
+        }
+        User user = iUserService.getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getTelphone,tel).last("limit 1"));
+        if(Validator.isEmpty(user)){
+            throw new CustomException("该手机号未注册");
+        }
+        String code = ToolsUtils.getSmsCode();
+        String key = Constants.LOGIN + tel;
+        redisCache.setCacheObject(key,code,5, TimeUnit.MINUTES);//5分钟
+        try{
+            Map<String,Object> param = new HashMap<>();
+            param.put("code",code);
+            SendSmsResponse response = SmsUtils.sendSms(tel,SIGNNAME,LOGINTEMPLATECODE, JSON.toJSONString(param),ACCESSKEYID,ACCESSKEYSECRET);
+            if(response.getBody().getMessage().equals("OK")){
+                SmsAddBo smsAddBo = new SmsAddBo();
+                smsAddBo.setCode(code);
+                smsAddBo.setTel(tel);
+                smsAddBo.setType(3L);
+                smsAddBo.setIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
+                iSmsService.insertByAddBo(smsAddBo);
+                return true;
+            }
+        }catch (Exception e){
+            throw new CustomException(e.getMessage());
+        }
+        return false;
+    }
+}

+ 18 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/vo/ResultBean.java

@@ -0,0 +1,18 @@
+package com.zhongzheng.modules.alisms.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel("【oss】视图对象")
+public class ResultBean {
+
+    private Object resultContent;
+
+    public ResultBean(Object resultContent){
+        this.resultContent = resultContent;
+    }
+
+
+
+}

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java

@@ -199,6 +199,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         if (Validator.isNull(questionList) || questionList.size() == 0) {
             throw new CustomException("导入数据不能为空!");
         }
+
         String errorLog = "";
         String importNo = ServletUtils.getEncoded("IMPORT");
         int i=10;
@@ -274,7 +275,6 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
             errorLog = insertByAddBoImport(bo,errorLog,i);
             i++;
         }
-        System.out.println(errorLog);
         return errorLog;
     }
 
@@ -452,6 +452,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
     }
 
     public Long findKnowledgeId(String knowledge){
+
         if(knowledge!=null){
             String key = "KNO_"+knowledge;
             Long value = redisCache.getCacheObject(key);

+ 39 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/SmsAddBo.java

@@ -0,0 +1,39 @@
+package com.zhongzheng.modules.base.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 短信添加对象 sms
+ *
+ * @author hjl
+ * @date 2021-11-26
+ */
+@Data
+@ApiModel("短信添加对象")
+public class SmsAddBo {
+
+    /** 手机号 */
+    @ApiModelProperty("手机号")
+    private String tel;
+    /** 验证码 */
+    @ApiModelProperty("验证码")
+    private String code;
+    /** 业务短信类型 1注册 2忘记 3登录 */
+    @ApiModelProperty("业务短信类型 1注册 2忘记 3登录")
+    private Long type;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    private Long createTime;
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+    /** IP地址 */
+    @ApiModelProperty("IP地址")
+    private String ip;
+}

+ 45 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/SmsEditBo.java

@@ -0,0 +1,45 @@
+package com.zhongzheng.modules.base.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+/**
+ * 短信编辑对象 sms
+ *
+ * @author hjl
+ * @date 2021-11-26
+ */
+@Data
+@ApiModel("短信编辑对象")
+public class SmsEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long id;
+
+    /** 手机号 */
+    @ApiModelProperty("手机号")
+    private String tel;
+
+    /** 验证码 */
+    @ApiModelProperty("验证码")
+    private String code;
+
+    /** 业务短信类型 1注册 2忘记 3登录 */
+    @ApiModelProperty("业务短信类型 1注册 2忘记 3登录")
+    private Long type;
+
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+
+
+    /** IP地址 */
+    @ApiModelProperty("IP地址")
+    private String ip;
+
+}

+ 51 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/SmsQueryBo.java

@@ -0,0 +1,51 @@
+package com.zhongzheng.modules.base.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 短信分页查询对象 sms
+ *
+ * @author hjl
+ * @date 2021-11-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("短信分页查询对象")
+public class SmsQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 手机号 */
+	@ApiModelProperty("手机号")
+	private String tel;
+	/** 验证码 */
+	@ApiModelProperty("验证码")
+	private String code;
+	/** 业务短信类型 1注册 2忘记 3登录 */
+	@ApiModelProperty("业务短信类型 1注册 2忘记 3登录")
+	private Long type;
+	/** IP地址 */
+	@ApiModelProperty("IP地址")
+	private String ip;
+}

+ 43 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/domain/Sms.java

@@ -0,0 +1,43 @@
+package com.zhongzheng.modules.base.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 短信对象 sms
+ *
+ * @author hjl
+ * @date 2021-11-26
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("sms")
+public class Sms implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** 手机号 */
+    private String tel;
+    /** 验证码 */
+    private String code;
+    /** 业务短信类型 1注册 2忘记 3登录 */
+    private Long type;
+    /** 创建时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** IP地址 */
+    private String ip;
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/mapper/SmsMapper.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.base.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.base.domain.Sms;
+
+/**
+ * 短信Mapper接口
+ *
+ * @author hjl
+ * @date 2021-11-26
+ */
+public interface SmsMapper extends BaseMapper<Sms> {
+
+}

+ 52 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/ISmsService.java

@@ -0,0 +1,52 @@
+package com.zhongzheng.modules.base.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.base.bo.SmsAddBo;
+import com.zhongzheng.modules.base.bo.SmsEditBo;
+import com.zhongzheng.modules.base.bo.SmsQueryBo;
+import com.zhongzheng.modules.base.domain.Sms;
+import com.zhongzheng.modules.base.vo.SmsVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 短信Service接口
+ *
+ * @author hjl
+ * @date 2021-11-26
+ */
+public interface ISmsService extends IService<Sms> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	SmsVo queryById(Long id);
+
+	/**
+	 * 查询列表
+	 */
+	List<SmsVo> queryList(SmsQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入短信
+	 * @param bo 短信新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(SmsAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改短信
+	 * @param bo 短信编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(SmsEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 102 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/SmsServiceImpl.java

@@ -0,0 +1,102 @@
+package com.zhongzheng.modules.base.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.base.bo.SmsAddBo;
+import com.zhongzheng.modules.base.bo.SmsEditBo;
+import com.zhongzheng.modules.base.bo.SmsQueryBo;
+import com.zhongzheng.modules.base.domain.Sms;
+import com.zhongzheng.modules.base.mapper.SmsMapper;
+import com.zhongzheng.modules.base.service.ISmsService;
+import com.zhongzheng.modules.base.vo.SmsVo;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 短信Service业务层处理
+ *
+ * @author hjl
+ * @date 2021-11-26
+ */
+@Service
+public class SmsServiceImpl extends ServiceImpl<SmsMapper, Sms> implements ISmsService {
+
+    @Override
+    public SmsVo queryById(Long id){
+        Sms db = this.baseMapper.selectById(id);
+        return BeanUtil.toBean(db, SmsVo.class);
+    }
+
+    @Override
+    public List<SmsVo> queryList(SmsQueryBo bo) {
+        LambdaQueryWrapper<Sms> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StrUtil.isNotBlank(bo.getTel()), Sms::getTel, bo.getTel());
+        lqw.eq(StrUtil.isNotBlank(bo.getCode()), Sms::getCode, bo.getCode());
+        lqw.eq(bo.getType() != null, Sms::getType, bo.getType());
+        lqw.eq(StrUtil.isNotBlank(bo.getIp()), Sms::getIp, bo.getIp());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<SmsVo> entity2Vo(Collection<Sms> collection) {
+        List<SmsVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, SmsVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<Sms> page = (Page<Sms>)collection;
+            Page<SmsVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(SmsAddBo bo) {
+        Sms add = BeanUtil.toBean(bo, Sms.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(SmsEditBo bo) {
+        Sms update = BeanUtil.toBean(bo, Sms.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(Sms entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 43 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/SmsVo.java

@@ -0,0 +1,43 @@
+package com.zhongzheng.modules.base.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 短信视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2021-11-26
+ */
+@Data
+@ApiModel("短信视图对象")
+public class SmsVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long id;
+
+	/** 手机号 */
+	@Excel(name = "手机号")
+	@ApiModelProperty("手机号")
+	private String tel;
+	/** 验证码 */
+	@Excel(name = "验证码")
+	@ApiModelProperty("验证码")
+	private String code;
+	/** 业务短信类型 1注册 2忘记 3登录 */
+	@Excel(name = "业务短信类型 1注册 2忘记 3登录")
+	@ApiModelProperty("业务短信类型 1注册 2忘记 3登录")
+	private Long type;
+	/** IP地址 */
+	@Excel(name = "IP地址")
+	@ApiModelProperty("IP地址")
+	private String ip;
+}

+ 24 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserAppForgetBo.java

@@ -0,0 +1,24 @@
+package com.zhongzheng.modules.user.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 客户端用户编辑对象 user
+ *
+ * @author ruoyi
+ * @date 2021-06-08
+ */
+@Data
+@ApiModel("客户端用户注册对象")
+public class UserAppForgetBo {
+    @ApiModelProperty("手机号")
+    private String tel;
+    @ApiModelProperty("密码")
+    private String pwd;
+    @ApiModelProperty("验证码")
+    private String code;
+
+}

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserAppRegisterBo.java

@@ -0,0 +1,25 @@
+package com.zhongzheng.modules.user.bo;
+
+import com.zhongzheng.common.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 客户端用户编辑对象 user
+ *
+ * @author ruoyi
+ * @date 2021-06-08
+ */
+@Data
+@ApiModel("客户端用户注册对象")
+public class UserAppRegisterBo {
+    @ApiModelProperty("手机号")
+    private String tel;
+    @ApiModelProperty("密码")
+    private String pwd;
+    @ApiModelProperty("验证码")
+    private String code;
+
+}

+ 2 - 6
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserEditBo.java

@@ -41,8 +41,8 @@ public class UserEditBo {
     private String idCard;*/
 
     /** 手机号码 */
-    @ApiModelProperty("手机号码")
-    private String telphone;
+  /*  @ApiModelProperty("手机号码")
+    private String telphone;*/
 
     /** 用户等级 */
     @ApiModelProperty("用户等级")
@@ -184,8 +184,4 @@ public class UserEditBo {
     @ApiModelProperty("1在职 0离职")
     private Long jobStatus;
 
-
-    public void setNull(){
-        this.setTelphone(null);
-    }
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/User.java

@@ -179,4 +179,7 @@ private static final long serialVersionUID=1L;
     /** 1在职 0离职 */
     private Long jobStatus;
 
+    /** 密码 */
+    private String password;
+
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java

@@ -73,4 +73,6 @@ public interface IUserService extends IService<User> {
     Integer selectUserNum(Integer grade);
 
     Integer getLookNum(Long userId);
+
+	Boolean registerUser(UserAppRegisterBo bo);
 }

+ 18 - 0
zhongzheng-system/src/main/resources/mapper/modules/base/SmsMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.modules.base.mapper.SmsMapper">
+
+    <resultMap type="com.zhongzheng.modules.base.domain.Sms" id="SmsResult">
+        <result property="id" column="id"/>
+        <result property="tel" column="tel"/>
+        <result property="code" column="code"/>
+        <result property="type" column="type"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="ip" column="ip"/>
+    </resultMap>
+
+
+</mapper>

+ 1 - 0
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml

@@ -152,6 +152,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="studyStartTime != null and studyStartTime != '' and studyEndTime != null and studyEndTime != ''">
             and #{studyStartTime} BETWEEN g.validity_start_time and g.validity_end_time or #{studyEndTime} BETWEEN g.validity_start_time and g.validity_end_time
         </if>
+        ORDER BY g.update_time DESC
     </select>
 
     <select id="selectDetail" parameterType="Long" resultMap="GoodsResultVo">

+ 1 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserMapper.xml

@@ -46,6 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="inviteUserAccount" column="invite_user_account"/>
         <result property="courseNum" column="course_num"/>
         <result property="studyTime" column="study_time"/>
+        <result property="password" column="password"/>
     </resultMap>