Bladeren bron

APP:修改短信验证使用多线程,修改登录接口,添加家族成员树接口

Alex 4 jaren geleden
bovenliggende
commit
20f9560029

+ 4 - 2
ruoyi-app/src/main/java/com/ruoyi/app/controller/AppLoginController.java

@@ -87,9 +87,8 @@ public class AppLoginController {
         AppLoginUser loginUser =  new AppLoginUser();
         loginUser.setUser(appUser);
         String token = appTokenService.createToken(loginUser);
-        jsonObject.put("token", token);
-        jsonObject.put("user", appUser);
 
+        appUser.setClientId(loginVo.getClientId());
         appUser.setLoginIp(loginUser.getIpaddr());
         appUser.setLoginTime(date);
         appUser.setUpdateBy(appUser.getId());
@@ -99,6 +98,9 @@ public class AppLoginController {
             return AjaxResult.error("未知异常,登录失败");
         }
 
+        jsonObject.put("token", token);
+        jsonObject.put("user", appUser);
+
         return AjaxResult.success(jsonObject);
     }
 

+ 13 - 4
ruoyi-app/src/main/java/com/ruoyi/app/controller/FamilyMemberController.java

@@ -2,6 +2,7 @@ package com.ruoyi.app.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.pagehelper.PageHelper;
+import com.ruoyi.app.annotation.LoginAppUser;
 import com.ruoyi.app.controller.base.AppBaseController;
 import com.ruoyi.app.domain.TbAppUser;
 import com.ruoyi.app.domain.TbFamily;
@@ -19,6 +20,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
+import org.aspectj.weaver.bcel.AtAjAttributes;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -81,12 +83,19 @@ public class FamilyMemberController extends AppBaseController {
         return getDataTable(list);
     }
 
-    //家族树
-    public AjaxResult tree(){
-        return null;
+    @ApiOperation("家族树")
+    @GetMapping("/tree")
+    public AjaxResult tree(Long familyId){
+        if (familyId == null) {
+            return AjaxResult.error("家族id不能为空");
+        }
+        return AjaxResult.success(memberService.getFamilyTree(familyId));
     }
 
-    //添加成员到家族树
+    //TODO 添加成员到家族树
+    public AjaxResult addToTree(@LoginAppUser TbAppUser user, Long familyId){
+        return null;
+    }
 
     //TODO 逻辑删除家族树的成员,是删除成员,还是从家族树撤下来;或者是已删除,但parentId还在
 }

+ 15 - 7
ruoyi-app/src/main/java/com/ruoyi/app/util/AliSMSUtil.java

@@ -8,10 +8,14 @@ import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
 import com.aliyuncs.exceptions.ClientException;
 import com.aliyuncs.profile.DefaultProfile;
 import com.aliyuncs.profile.IClientProfile;
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.*;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 阿里发送短信验证码工具类
@@ -92,7 +96,7 @@ public class AliSMSUtil {
             map.put("msg","验证类型不存在");
             return map;
         }
-        String code = GetCode(phone);
+        String code = getCode(phone);
         String params = "{\"code\":\""+code+"\"}";
         map = sendSms(phone,params,SIGN_NAME,templateCode);
         return map;
