Browse Source

后端代码提交

zxy 3 years ago
parent
commit
5759881cca

+ 16 - 0
light-application-server/src/main/java/com/jd/lightapplication/easemob/EasemobComtroller.java

@@ -35,6 +35,7 @@ public class EasemobComtroller {
     private final String TOKEN_URL = "http://a1.easemob.com/%s/%s/token";//获取token
     private final String REGISTER_USER_URL = "http://a1.easemob.com/%s/%s/users";//注册用户
     private final String QUERY_USER_PAGE_URL = "http://a1.easemob.com/%s/%s/users";//分页查询用户
+    private final String DELETE_USER_PAGE_URL = "http://a1.easemob.com/%s/%s/users/%s";//删除环信用户(单个)
     private final String CREATE_GROUP_URL = "http://a1.easemob.com/%s/%s/chatgroups";//创建群组
     private final String UPDATE_GROUP_URL = "http://a1.easemob.com/%s/%s/chatgroups/%s";//修改群组详情
     private final String DELETE_GROUP_URL = "http://a1.easemob.com/%s/%s/chatgroups/%s";//删除群组
@@ -340,4 +341,19 @@ public class EasemobComtroller {
         JSONObject resultJsonObj = JSONUtil.parseObj(result);
         return R.success(resultJsonObj);
     }
+
+    @DeleteMapping("/deleteUser/{username}")
+    @ApiOperation("删除环信用户")
+    public R deleteUser(@PathVariable("username") String username) {
+        //获取环信token
+        String easemobTokenStr = this.getToken().getData().toString();
+        //拼接请求路径
+        String url = String.format(DELETE_USER_PAGE_URL, ORG_NAME, APP_NAME, username);
+        String result = HttpRequest.delete(url)
+                .header("Authorization", "Bearer " + easemobTokenStr)
+                .execute()
+                .body();
+        JSONObject jsonObject = JSONUtil.parseObj(result);
+        return R.success(jsonObject);
+    }
 }

+ 2 - 0
light-application-server/src/main/java/com/jd/lightapplication/easemob/dto/QueryPageDto.java

@@ -2,11 +2,13 @@ package com.jd.lightapplication.easemob.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 /**
  * 环信分页查询的入参
  */
 @Data
+@Accessors(chain = true)
 public class QueryPageDto {
     @ApiModelProperty("获取用户的数量")
     private String limit;

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/mapper/MeetingInfoMapper.java

@@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Update;
 
 public interface MeetingInfoMapper extends BaseMapper<MeetingInfo> {
 
-    @Select("SELECT * FROM meeting_info WHERE reception_time > NOW() limit 0,1")
+    @Select("SELECT * FROM meeting_info WHERE reception_time > NOW() ORDER BY reception_time limit 0,1")
     MeetingInfo getNextMeeting();
 
     @Update("UPDATE meeting_info SET status = #{status} WHERE id = #{meetingId}")

+ 7 - 0
light-application-server/src/main/java/com/jd/lightapplication/mapper/SysUserMapper.java

@@ -39,4 +39,11 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
             " WHERE rm.menu_id = #{menuId}")
     List<SysUser> listByMenuId(@Param("menuId") Long menuId);
 
+    @Select("SELECT su.* FROM sys_user su" +
+            " INNER JOIN sys_user_role sur" +
+            " ON su.id = sur.user_id" +
+            " INNER JOIN sys_role sr" +
+            " ON sur.role_id = sr.id" +
+            " WHERE sr.code = 'GUEST'")
+    List<SysUser> queryGuestUserAll();
 }

+ 2 - 3
light-application-server/src/main/java/com/jd/lightapplication/security/CaptchaFilter.java

@@ -38,13 +38,12 @@ public class CaptchaFilter extends OncePerRequestFilter {
 
         if(url.equals("/login") && httpServletRequest.getMethod().equals("POST")) {
             // 校验验证码
-            // TODO: 2022/4/9 去掉验证码校验
-            /*try {
+            try {
                 validate(httpServletRequest);
             } catch (CaptchaException e) {
                 // 如果不正确,就跳转到认证失败处理器
                 loginFailureHandler.onAuthenticationFailure(httpServletRequest, httpServletResponse, e);
-            }*/
+            }
         }
 
         filterChain.doFilter(httpServletRequest, httpServletResponse);

+ 1 - 2
light-application-server/src/main/java/com/jd/lightapplication/security/MobileLoginFilter.java

