Administrator 2 лет назад
Родитель
Сommit
419f560943

+ 19 - 6
ruoyi-admin/src/main/java/com/ruoyi/web/controller/index/IndexController.java

@@ -6,6 +6,7 @@ import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.enums.BusinessType;
@@ -16,6 +17,7 @@ import com.ruoyi.framework.web.service.SysLoginService;
 import com.ruoyi.system.domain.KaoqinConfig;
 import com.ruoyi.system.domain.KaoqinRecord;
 import com.ruoyi.system.service.IKaoqinRecordService;
+import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -53,29 +55,34 @@ public class IndexController extends BaseController {
 
     @Autowired
     private SysLoginService loginService;
+
+    @Autowired
+    private ISysDeptService deptService;
     /**
      * app新增用户
      */
     @PostMapping
     public AjaxResult add(@Validated @RequestBody SysUser user) {
-        if (!user.getCode().equals(redisCache.getCacheObject(CacheConstants.SMS_CODE_KEY+user.getPhonenumber()))) {
-            return error("新增用户'" + user.getUserName() + "'失败,短信验证码错误");
-        }
         if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) {
             return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
         } else if (StringUtils.isNotEmpty(user.getPhonenumber())
                 && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
             return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
-        }/* else if ("1".equals(checkStrongPwd(user.getPassword()))) {
+        }
+        if (!user.getCode().equals(redisCache.getCacheObject(CacheConstants.SMS_CODE_KEY+user.getPhonenumber()))) {
+            return error("新增用户'" + user.getUserName() + "'失败,短信验证码错误");
+        }
+   /* else if ("1".equals(checkStrongPwd(user.getPassword()))) {
             return AjaxResult.error("密码必须包含数字、大小写字母、特殊符号且大于8位");
         }*/
         user.setCreateBy("APP");
         AjaxResult ajax = AjaxResult.success();
         // 生成令牌
-        user.setCreateBy(getUsername());
+        user.setCreateBy(user.getUserName());
         //生成一个密码
         //String password = randomPassword();
         String password = user.getUserName()+"Abc#";
+        user.setPassword(password);
         //todo 密码 要发送短信给用户
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         if (userService.insertUser(user) > 0){
@@ -130,7 +137,13 @@ public class IndexController extends BaseController {
      */
     @PostMapping("/backstage")
     public AjaxResult backstage(@RequestBody KaoqinRecord kaoQinRecord) {
-        //查询该部门所有人员
+        //查询我部门和我部门下所有部门 去部门表中找到所有祖籍列表包含我的的部门id+自己组成
+        Long deptId = SecurityUtils.getDeptId();
+        SysDept sysDept= new SysDept();
+        sysDept.setDeptId(deptId);
+        String ancestors = deptService.selectDeptListById(sysDept);
+        kaoQinRecord.setAncestors(ancestors);
+        //查询该部门及以下所有人员
         Integer total = userService.selectUserCount(kaoQinRecord);
         //查询打卡人员
         List<KaoqinRecord> kaoqinRecords = kaoqinRecordService.selectKaoqinRecordList(kaoQinRecord);

+ 56 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/sms/SendSmsController.java

@@ -119,10 +119,9 @@ public class SendSmsController extends BaseController
 
 
     /**
-     * 单独发送短信的接口
+     * 单独发送验证码短信的接口
      */
     @PostMapping("/sendSmsOnly")
-    @RateLimiter(count = 50, time = 60)
     public AjaxResult sendSms(@RequestBody SendSms sendSms) {
         String phone = sendSms.getPhone();
         if (StringUtils.isBlank(phone)) {
@@ -173,6 +172,61 @@ public class SendSmsController extends BaseController
         return AjaxResult.error("当前注册人数过多,请稍后重试");
     }
 
+
+    /**
+     * 单独发送发送密码短信的接口
+     */
+    @PostMapping("/sendSmsPassword")
+    public AjaxResult sendSmsPassword(@RequestBody SendSms sendSms) {
+        String phone = sendSms.getPhone();
+        if (StringUtils.isBlank(phone)) {
+            return AjaxResult.error("未获取到手机号");
+        }
+        try {
+            // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
+            com.aliyun.dysmsapi20170525.Client client = SendSmsUtils.createClient();
+            //获取用户验证码
+            String verifyKey = CacheConstants.SMS_CODE_KEY + sendSms.getPhone();
+            String codeYan = SendSmsUtils.getCode(4);
+            String smsCode = "{\"code\":\""+codeYan+"\"}";
+            com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
+                    //手机号码
+                    .setPhoneNumbers(phone)
+                    //短信签名名称。潜山市数据资源局
+                    .setSignName("中新云")
+                    //短信模板CODE
+                    .setTemplateCode("SMS_232893584")
+                    //短信模板变量对应的实际值{"name": code}
+                    .setTemplateParam(smsCode);
+            try {
+                sendSms.setContent("【中新云】您的验证码"+smsCode+",该验证码10分钟内有效,请勿泄漏于他人!");
+                // 复制代码运行请自行打印 API 的返回值
+                System.out.println("发送短信"+"【中新云】您的验证码"+smsCode+",该验证码10分钟内有效,请勿泄漏于他人!");
+                SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, new RuntimeOptions());
+                String code = sendSmsResponse.getBody().code;
+                System.out.println(code);
+                if ("OK".equals(code)) {
+                    sendSms.setStatus("发送成功");
+                    redisCache.setCacheObject(verifyKey, codeYan, Constants.SMS_EXPIRATION, TimeUnit.MINUTES);
+                    sendSmsService.insertSendSms(sendSms);
+                    return AjaxResult.success("发送成功");
+                } else {
+                    sendSms.setStatus("发送失败");
+                    sendSmsService.insertSendSms(sendSms);
+                    return AjaxResult.error(sendSmsResponse.getBody().message);
+                }
+            } catch (TeaException error) {
+                // 如有需要,请打印 error
+                com.aliyun.teautil.Common.assertAsString(error.message);
+            }
+        } catch (Exception _error) {
+            TeaException error = new TeaException(_error.getMessage(), _error);
+            // 如有需要,请打印 error
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        }
+        return AjaxResult.error("当前注册人数过多,请稍后重试");
+    }
+
     /**
      * 获取四位数短信验证码
      * @param sendSms

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -75,7 +75,7 @@ public class SysLoginController
             // 生成令牌
             String token = loginService.loginApp(loginBody.getUsername(),  loginBody.getCode() );
             if ("error".equals(token)){
-                return AjaxResult.error("短信验证码错误");
+                return AjaxResult.error("短信验证码错误或已失效");
             }
             ajax.put(Constants.TOKEN, token);
         }

+ 2 - 2
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java

@@ -153,11 +153,11 @@ public class SysLoginService
     public String loginApp(String username,  String code)
     {
         // 用户验证
-/*        String verifyKey = CacheConstants.SMS_CODE_KEY + username;
+        String verifyKey = CacheConstants.SMS_CODE_KEY + username;
         String codeApp = redisCache.getCacheObject(verifyKey);
         if (!code.equals(codeApp)){
             return "error";
-        }*/
+        }
         LoginUser loginUser = (LoginUser)userDetailsService.loadUserByUsernameApp(username);
         AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
         recordLoginInfo(loginUser.getUserId());

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java

@@ -123,4 +123,6 @@ public interface ISysDeptService
     public int deleteDeptById(Long deptId);
 
     List<TreeSelect> selectDeptTreeNowList(SysDept dept);
+
+    String selectDeptListById(SysDept dept);
 }

+ 19 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java

@@ -313,6 +313,25 @@ public class SysDeptServiceImpl implements ISysDeptService
         return buildDeptTreeSelect(depts);
     }
 
+    //统计 接口获取本部门和本部门下所有 部门id
+    @Override
+    public String selectDeptListById(SysDept dept) {
+        StringBuilder sb = new StringBuilder();
+        List<SysDept> sysDepts = deptMapper.selectDeptTreeNowList(dept);
+        if (sysDepts != null && sysDepts.size() > 0){
+            for (SysDept sysDept : sysDepts) {
+                Long deptId = sysDept.getDeptId();
+                sb.append(deptId).append(",");
+            }
+        }
+        if (sb.length() == 0){
+            sb.append(dept.getDeptId());
+        }else {
+            sb.substring(0,sb.length()-1);
+        }
+        return sb.toString();
+    }
+
     /**
      * 递归列表
      */

+ 1 - 3
ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml

@@ -160,7 +160,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<include refid="selectDeptVo"/>
 		where d.del_flag = '0'
 		<if test="deptId != null and deptId != 0">
-			AND (dept_id = #{deptId} or ancestors like concat('%', #{deptId}, '%'))
+			AND (dept_id = #{deptId} or find_in_set(#{deptId}, ancestors))
 		</if>
 		<if test="parentId != null and parentId != 0">
 			AND parent_id = #{parentId}
@@ -168,8 +168,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<if test="status != null and status != ''">
 			AND status = #{status}
 		</if>
-		<!-- 数据范围过滤 -->
-		${params.dataScope}
 		order by d.parent_id, d.order_num
 	</select>