@@ -184,14 +188,14 @@ public class AliSMSUtil {
      * @param phone
      * @return
      */
-    private  String GetCode(String phone){
-        String key = GetNum();
+    private  String getCode(String phone){
+        String key = getNum();
         CodeMap.put(phone,key);
         CodeMapTime.put(phone,System.currentTimeMillis());
         return key;
     }
 
-    private  String GetNum(){
+    private  String getNum(){
         int number = 899999;
         Random random = new Random();
         int num =random.nextInt(number)+100000;
@@ -208,8 +212,12 @@ public class AliSMSUtil {
     }
 
     static{
-        Timer tt=new Timer();//定时类
-        tt.schedule(new TimerTask(){//创建一个定时任务
+        // 用Executor代替new timer
+        // 1是核心线程数量,后面参数是一个线程工厂,采用了建造者模式创建
+        // 可以通过线程工厂给每个创建出来的线程设置符合业务的名字。
+        ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,
+                new BasicThreadFactory.Builder().namingPattern("aliSMS-schedule-pool-%d").daemon(true).build());
+        executorService.scheduleAtFixedRate(new Runnable() {
             @Override
             public void run() {
                 try {
@@ -234,7 +242,7 @@ public class AliSMSUtil {
                 }
 
             }
-        }, START,INTERVAL);//从0秒开始,每隔10秒执行一次
+        },START,INTERVAL, TimeUnit.MILLISECONDS);
     }
 
 }

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/app/domain/TbMemberMiddle.java

@@ -83,5 +83,5 @@ public class TbMemberMiddle implements Serializable {
     private String nickName;
 
     @TableField(exist = false)
-    private List<TbMemberMiddle> list;
+    private List<TbMemberMiddle> child;
 }

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

@@ -2,6 +2,7 @@ package com.ruoyi.app.service;
 
 import com.ruoyi.app.domain.TbFamilyMember;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.app.domain.TbMemberMiddle;
 import com.ruoyi.app.domain.vo.AppMemberVo;
 
 import java.util.List;
@@ -16,4 +17,5 @@ public interface ITbFamilyMemberService extends IService<TbFamilyMember> {
 
     boolean saveOrUpdate(AppMemberVo memberVo);
     List<AppMemberVo> selectFamilyMember(AppMemberVo memberVo);
+    TbMemberMiddle getFamilyTree(Long familyId);
 }

+ 38 - 23
ruoyi-system/src/main/java/com/ruoyi/app/service/impl/TbFamilyMemberServiceImpl.java

@@ -72,42 +72,57 @@ public class TbFamilyMemberServiceImpl extends ServiceImpl<TbFamilyMemberMapper,
         return baseMapper.selectFamilyMember(lqw);
     }
 
+    @Override
+    public TbMemberMiddle getFamilyTree(Long familyId){
+        return getChildNode(zeroParent(familyId),allList(familyId));
+    }
 
-
-
-
-
-
-
-
-
-
-//test
-    public List<TbMemberMiddle> allList(Long familyId){
+    /**
+     * 获取所有的成员
+     * @param familyId
+     * @return
+     */
+    private List<TbMemberMiddle> allList(Long familyId){
         List<TbMemberMiddle> list = memberMiddleService.selectApplyMember(new LambdaQueryWrapper<TbMemberMiddle>()
                 .eq(TbMemberMiddle::getFamilyId,familyId)
                 .eq(TbMemberMiddle::getStatus,"2")
         );
         return list;
     }
-
-    public TbMemberMiddle zeroParent(Long familyId){
+    /**
+     * 获取节点为0的父成员
+     * @param familyId
+     * @return
+     */
+    private TbMemberMiddle zeroParent(Long familyId){
         return memberMiddleService.getOne(new LambdaQueryWrapper<TbMemberMiddle>()
                 .eq(TbMemberMiddle::getFamilyId,familyId)
                 .eq(TbMemberMiddle::getStatus,"2")
                 .eq(TbMemberMiddle::getParentId, 0).last("limit 1")
         );
     }
-
-    public List<TbMemberMiddle> listTree(TbMemberMiddle zero,List<TbMemberMiddle> list) {
-        List<TbMemberMiddle> middles = new ArrayList<>();
-//        for(TbMemberMiddle item : list) {
-//            if(zero.getId().equals(item.getParentId())){
-//                middles = listTree(item, list);
-//                item.setList(middles);
-//            }
-//        }
-        return middles;
+    /**
+     * 递归获取家族树
+     * @param middle 父成员
+     * @param list 所有的成员
+     * @return
+     */
+    private TbMemberMiddle getChildNode(TbMemberMiddle middle,List<TbMemberMiddle> list) {
+        List<TbMemberMiddle> childList = new ArrayList<>();
+        TbMemberMiddle child = new TbMemberMiddle();
+        list.forEach(item -> {
+            if(middle.getId().equals(item.getParentId())){
+                childList.add(item);
+            }
+        });
+        middle.setChild(childList);
+        childList.forEach(item -> {
+            getChildNode(item,list);
+        });
+        for (TbMemberMiddle item : childList) {
+            getChildNode(item,list);
+        }
+        return middle;
     }
 
 }