@@ -103,8 +103,7 @@ public class MobileLoginFilter extends OncePerRequestFilter implements Initializ
         this.handlePhone(phone);
 
         //把验证码从redis里面移除  让验证码失效
-        // TODO: 2022/4/19
-        //redisTemplate.delete(phone);
+        redisTemplate.delete(phone);
     }
 
     /**

+ 7 - 0
light-application-server/src/main/java/com/jd/lightapplication/service/SysUserService.java

@@ -105,5 +105,12 @@ public class SysUserService extends ServiceImpl<SysUserMapper, SysUser> {
         return sysUserList.get(0);
     }
 
+    /**
+     * 查询所有来宾用户
+     * @return
+     */
+    public List<SysUser> queryGuestUserAll(){
+        return baseMapper.queryGuestUserAll();
+    }
 
 }

+ 106 - 0
light-application-server/src/main/java/com/jd/lightapplication/task/ScheduledTask.java

@@ -0,0 +1,106 @@
+package com.jd.lightapplication.task;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.jd.lightapplication.easemob.EasemobComtroller;
+import com.jd.lightapplication.easemob.dto.QueryPageDto;
+import com.jd.lightapplication.model.SysUser;
+import com.jd.lightapplication.service.SysUserService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 定时任务
+ */
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+@AllArgsConstructor
+@Slf4j
+public class ScheduledTask {
+
+    private EasemobComtroller easemobComtroller;
+    private SysUserService sysUserService;
+
+    /**
+     * 定时任务
+     * 作用:
+     * 因为没有充钱,环信只给了我们100个用户和100个群组
+     * 所以我们需要每天定时清理环信里面的用户和群组
+     */
+    //@Scheduled(cron = "0 0/1 * * * ? ")// TODO: 2022/4/29 定时任务逻辑已经写完并且测试完成。cron表达式还没确定
+    public void clearGroupAndUser() {
+        System.err.println("清理群组和用户begin");
+        //清理环信群聊
+        this.clearGroup();
+        //清理环信用户和本系统的用户
+        this.clearUser();
+        System.err.println("清理群组和用户end");
+    }
+
+    /**
+     * 清理群组
+     */
+    private void clearGroup() {
+        //先查询出环信应用内的所有群组
+        JSONObject result = (JSONObject) easemobComtroller.queryGroupPage(new QueryPageDto().setLimit("100")).getData();
+        JSONArray data = null;
+        try {
+            data = result.getJSONArray("data");
+            //再根据返回的群组信息去查询群组详情
+            result = (JSONObject) easemobComtroller.queryGroupDetails(data.stream().map(t -> {
+                JSONObject group = (JSONObject) t;
+                return group.getStr("groupid");
+            }).collect(Collectors.joining(","))).getData();
+            data = result.getJSONArray("data");
+        } catch (Exception e) {
+            log.error("获取环信群组数据失败。result:" + result);
+            e.printStackTrace();
+        }
+        //过滤掉私有群组,把群组id用join连接成字符串
+        List<String> groupIds = data.stream().filter(t -> {
+            JSONObject group = (JSONObject) t;
+            return "true".equals(group.getStr("public"));
+        }).map(t -> {
+            JSONObject group = (JSONObject) t;
+            return group.getStr("id");
+        }).collect(Collectors.toList());
+        //再循环删除公开的群
+        groupIds.forEach(t -> {
+            JSONObject deleteResult = (JSONObject) easemobComtroller.deleteGroup(t).getData();
+            System.err.println(deleteResult);
+        });
+    }
+
+    /**
+     * 清理用户
+     */
+    private void clearUser() {
+        //先查询出本系统中所有角色为来宾的用户
+        List<SysUser> sysUserList = sysUserService.queryGuestUserAll();
+        //再根据手机号去删除环信中的用户,备注:环信中用户的账号就是本系统中的手机号,直接根据手机号去删即可
+        sysUserList.forEach(t -> {
+            JSONObject result = (JSONObject) easemobComtroller.deleteUser(t.getPhone()).getData();
+            //拿到被删除掉的用户信息
+            Object entities = result.get("entities");
+            if (entities == null) {
+                return;
+            }
+            JSONObject entitiesModel = ((JSONArray) entities).getJSONObject(0);
+            //拿到手机号,再根据手机号去删除本系统用户
+            String phone = entitiesModel.getStr("username");
+            LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(SysUser::getPhone, phone);
+            sysUserService.remove(wrapper);
+        });
+
+    }
+}