瀏覽代碼

v1.1.0 初始化

lyhzzz 2 年之前
父節點
當前提交
d6d492c180
共有 66 個文件被更改,包括 2105 次插入91 次删除
  1. 0 1
      README.md
  2. 13 0
      pom.xml
  3. 2 0
      src/main/java/com/fdkankan/tk/TakeLookApplication.java
  4. 6 0
      src/main/java/com/fdkankan/tk/common/ResultCode.java
  5. 38 4
      src/main/java/com/fdkankan/tk/common/util/RoomUtil.java
  6. 89 0
      src/main/java/com/fdkankan/tk/controller/DataCountController.java
  7. 22 4
      src/main/java/com/fdkankan/tk/controller/RoomController.java
  8. 35 0
      src/main/java/com/fdkankan/tk/controller/RoomUserController.java
  9. 21 1
      src/main/java/com/fdkankan/tk/controller/TestController.java
  10. 27 0
      src/main/java/com/fdkankan/tk/entity/Room.java
  11. 63 0
      src/main/java/com/fdkankan/tk/entity/RoomDanmaku.java
  12. 63 0
      src/main/java/com/fdkankan/tk/entity/RoomLive.java
  13. 51 0
      src/main/java/com/fdkankan/tk/entity/RoomShareLog.java
  14. 67 0
      src/main/java/com/fdkankan/tk/entity/RoomUser.java
  15. 73 0
      src/main/java/com/fdkankan/tk/entity/RoomVisitLog.java
  16. 1 1
      src/main/java/com/fdkankan/tk/generate/AutoGenerate.java
  17. 30 0
      src/main/java/com/fdkankan/tk/httpClient/FdKKService.java
  18. 5 0
      src/main/java/com/fdkankan/tk/httpClient/client/FdKKClient.java
  19. 28 0
      src/main/java/com/fdkankan/tk/httpClient/client/LiveClient.java
  20. 22 0
      src/main/java/com/fdkankan/tk/mapper/IRoomDanmakuMapper.java
  21. 18 0
      src/main/java/com/fdkankan/tk/mapper/IRoomLiveMapper.java
  22. 5 0
      src/main/java/com/fdkankan/tk/mapper/IRoomMapper.java
  23. 18 0
      src/main/java/com/fdkankan/tk/mapper/IRoomShareLogMapper.java
  24. 18 0
      src/main/java/com/fdkankan/tk/mapper/IRoomUserMapper.java
  25. 32 0
      src/main/java/com/fdkankan/tk/mapper/IRoomVisitLogMapper.java
  26. 3 0
      src/main/java/com/fdkankan/tk/request/RoomAddParam.java
  27. 3 0
      src/main/java/com/fdkankan/tk/request/RoomListParam.java
  28. 9 0
      src/main/java/com/fdkankan/tk/response/DataCount.java
  29. 10 0
      src/main/java/com/fdkankan/tk/response/RoomAddUserParam.java
  30. 11 0
      src/main/java/com/fdkankan/tk/response/RoomData.java
  31. 16 0
      src/main/java/com/fdkankan/tk/response/RoomListDataVo.java
  32. 15 0
      src/main/java/com/fdkankan/tk/response/RoomVisitData.java
  33. 3 0
      src/main/java/com/fdkankan/tk/response/RoomVo.java
  34. 12 0
      src/main/java/com/fdkankan/tk/response/TakeLookTop5.java
  35. 188 0
      src/main/java/com/fdkankan/tk/service/DataCountService.java
  36. 22 0
      src/main/java/com/fdkankan/tk/service/IRoomDanmakuService.java
  37. 22 0
      src/main/java/com/fdkankan/tk/service/IRoomLiveService.java
  38. 3 0
      src/main/java/com/fdkankan/tk/service/IRoomNumService.java
  39. 9 1
      src/main/java/com/fdkankan/tk/service/IRoomService.java
  40. 17 0
      src/main/java/com/fdkankan/tk/service/IRoomShareLogService.java
  41. 36 0
      src/main/java/com/fdkankan/tk/service/IRoomUserService.java
  42. 30 0
      src/main/java/com/fdkankan/tk/service/IRoomVisitLogService.java
  43. 79 0
      src/main/java/com/fdkankan/tk/service/impl/RoomDanmakuServiceImpl.java
  44. 58 0
      src/main/java/com/fdkankan/tk/service/impl/RoomLiveServiceImpl.java
  45. 12 3
      src/main/java/com/fdkankan/tk/service/impl/RoomNumServiceImpl.java
  46. 133 20
      src/main/java/com/fdkankan/tk/service/impl/RoomServiceImpl.java
  47. 34 0
      src/main/java/com/fdkankan/tk/service/impl/RoomShareLogServiceImpl.java
  48. 148 0
      src/main/java/com/fdkankan/tk/service/impl/RoomUserServiceImpl.java
  49. 87 0
      src/main/java/com/fdkankan/tk/service/impl/RoomVisitLogServiceImpl.java
  50. 71 0
      src/main/java/com/fdkankan/tk/task/TaskService.java
  51. 15 0
      src/main/java/com/fdkankan/tk/util/DataCountUtil.java
  52. 39 0
      src/main/java/com/fdkankan/tk/util/DateUtil.java
  53. 160 0
      src/main/java/com/fdkankan/tk/util/Dateutils.java
  54. 0 54
      src/main/resources/application-test.yaml
  55. 0 0
      src/main/resources/bootstrap-eurtest.yml
  56. 0 0
      src/main/resources/bootstrap-local.yml
  57. 0 0
      src/main/resources/bootstrap-prod-eur.yml
  58. 12 1
      src/main/resources/application-prod.yaml
  59. 20 0
      src/main/resources/bootstrap-test.yml
  60. 1 1
      src/main/resources/application.yaml
  61. 11 0
      src/main/resources/mapper/tk/RoomDanmakuMapper.xml
  62. 5 0
      src/main/resources/mapper/tk/RoomLiveMapper.xml
  63. 16 0
      src/main/resources/mapper/tk/RoomMapper.xml
  64. 5 0
      src/main/resources/mapper/tk/RoomShareLogMapper.xml
  65. 5 0
      src/main/resources/mapper/tk/RoomUserMapper.xml
  66. 38 0
      src/main/resources/mapper/tk/RoomVisitLogMapper.xml

+ 0 - 1
README.md

@@ -1,3 +1,2 @@
 ###**v1.0.0**
 
-

+ 13 - 0
pom.xml

@@ -18,6 +18,19 @@
     <dependencies>
 
         <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+            <version>2.2.7.RELEASE</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+            <version>2.2.7.RELEASE</version>
+        </dependency>
+
+
+        <dependency>
             <groupId>com.fdkankan</groupId>
             <artifactId>4dkankan-utils-redis</artifactId>
             <version>2.0.0-SNAPSHOT</version>

+ 2 - 0
src/main/java/com/fdkankan/tk/TakeLookApplication.java

@@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
@@ -14,6 +15,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableTransactionManagement//开启事务
 @EnableScheduling
 @ComponentScan(basePackages = {"com.fdkankan.*"})
+@EnableDiscoveryClient
 @MapperScan("com.fdkankan.**.mapper")
 public class TakeLookApplication implements CommandLineRunner {
 

+ 6 - 0
src/main/java/com/fdkankan/tk/common/ResultCode.java

@@ -10,16 +10,22 @@ public enum ResultCode {
     ROOM_ING(4004,"房间直播中,请先关闭直播再修改!"),
     DEL_ROOM_ING(4005,"房间直播中,请先关闭直播再删除!"),
     USER_NOT_LOGIN(4008,"用户未登录"),
+
     SCENE_STATUS_ERROR(5001,"房间中场景重算中或封存"),
+
     WX_LOGIN_ERROR(6001,"微信登录失败,请重新授权登录"),
     WX_OPENID_ERROr(6002,"微信登录失败,存在重复openid"),
     WX_PHONE_ERROR(6003,"微信获取手机号码失败"),
+
     UPLOAD_ERROR(7001,"文件上传失败"),
     UPLOAD_FILE_NO_EXIST(7002,"上传文件不存在"),
     UPLOAD_FILE_TO_LONG(7003,"文件上传过大"),
     WX_CONFIG_ERROR(7004,"项目未配置Wxconfig,请于数据库中配置"),
     WX_CONFIG_ERROR_2(7005,"项目配置Wxconfig,存在多个配置,请确保有且只有一个"),
 
+    FD_USER_NOT_EXIST(8001,"授权失败!此账号不存在!"),
+    ROOM_END_EX(8002,"房间设置开启时间过期"),
+
 
     ;
     public int code;

+ 38 - 4
src/main/java/com/fdkankan/tk/common/util/RoomUtil.java

@@ -1,19 +1,53 @@
 package com.fdkankan.tk.common.util;
 
+import com.fdkankan.tk.service.IRoomService;
+import com.fdkankan.tk.service.IRoomUserService;
+import jdk.net.SocketFlow;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
+import java.text.NumberFormat;
+import java.util.HashMap;
 import java.util.UUID;
 
+@Service
 public class RoomUtil {
 
     public static String ev = null;
 
-    public static String genRoomId(){
-        String uuid = UUID.randomUUID().toString().replace("-","");
+    public static String redisKey ="take_look:";
+
+
+    @Autowired
+    IRoomService roomService;
+
+    public static String getLiveRoomId(String roomId, String roomUserId) {
+        if(StringUtils.isNotBlank(roomId) && StringUtils.isNotBlank(roomUserId)){
+            return roomId + "_" +roomUserId;
+        }
+        return roomId;
+    }
+
+    public  String genRoomId(){
+        Long count = roomService.getCountAndTbStatus();
         if(StringUtils.isBlank(ev)){
-            return "CS-"+uuid;
+            return "cs-"+geZeroNumber(count);
         }
-        return ev+uuid;
+        return ev+"-"+geZeroNumber(count);
+    }
+
+    /**
+     * 数字前面自动补零
+     * @param number 数字
+     * @return
+     */
+    public static String geZeroNumber(Long number){
+        NumberFormat formatter = NumberFormat.getNumberInstance();
+        formatter.setMinimumIntegerDigits(5);
+        formatter.setGroupingUsed(false);
+        return formatter.format(number);
     }
 
+
 }

+ 89 - 0
src/main/java/com/fdkankan/tk/controller/DataCountController.java

@@ -0,0 +1,89 @@
+package com.fdkankan.tk.controller;
+
+import com.fdkankan.tk.common.ResultData;
+import com.fdkankan.tk.service.DataCountService;
+import com.fdkankan.tk.service.IRoomService;
+import org.omg.CORBA.INTERNAL;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class DataCountController {
+
+    @Autowired
+    DataCountService dataCountService;
+    @Autowired
+    IRoomService roomService;
+
+    /**
+     * 整体概况
+     */
+    @GetMapping("/roomData")
+    public ResultData roomData(){
+
+        return ResultData.ok(dataCountService.roomData());
+    }
+
+    /**
+     * 排行榜
+     */
+    @GetMapping("/takeLookTop5")
+    public ResultData takeLookTop5(){
+
+        return ResultData.ok(dataCountService.takeLookTop5());
+    }
+
+    /**
+     * 各时间段在线人数
+     */
+    @GetMapping("/onlineTimeCount")
+    public ResultData onlineTimeCount(){
+
+        return ResultData.ok(dataCountService.onlineTimeCount());
+    }
+
+    @GetMapping("/allRoomList")
+    public ResultData allRoomList(){
+
+        return ResultData.ok(roomService.list());
+    }
+
+    /**
+     * 房间使用情况,用户流量量,用户分享数,留言人数,留言总数
+     */
+    @GetMapping("/roomVisitData")
+    public ResultData roomVisitData(@RequestParam(required = false) String roomId,
+                                    @RequestParam(required = false) String startTime,
+                                    @RequestParam(required = false) String endTime){
+
+        return ResultData.ok(dataCountService.roomVisitData(roomId,startTime,endTime));
+    }
+
+    /**
+     * 整体数据列表
+     */
+    @GetMapping("/roomDataList")
+    public ResultData roomDataList(@RequestParam(required = false) String roomId,
+                                   @RequestParam(required = false) String startTime,
+                                   @RequestParam(required = false) String endTime,
+                                   @RequestParam(required = false) Integer pageNum,
+                                   @RequestParam(required = false) Integer pageSize){
+
+        return ResultData.ok(dataCountService.roomDataList(roomId,startTime,endTime,pageNum,pageSize));
+    }
+
+    /**
+     * 房间留言列表
+     */
+    @GetMapping("/roomMsgList")
+    public ResultData roomMsgList(@RequestParam(required = false) String roomId,
+                                   @RequestParam(required = false) String startTime,
+                                   @RequestParam(required = false) String endTime,
+                                   @RequestParam(required = false) Integer pageNum,
+                                   @RequestParam(required = false) Integer pageSize){
+
+        return ResultData.ok(dataCountService.roomMsgList(roomId,startTime,endTime,pageNum,pageSize));
+    }
+}

+ 22 - 4
src/main/java/com/fdkankan/tk/controller/RoomController.java

@@ -6,7 +6,9 @@ import com.fdkankan.tk.common.ResultData;
 import com.fdkankan.tk.exception.BusinessException;
 import com.fdkankan.tk.request.RoomAddParam;
 import com.fdkankan.tk.request.RoomListParam;
+import com.fdkankan.tk.response.RoomAddUserParam;
 import com.fdkankan.tk.service.IRoomService;
+import com.fdkankan.tk.service.IRoomShareLogService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +25,8 @@ public class RoomController extends BaseController{
 
     @Autowired
     IRoomService roomService;
+    @Autowired
+    IRoomShareLogService roomShareLogService;
 
 
     /**
@@ -37,8 +41,7 @@ public class RoomController extends BaseController{
      */
     @GetMapping("/roomAddView")
     public ResultData roomAddView(@RequestParam(required = false) String roomId){
-        log.info("roomAddView-----------------------:roomId{}",roomId);
-        roomService.roomAddView(roomId);
+        //roomService.roomAddView(roomId);
         return ResultData.ok();
     }
     /**
@@ -97,10 +100,25 @@ public class RoomController extends BaseController{
     @GetMapping("/inOrOutRoom")
     public ResultData inOrOutRoom(@RequestParam(required = false) String role,
                                   @RequestParam(required = false) String roomId,
-                                  @RequestParam(required = false) Integer type){
-        roomService.inOrOutRoom(roomId,role,type);
+                                  @RequestParam(required = false) Integer type,
+                                  @RequestParam(required = false) String userId){
+        roomService.inOrOutRoom(roomId,role,type,userId);
         return ResultData.ok();
     }
 
+
+    /**
+     * 分享房间
+     * roomId 房间ida
+     */
+    @GetMapping("/shareRoom")
+    public ResultData shareRoom(@RequestParam(required = false) String roomId,
+                                @RequestParam(required = false) String userId){
+        if(roomId == null){
+            throw new BusinessException(ResultCode.PARAM_MISS);
+        }
+        roomShareLogService.saveLog(roomId,userId);
+        return ResultData.ok();
+    }
 }
 

+ 35 - 0
src/main/java/com/fdkankan/tk/controller/RoomUserController.java

@@ -0,0 +1,35 @@
+package com.fdkankan.tk.controller;
+
+
+import com.fdkankan.tk.common.ResultData;
+import com.fdkankan.tk.response.RoomAddUserParam;
+import com.fdkankan.tk.service.IRoomUserService;
+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;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+@RestController
+@RequestMapping("/roomUser")
+public class RoomUserController {
+
+    @Autowired
+    IRoomUserService roomUserService;
+
+    @PostMapping("/addUserCheck")
+    public ResultData addUserCheck(@RequestBody RoomAddUserParam param){
+        roomUserService.addUserCheck(param);
+        return ResultData.ok( );
+    }
+}
+

+ 21 - 1
src/main/java/com/fdkankan/tk/controller/TestController.java

@@ -1,25 +1,45 @@
 package com.fdkankan.tk.controller;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.tk.common.ResultData;
+import com.fdkankan.tk.httpClient.client.LiveClient;
 import com.fdkankan.tk.httpClient.client.WxClient;
 import com.fdkankan.tk.httpClient.request.WxGetQrCodeParam;
 import com.fdkankan.tk.service.IWxService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
 import java.io.File;
+import java.util.Set;
 
 @RestController
 public class TestController {
 
+    @Autowired
+    LiveClient liveClient;
 
     @GetMapping("/test")
-    public ResultData test(){
+    public ResultData test(@RequestParam(required = false) String roomId){
+        JSONObject jsonObject = liveClient.getDanmaku(roomId);
+        if(jsonObject != null && jsonObject.getInteger("code") ==0){
+            JSONArray data = jsonObject.getJSONArray("data");
+            if(data.size() >0){
+                for (Object o : data) {
+                    JSONObject danmaku = (JSONObject) o;
+                    Set<String> timest = danmaku.keySet();
+                    for (String key : timest) {
+                        JSONObject info = danmaku.getJSONObject(key);
+                        System.out.println(info.getString("nickname"));
+                    }
+                }
+            }
+        }
         return ResultData.ok( );
     }
 }

+ 27 - 0
src/main/java/com/fdkankan/tk/entity/Room.java

@@ -105,4 +105,31 @@ public class Room implements Serializable {
     @TableField("is_show")
     private Integer isShow;
 
+    //使用开始时间    v1.1.0添加字段
+    @TableField("use_start_time")
+    private String useStartTime;
+
+    //使用结束时间    v1.1.0添加字段
+    @TableField("use_end_time")
+    private String useEndTime;
+
+    //房间密码  v1.1.0添加字段
+    @TableField("visit_password")
+    private String visitPassword;
+
+    //带看锁,0没密码,1有密码  v1.1.0添加字段
+    @TableField("take_look_lock")
+    private Integer takeLookLock;
+
+    //自由漫游锁,0没密码,1有密码  v1.1.0添加字段
+    @TableField("free_roam_lock")
+    private Integer freeRoamLock;
+
+    //房间最大人数设置
+    @TableField("max_man")
+    private Integer maxMan;
+
+    @TableField(exist = false)
+    private Integer roomUserId;
+
 }

+ 63 - 0
src/main/java/com/fdkankan/tk/entity/RoomDanmaku.java

@@ -0,0 +1,63 @@
+package com.fdkankan.tk.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-01
+ */
+@Getter
+@Setter
+@TableName("t_room_danmaku")
+public class RoomDanmaku implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("room_id")
+    private String roomId;
+
+    @TableField("room_user_id")
+    private String roomUserId;
+
+    @TableField("live_id")
+    private String liveId;
+
+    @TableField("user_id")
+    private String userId;
+
+    @TableField("text")
+    private String text;
+
+    @TableField("nick_name")
+    private String nickName;
+
+    @TableField("write_time")
+    private Date writeTime;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 63 - 0
src/main/java/com/fdkankan/tk/entity/RoomLive.java

@@ -0,0 +1,63 @@
+package com.fdkankan.tk.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+@Getter
+@Setter
+@TableName("t_room_live")
+public class RoomLive implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 直播ID
+     */
+    @TableId(value = "live_id", type = IdType.AUTO)
+    private Integer liveId;
+
+    /**
+     * 房间ID
+     */
+    @TableField("room_id")
+    private String roomId;
+
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 协作者id
+     */
+    @TableField("room_user_id")
+    private String roomUserId;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("over_time")
+    private Date overTime;
+
+
+}

+ 51 - 0
src/main/java/com/fdkankan/tk/entity/RoomShareLog.java

@@ -0,0 +1,51 @@
+package com.fdkankan.tk.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-01
+ */
+@Getter
+@Setter
+@TableName("t_room_share_log")
+public class RoomShareLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("room_id")
+    private String roomId;
+
+    @TableField("room_user_id")
+    private String roomUserId;
+
+    @TableField("user_id")
+    private String userId;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 67 - 0
src/main/java/com/fdkankan/tk/entity/RoomUser.java

@@ -0,0 +1,67 @@
+package com.fdkankan.tk.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+@Getter
+@Setter
+@TableName("t_room_user")
+public class RoomUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "room_user_id", type = IdType.AUTO)
+    private Integer roomUserId;
+
+    /**
+     * 房间id
+     */
+    @TableField("room_id")
+    private String roomId;
+
+    /**
+     * 用户名
+     */
+    @TableField("user_name")
+    private String userName;
+    /**
+     * 使用时间
+     */
+    @TableField("use_start_time")
+    private String useStartTime;
+    /**
+     * 使用时间
+     */
+    @TableField("use_end_time")
+    private String useEndTime;
+
+    /**
+     * 房间状态 ,0 未开启,1进行中,2已关闭
+     */
+    @TableField("room_status")
+    private Integer roomStatus;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 73 - 0
src/main/java/com/fdkankan/tk/entity/RoomVisitLog.java

@@ -0,0 +1,73 @@
+package com.fdkankan.tk.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+@Getter
+@Setter
+@TableName("t_room_visit_log")
+public class RoomVisitLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "visit_id", type = IdType.AUTO)
+    private Integer visitId;
+
+    /**
+     * 房间id
+     */
+    @TableField("room_id")
+    private String roomId;
+
+    /**
+     * 访问用户ID
+     */
+    @TableField("visit_user_id")
+    private String visitUserId;
+
+    /**
+     * 直播号
+     */
+    @TableField("live_id")
+    private Integer liveId;
+
+
+    /**
+     * 进入直播间时间
+     */
+    @TableField("in_room_time")
+    private Date inRoomTime;
+
+    /**
+     * 退出直播间时间
+     */
+    @TableField("out_room_time")
+    private Date outRoomTime;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/tk/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir") ;
 
         generate(path,"tk", getTables(new String[]{
-                "t_wx_user",
+                "t_room_danmaku",
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 30 - 0
src/main/java/com/fdkankan/tk/httpClient/FdKKService.java

@@ -0,0 +1,30 @@
+package com.fdkankan.tk.httpClient;
+
+import com.fdkankan.tk.common.ResultCode;
+import com.fdkankan.tk.exception.BusinessException;
+import com.fdkankan.tk.httpClient.client.FdKKClient;
+import com.fdkankan.tk.httpClient.request.FdkkLoginRequest;
+import com.fdkankan.tk.httpClient.response.FdkkResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+public class FdKKService {
+
+    @Autowired
+    FdKKClient fdKKClient;
+
+    public void checkUser(String userName){
+        try {
+            FdkkLoginRequest fdParam = new FdkkLoginRequest(userName,null);
+            FdkkResponse fdkkResponse = fdKKClient.checkUser(fdParam);
+            if(fdkkResponse.getCode() != 3008){
+                throw new BusinessException(ResultCode.FD_USER_NOT_EXIST);
+            }
+        }catch ( Exception e){
+            throw new BusinessException(ResultCode.FD_USER_NOT_EXIST);
+        }
+    }
+}

+ 5 - 0
src/main/java/com/fdkankan/tk/httpClient/client/FdKKClient.java

@@ -33,6 +33,11 @@ public interface FdKKClient {
     @Post("/api/user/checkToken")
     FdkkResponse checkToken(@Header("token")  String token);
     /**
+     * 校验token
+     */
+    @Post("/api/sso/user/checkUser")
+    FdkkResponse checkUser(@JSONBody FdkkLoginRequest fdkkLoginRequest);
+    /**
      * 获取用户详情
      */
     @Post("/api/user/getUserInfo")

+ 28 - 0
src/main/java/com/fdkankan/tk/httpClient/client/LiveClient.java

@@ -0,0 +1,28 @@
+package com.fdkankan.tk.httpClient.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dtflys.forest.annotation.*;
+import com.fdkankan.tk.httpClient.address.FdkkAddressSource;
+import com.fdkankan.tk.httpClient.request.WxGetPhoneParam;
+import com.fdkankan.tk.httpClient.request.WxGetQrCodeParam;
+import com.fdkankan.tk.httpClient.response.WxOpenIdVo;
+
+/**
+ * 获取,调用4dkk服务
+ */
+@Address(source = FdkkAddressSource.class)
+public interface LiveClient {
+
+    /**
+     * 获取 弹幕列表
+     */
+    @Get("/service/room-manager/danmaku/{wxRoomId}")
+    JSONObject getDanmaku(@Var("wxRoomId") String wxRoomId);
+    /**
+     * 删除 弹幕列表
+     */
+    @Get("/service/room-manager/danmaku/delete/{wxRoomId}")
+    JSONObject deleteDanmaku(@Var("wxRoomId") String wxRoomId);
+
+
+}

+ 22 - 0
src/main/java/com/fdkankan/tk/mapper/IRoomDanmakuMapper.java

@@ -0,0 +1,22 @@
+package com.fdkankan.tk.mapper;
+
+import com.fdkankan.tk.entity.RoomDanmaku;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.tk.response.DataCount;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-01
+ */
+@Mapper
+public interface IRoomDanmakuMapper extends BaseMapper<RoomDanmaku> {
+
+    List<DataCount> getDataCountTop5();
+}

+ 18 - 0
src/main/java/com/fdkankan/tk/mapper/IRoomLiveMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.tk.mapper;
+
+import com.fdkankan.tk.entity.RoomLive;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+@Mapper
+public interface IRoomLiveMapper extends BaseMapper<RoomLive> {
+
+}

+ 5 - 0
src/main/java/com/fdkankan/tk/mapper/IRoomMapper.java

@@ -1,7 +1,9 @@
 package com.fdkankan.tk.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.tk.entity.Room;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.tk.request.RoomListParam;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -15,4 +17,7 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface IRoomMapper extends BaseMapper<Room> {
 
+    Long getCountAndTbStatus();
+
+    Page<Room> pageList(Page<Object> page, RoomListParam param);
 }

+ 18 - 0
src/main/java/com/fdkankan/tk/mapper/IRoomShareLogMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.tk.mapper;
+
+import com.fdkankan.tk.entity.RoomShareLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-01
+ */
+@Mapper
+public interface IRoomShareLogMapper extends BaseMapper<RoomShareLog> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/tk/mapper/IRoomUserMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.tk.mapper;
+
+import com.fdkankan.tk.entity.RoomUser;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+@Mapper
+public interface IRoomUserMapper extends BaseMapper<RoomUser> {
+
+}

+ 32 - 0
src/main/java/com/fdkankan/tk/mapper/IRoomVisitLogMapper.java

@@ -0,0 +1,32 @@
+package com.fdkankan.tk.mapper;
+
+import com.fdkankan.tk.entity.RoomVisitLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.tk.response.DataCount;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+@Mapper
+public interface IRoomVisitLogMapper extends BaseMapper<RoomVisitLog> {
+
+    Long manCount();
+
+    Long getCountByTime(@Param("key") Integer key);
+
+    List<DataCount> getByGroupRoomId(@Param("tb") String tb,@Param("roomId") String roomId,
+                                     @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    List<DataCount> getByDGroupRoomId(@Param("tb") String tb,@Param("roomId") String roomId,
+                                     @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+}

+ 3 - 0
src/main/java/com/fdkankan/tk/request/RoomAddParam.java

@@ -1,6 +1,7 @@
 package com.fdkankan.tk.request;
 
 import com.fdkankan.tk.entity.Room;
+import com.fdkankan.tk.entity.RoomUser;
 import lombok.Data;
 
 import java.util.List;
@@ -9,4 +10,6 @@ import java.util.List;
 public class RoomAddParam extends Room {
 
     private List<String> numList;   //场景码列表
+
+    private List<RoomUser> userObjList;   //用户数组
 }

+ 3 - 0
src/main/java/com/fdkankan/tk/request/RoomListParam.java

@@ -5,5 +5,8 @@ import lombok.Data;
 
 @Data
 public class RoomListParam extends RequestBase {
+
     private String roomTitle;
+
+    private String userName;
 }

+ 9 - 0
src/main/java/com/fdkankan/tk/response/DataCount.java

@@ -0,0 +1,9 @@
+package com.fdkankan.tk.response;
+
+import lombok.Data;
+
+@Data
+public class DataCount {
+    private String dataKey;
+    private Long dataCount;
+}

+ 10 - 0
src/main/java/com/fdkankan/tk/response/RoomAddUserParam.java

@@ -0,0 +1,10 @@
+package com.fdkankan.tk.response;
+
+import lombok.Data;
+
+@Data
+public class RoomAddUserParam {
+    private String useStartTime;
+    private String useEndTime;
+    private String userName;
+}

+ 11 - 0
src/main/java/com/fdkankan/tk/response/RoomData.java

@@ -0,0 +1,11 @@
+package com.fdkankan.tk.response;
+
+import lombok.Data;
+
+@Data
+public class RoomData {
+    private Long roomCount;
+    private Long visitManCount;
+    private Long visitCount;
+    private Long shareCount;
+}

+ 16 - 0
src/main/java/com/fdkankan/tk/response/RoomListDataVo.java

@@ -0,0 +1,16 @@
+package com.fdkankan.tk.response;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class RoomListDataVo {
+    private String roomTitle;
+    private List<String> sceneNameList;
+    private Long lookTime;
+    private String createTime;
+    private Integer roomStatus;
+    private Long lookManCount;
+    private Long shareCount;
+}

+ 15 - 0
src/main/java/com/fdkankan/tk/response/RoomVisitData.java

@@ -0,0 +1,15 @@
+package com.fdkankan.tk.response;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class RoomVisitData {
+
+    private List<DataCount> userVisitList;
+    private List<DataCount> userShareList;
+    private List<DataCount> userMsgManList;
+    private List<DataCount> userMsgCountList;
+
+}

+ 3 - 0
src/main/java/com/fdkankan/tk/response/RoomVo.java

@@ -1,6 +1,7 @@
 package com.fdkankan.tk.response;
 
 import com.fdkankan.tk.entity.Room;
+import com.fdkankan.tk.entity.RoomUser;
 import lombok.Data;
 
 import java.util.List;
@@ -10,5 +11,7 @@ public class RoomVo extends Room {
 
     private List<SceneVo> sceneData;
 
+    private List<RoomUser> roomUserList;
+
     private Integer isHost = 0;  // 0 不是房主,1为房主
 }

+ 12 - 0
src/main/java/com/fdkankan/tk/response/TakeLookTop5.java

@@ -0,0 +1,12 @@
+package com.fdkankan.tk.response;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TakeLookTop5 {
+
+    private List<DataCount> takeLookList;
+    private List<DataCount> danmakuList;
+}

+ 188 - 0
src/main/java/com/fdkankan/tk/service/DataCountService.java

@@ -0,0 +1,188 @@
+package com.fdkankan.tk.service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.tk.common.PageInfo;
+import com.fdkankan.tk.entity.Room;
+import com.fdkankan.tk.entity.RoomNum;
+import com.fdkankan.tk.response.*;
+import com.fdkankan.tk.util.DataCountUtil;
+import com.fdkankan.tk.util.Dateutils;
+import com.google.common.collect.Lists;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.tk.entity.RoomVisitLog;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class DataCountService {
+
+    @Autowired
+    IRoomService roomService;
+    @Autowired
+    IRoomVisitLogService roomVisitLogService;
+    @Autowired
+    IRoomShareLogService roomShareLogService;
+    @Autowired
+    IRoomDanmakuService roomDanmakuService;
+    @Autowired
+    IRoomNumService roomNumService;
+    @Autowired
+    ISceneService sceneService;
+
+
+    public Object roomData() {
+        Long roomCount = roomService.count();
+        Long visitManCount = roomVisitLogService.manCount();
+        Long visitCount = roomVisitLogService.count();
+        Long shareCount = roomShareLogService.count();
+
+        RoomData roomData = new RoomData();
+        roomData.setRoomCount(roomCount);
+        roomData.setVisitManCount(visitManCount);
+        roomData.setVisitCount(visitCount);
+        roomData.setShareCount(shareCount);
+        return roomData;
+    }
+
+    public Object takeLookTop5() {
+        TakeLookTop5 takeLookTop5 = new TakeLookTop5();
+
+        List<DataCount> takeLookList = new ArrayList<>();
+        LambdaQueryWrapper<Room> wrapper = new LambdaQueryWrapper<>();
+        wrapper.orderByDesc(Room::getRoomViewCount);
+        Page<Room> page = roomService.page(new Page<>(1, 5), wrapper);
+        List<Room> roomList = page.getRecords();
+        for (Room room : roomList) {
+            DataCount dataCount = new DataCount();
+            dataCount.setDataKey(room.getRoomTitle());
+            dataCount.setDataCount(Long.valueOf(room.getRoomViewCount()));
+            takeLookList.add(dataCount);
+        }
+
+        List<DataCount> danmakuList = roomDanmakuService.getDataCountTop5();
+        takeLookTop5.setTakeLookList(takeLookList);
+        takeLookTop5.setDanmakuList(danmakuList);
+        return takeLookTop5;
+    }
+
+    public Object onlineTimeCount() {
+        List<Integer> keys = DataCountUtil.timeShardingRes;
+        List<DataCount> dataCounts = new ArrayList<>();
+        for (Integer key : keys) {
+            Long count = roomVisitLogService.getCountByTime(key);
+            DataCount dataCount = new DataCount();
+            dataCount.setDataKey(key.toString());
+            dataCount.setDataCount(count);
+            dataCounts.add(dataCount);
+        }
+        return dataCounts;
+    }
+
+    public Object roomVisitData(String roomId, String startTime, String endTime) {
+        RoomVisitData roomVisitData = new RoomVisitData();
+        List<DataCount> dbVisitList = roomVisitLogService.getByGroupRoomId("t_room_visit_log",roomId,startTime,endTime);
+        List<DataCount>  dbVisitListFmt =  getDataCountListByList(dbVisitList, startTime, endTime);
+
+        List<DataCount> dbSharList = roomVisitLogService.getByGroupRoomId("t_room_share_log",roomId,startTime,endTime);
+        List<DataCount>  dbSharListFmt =  getDataCountListByList(dbSharList, startTime, endTime);
+
+        List<DataCount> dbDanmakuList = roomVisitLogService.getByGroupRoomId("t_room_danmaku",roomId,startTime,endTime);
+        List<DataCount>  dbDanmakuListFmt =  getDataCountListByList(dbDanmakuList, startTime, endTime);
+
+        List<DataCount> dbDanmakuListD = roomVisitLogService.getByDGroupRoomId("t_room_danmaku",roomId,startTime,endTime);
+        List<DataCount>  dbDanmakuListFmtD =  getDataCountListByList(dbDanmakuListD, startTime, endTime);
+
+        roomVisitData.setUserVisitList(dbVisitListFmt);
+        roomVisitData.setUserShareList(dbSharListFmt);
+        roomVisitData.setUserMsgManList(dbDanmakuListFmtD);
+        roomVisitData.setUserMsgCountList(dbDanmakuListFmt);
+
+        return roomVisitData;
+    }
+
+    public  List<DataCount> getDataCountListByList( List<DataCount> visitList,String startTime,String endTime){
+        HashMap<String ,DataCount> map = new HashMap<>();
+        visitList.forEach(entity -> map.put(entity.getDataKey(),entity));
+
+        List<String> dates = Dateutils.findDatesStr(Dateutils.getDate(startTime), Dateutils.getDate(endTime),Dateutils.DAY );
+        List<DataCount> dataCounts = new ArrayList<>();
+        for (String date : dates) {
+            DataCount dataCount = map.get(date);
+            if(dataCount == null){
+                dataCount = new DataCount();
+                dataCount.setDataKey(date);
+                dataCount.setDataCount(0L);
+            }
+            dataCounts.add(dataCount);
+        }
+        return dataCounts;
+    }
+
+    public Object roomDataList(String roomId, String startTime, String endTime, Integer pageNum, Integer pageSize) {
+        startTime = Dateutils.formatStartTime(startTime);
+        endTime = Dateutils.formatEndTime(endTime);
+
+        LambdaQueryWrapper<Room> wrapper = new LambdaQueryWrapper<>();
+        if(StringUtils.isNotBlank(roomId)){
+            wrapper.eq(Room::getRoomId,roomId);
+        }
+        if(StringUtils.isNotBlank(startTime)){
+            wrapper.ge(Room::getCreateTime,startTime);
+        }
+        if(StringUtils.isNotBlank(endTime)){
+            wrapper.le(Room::getCreateTime,endTime);
+        }
+        wrapper.orderByDesc(Room::getCreateTime);
+
+        List<RoomListDataVo> voList = new ArrayList<>();
+        Page<Room> page = roomService.page(new Page<>(pageNum, pageSize), wrapper);
+
+        List<String> roomIds = page.getRecords().stream().map(Room::getRoomId).collect(Collectors.toList());
+        List<RoomNum> roomNumList = roomNumService.getListByRoomIds(roomIds);
+        Set<String> numList = roomNumList.stream().map(RoomNum::getNum).collect(Collectors.toSet());
+        HashMap<String,List<RoomNum>> numRoomMap = new HashMap<>();
+        for (RoomNum roomNum : roomNumList) {
+            if(numRoomMap.get(roomNum.getRoomId()) == null){
+                numRoomMap.put(roomNum.getRoomId(),Arrays.asList(roomNum));
+            }else {
+                numRoomMap.get(roomNum.getRoomId()).add(roomNum);
+            }
+        }
+
+        List<SceneVo> list = new ArrayList<>();
+        HashMap<String,SceneVo> sceneMap  = new HashMap<>();
+
+        if(numList.size() >0){
+            list = sceneService.getListByNumList(new ArrayList<>(numList));
+            list.forEach(entity -> sceneMap.put(entity.getNum(),entity));
+        }
+        for (Room record : page.getRecords()) {
+            List<RoomNum> roomNums = numRoomMap.get(record.getRoomId());
+            List<String> sceneTileList = new ArrayList<>();
+            roomNums.forEach(entity -> {
+                sceneTileList.add(sceneMap.get(entity.getNum()).getTitle());
+            });
+            RoomListDataVo roomListDataVo = new RoomListDataVo();
+            roomListDataVo.setRoomTitle(record.getRoomTitle());
+            roomListDataVo.setSceneNameList(sceneTileList);
+            roomListDataVo.setCreateTime(record.getCreateTime());
+            roomListDataVo.setRoomStatus(record.getRoomStatus());
+            roomListDataVo.setLookTime(0L);
+            roomListDataVo.setLookManCount(0L);
+            roomListDataVo.setShareCount(0L);
+            voList.add(roomListDataVo);
+        }
+        Page<RoomListDataVo> pageVo = new Page<>(pageNum,pageSize);
+        pageVo.setRecords(voList);
+        pageVo.setTotal(page.getTotal());
+        return PageInfo.PageInfo(pageVo);
+    }
+
+    public Object roomMsgList(String roomId, String startTime, String endTime, Integer pageNum, Integer pageSize) {
+        return PageInfo.PageInfo(new Page(pageNum,pageSize));
+    }
+}

+ 22 - 0
src/main/java/com/fdkankan/tk/service/IRoomDanmakuService.java

@@ -0,0 +1,22 @@
+package com.fdkankan.tk.service;
+
+import com.fdkankan.tk.entity.RoomDanmaku;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.tk.response.DataCount;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-01
+ */
+public interface IRoomDanmakuService extends IService<RoomDanmaku> {
+
+    void saveDanMaku(String liveId);
+
+    List<DataCount> getDataCountTop5();
+}

+ 22 - 0
src/main/java/com/fdkankan/tk/service/IRoomLiveService.java

@@ -0,0 +1,22 @@
+package com.fdkankan.tk.service;
+
+import com.fdkankan.tk.entity.RoomLive;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Date;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+public interface IRoomLiveService extends IService<RoomLive> {
+
+    RoomLive addLiveByRoomId(String roomId,String roomUserId);
+
+    void stopByLiveId(String liveId);
+
+}

+ 3 - 0
src/main/java/com/fdkankan/tk/service/IRoomNumService.java

@@ -4,6 +4,7 @@ import com.fdkankan.tk.entity.RoomNum;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -20,4 +21,6 @@ public interface IRoomNumService extends IService<RoomNum> {
     void deleteByRoomId(String roomId);
 
     List<String> getListByRoomId(String roomId);
+
+    List<RoomNum>  getListByRoomIds(List<String> roomIds);
 }

+ 9 - 1
src/main/java/com/fdkankan/tk/service/IRoomService.java

@@ -6,9 +6,11 @@ import com.fdkankan.tk.entity.Room;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.tk.request.RoomAddParam;
 import com.fdkankan.tk.request.RoomListParam;
+import com.fdkankan.tk.response.RoomAddUserParam;
 import com.fdkankan.tk.response.RoomVo;
 
 import java.io.IOException;
+import java.util.List;
 
 /**
  * <p>
@@ -32,5 +34,11 @@ public interface IRoomService extends IService<Room> {
 
     String getWxQrCode(String roomId,String type);
 
-    void inOrOutRoom(String roomId, String role, Integer type);
+    void inOrOutRoom(String roomId, String role, Integer type,String userId);
+
+    Long getCountAndTbStatus();
+
+    List<Room> getRunningRoom();
+
+    void stopRoom(Room room);
 }

+ 17 - 0
src/main/java/com/fdkankan/tk/service/IRoomShareLogService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.tk.service;
+
+import com.fdkankan.tk.entity.RoomShareLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-01
+ */
+public interface IRoomShareLogService extends IService<RoomShareLog> {
+
+    void saveLog(String roomId, String userId);
+}

+ 36 - 0
src/main/java/com/fdkankan/tk/service/IRoomUserService.java

@@ -0,0 +1,36 @@
+package com.fdkankan.tk.service;
+
+import com.fdkankan.tk.entity.Room;
+import com.fdkankan.tk.entity.RoomUser;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.tk.response.RoomAddUserParam;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+public interface IRoomUserService extends IService<RoomUser> {
+
+    void addUserCheck(RoomAddUserParam param);
+
+    void updateByUserObjList(List<RoomUser> userObjList, Room room);
+
+    void delByRoomId(String roomId);
+
+    List<RoomUser> getByRoomId(String roomId);
+
+    HashMap<String, RoomUser> getMapByRoomId(String roomId);
+
+    void delByUserNameList(List<String> delUserName,String roomId);
+
+    void stopRoom(RoomUser roomUser);
+
+    List<RoomUser> getRunningRoom();
+}

+ 30 - 0
src/main/java/com/fdkankan/tk/service/IRoomVisitLogService.java

@@ -0,0 +1,30 @@
+package com.fdkankan.tk.service;
+
+import com.fdkankan.tk.entity.RoomVisitLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.tk.response.DataCount;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+public interface IRoomVisitLogService extends IService<RoomVisitLog> {
+
+    void addLog(Integer liveId, String roomId, String userId,Integer type);
+
+    void stopRoom(Integer liveId);
+
+    Long manCount();
+
+    Long getCountByTime(Integer key);
+
+    List<DataCount> getByGroupRoomId(String tb,String roomId, String startTime, String endTime);
+
+    List<DataCount> getByDGroupRoomId(String tb, String roomId, String startTime, String endTime);
+}

+ 79 - 0
src/main/java/com/fdkankan/tk/service/impl/RoomDanmakuServiceImpl.java

@@ -0,0 +1,79 @@
+package com.fdkankan.tk.service.impl;
+import java.util.ArrayList;
+import java.util.Date;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.tk.common.util.RoomUtil;
+import com.fdkankan.tk.entity.RoomDanmaku;
+import com.fdkankan.tk.entity.RoomLive;
+import com.fdkankan.tk.httpClient.client.LiveClient;
+import com.fdkankan.tk.mapper.IRoomDanmakuMapper;
+import com.fdkankan.tk.response.DataCount;
+import com.fdkankan.tk.service.IRoomDanmakuService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.tk.service.IRoomLiveService;
+import com.fdkankan.tk.util.DateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-01
+ */
+@Service
+public class RoomDanmakuServiceImpl extends ServiceImpl<IRoomDanmakuMapper, RoomDanmaku> implements IRoomDanmakuService {
+
+    @Autowired
+    IRoomLiveService roomLiveService;
+    @Autowired
+    LiveClient liveClient;
+
+    @Override
+    public void saveDanMaku(String liveId) {
+        RoomLive roomLive = roomLiveService.getById(liveId);
+        if(roomLive == null){
+            return;
+        }
+        String wxRoomId = RoomUtil.getLiveRoomId( roomLive.getRoomId() , roomLive.getRoomUserId());
+        List<RoomDanmaku> saveList = new ArrayList<>();
+        JSONObject jsonObject = liveClient.getDanmaku(wxRoomId);
+        if(jsonObject != null && jsonObject.getInteger("code") ==0){
+            JSONArray data = jsonObject.getJSONArray("data");
+            if(data.size() >0){
+                for (Object o : data) {
+                    JSONObject danmaku = (JSONObject) o;
+                    Set<String> timest = danmaku.keySet();
+                    for (String key : timest) {
+                        JSONObject info = danmaku.getJSONObject(key);
+                        RoomDanmaku roomDanmaku = new RoomDanmaku();
+                        roomDanmaku.setRoomId(roomLive.getRoomId());
+                        roomDanmaku.setRoomUserId(roomLive.getRoomUserId());
+                        roomDanmaku.setLiveId(liveId);
+                        roomDanmaku.setUserId(info.getString("userId"));
+                        roomDanmaku.setText(info.getString("text"));
+                        roomDanmaku.setNickName(info.getString("nickname"));
+                        roomDanmaku.setWriteTime(DateUtil.getDateByLong(key));
+                        saveList.add(roomDanmaku);
+                    }
+                }
+            }
+        }
+        if(saveList.size() >0){
+            liveClient.deleteDanmaku(wxRoomId);
+            this.saveBatch(saveList);
+        }
+    }
+
+    @Override
+    public List<DataCount> getDataCountTop5() {
+        return this.getBaseMapper().getDataCountTop5();
+    }
+}

+ 58 - 0
src/main/java/com/fdkankan/tk/service/impl/RoomLiveServiceImpl.java

@@ -0,0 +1,58 @@
+package com.fdkankan.tk.service.impl;
+import java.util.Date;
+import java.util.Set;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.tk.common.util.RoomUtil;
+import com.fdkankan.tk.entity.RoomLive;
+import com.fdkankan.tk.httpClient.client.LiveClient;
+import com.fdkankan.tk.mapper.IRoomLiveMapper;
+import com.fdkankan.tk.service.IRoomDanmakuService;
+import com.fdkankan.tk.service.IRoomLiveService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+@Service
+public class RoomLiveServiceImpl extends ServiceImpl<IRoomLiveMapper, RoomLive> implements IRoomLiveService {
+
+    @Autowired
+    RedisUtil redisUtil;
+    @Autowired
+    IRoomDanmakuService roomDanmakuService;
+
+
+    @Override
+    public RoomLive addLiveByRoomId(String roomId,String roomUserId) {
+        RoomLive roomLive = new RoomLive();
+        roomLive.setRoomId(roomId);
+        roomLive.setRoomUserId(roomUserId);
+        this.save(roomLive);
+        redisUtil.set(RoomUtil.redisKey+"live:"+RoomUtil.getLiveRoomId(roomId,roomUserId),roomLive.getLiveId().toString());
+        return roomLive;
+    }
+
+    @Override
+    public void stopByLiveId(String liveId) {
+        LambdaUpdateWrapper<RoomLive> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(RoomLive::getLiveId,liveId);
+        wrapper.set(RoomLive::getOverTime,new Date());
+        wrapper.set(RoomLive::getStatus,2);
+        this.update(wrapper);
+
+        roomDanmakuService.saveDanMaku(liveId);
+
+    }
+
+}

+ 12 - 3
src/main/java/com/fdkankan/tk/service/impl/RoomNumServiceImpl.java

@@ -1,6 +1,5 @@
 package com.fdkankan.tk.service.impl;
-import java.util.ArrayList;
-import java.util.Date;
+import java.util.*;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.tk.entity.Room;
@@ -10,7 +9,6 @@ import com.fdkankan.tk.service.IRoomNumService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
 import java.util.stream.Collectors;
 
 /**
@@ -53,4 +51,15 @@ public class RoomNumServiceImpl extends ServiceImpl<IRoomNumMapper, RoomNum> imp
         List<RoomNum> list = this.list(wrapper);
         return list.parallelStream().map(RoomNum::getNum).collect(Collectors.toList());
     }
+
+    @Override
+    public    List<RoomNum>  getListByRoomIds(List<String> roomIds) {
+        if(roomIds.size() <=0){
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<RoomNum> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(RoomNum::getRoomId,roomIds);
+        List<RoomNum> list = this.list(wrapper);
+        return list;
+    }
 }

+ 133 - 20
src/main/java/com/fdkankan/tk/service/impl/RoomServiceImpl.java

@@ -23,15 +23,24 @@ import com.fdkankan.tk.common.util.RedisKeyUtil;
 import com.fdkankan.tk.common.util.RoomUtil;
 import com.fdkankan.tk.common.util.UploadToOssUtil;
 import com.fdkankan.tk.entity.Room;
+import com.fdkankan.tk.entity.RoomLive;
+import com.fdkankan.tk.entity.RoomUser;
 import com.fdkankan.tk.entity.WxUser;
 import com.fdkankan.tk.exception.BusinessException;
+import com.fdkankan.tk.httpClient.FdKKService;
+import com.fdkankan.tk.httpClient.client.FdKKClient;
+import com.fdkankan.tk.httpClient.request.FdkkLoginRequest;
+import com.fdkankan.tk.httpClient.response.FdkkResponse;
 import com.fdkankan.tk.mapper.IRoomMapper;
+import com.fdkankan.tk.mapper.IRoomUserMapper;
 import com.fdkankan.tk.request.RoomAddParam;
 import com.fdkankan.tk.request.RoomListParam;
+import com.fdkankan.tk.response.RoomAddUserParam;
 import com.fdkankan.tk.response.RoomVo;
 import com.fdkankan.tk.response.SceneVo;
 import com.fdkankan.tk.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -47,6 +56,7 @@ import org.springframework.stereotype.Service;
  * @since 2022-09-19
  */
 @Service
+@Slf4j
 public class RoomServiceImpl extends ServiceImpl<IRoomMapper, Room> implements IRoomService {
 
     @Autowired
@@ -63,9 +73,39 @@ public class RoomServiceImpl extends ServiceImpl<IRoomMapper, Room> implements I
     RedisUtil redisUtil;
     @Autowired
     IWxUserService wxUserService;
+    @Autowired
+    RoomUtil roomUtil;
+    @Autowired
+    FdKKService fdKKService;
+    @Autowired
+    IRoomUserService roomUserService;
+    @Autowired
+    IRoomLiveService roomLiveService;
+    @Autowired
+    IRoomVisitLogService roomVisitLogService;
 
     @Override
     public PageInfo pageList(RoomListParam param, String token,String wxToken) {
+        if(StringUtils.isBlank(token) && StringUtils.isBlank(wxToken) ){
+            Page<Room> page = new Page<>(param.getPageNum(),param.getPageSize());
+            return PageInfo.PageInfo(page);
+        }
+
+        if(StringUtils.isNotBlank(wxToken)  ){      //微信小程序调用,返回协作者房间
+            String wxUserId = JwtUtil.getUserName(wxToken);
+            WxUser wxUser = wxUserService.getById(wxUserId);
+            if(wxUser != null){
+                param.setUserName(wxUser.getPhoneNumber());
+            }
+            Page<Room> page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
+            for (Room record : page.getRecords()) {
+                if(record.getRoomUserId() != null){
+                    record.setRoomId(record.getRoomId() + "_"+ record.getRoomUserId());
+                }
+            }
+            return PageInfo.PageInfo(page);
+        }
+
         LambdaQueryWrapper<Room> wrapper = new LambdaQueryWrapper<>();
         if(StringUtils.isNotBlank(token)){
             String fdToken = String.format(RedisKey.TOKEN_V3,token);
@@ -76,18 +116,6 @@ public class RoomServiceImpl extends ServiceImpl<IRoomMapper, Room> implements I
             String userName = JwtUtil.getUserName(token);
             wrapper.eq(Room::getRoomUserName,userName);
         }
-        if(StringUtils.isNotBlank(wxToken)  ){
-            String wxUserId = JwtUtil.getUserName(wxToken);
-            WxUser wxUser = wxUserService.getById(wxUserId);
-            if(wxUser != null){
-                wrapper.eq(Room::getRoomUserName,wxUser.getPhoneNumber());
-            }
-        }
-        if(StringUtils.isBlank(token) && StringUtils.isBlank(wxToken) ){
-            Page<Room> page = new Page<>(param.getPageNum(),param.getPageSize());
-            return PageInfo.PageInfo(page);
-        }
-
 
         if (StringUtils.isNotBlank(param.getRoomTitle()) ) {
             wrapper.like(Room::getRoomTitle,param.getRoomTitle());
@@ -119,8 +147,9 @@ public class RoomServiceImpl extends ServiceImpl<IRoomMapper, Room> implements I
                 throw new BusinessException(ResultCode.ROOM_ING);
             }
         }else {
-            room.setRoomId(RoomUtil.genRoomId());
+            room.setRoomId(roomUtil.genRoomId());
         }
+
         if(param.getNumList().size() >0){
             List<SceneVo> list = sceneService.getListByNumList(param.getNumList());
             if(list.size() >0){
@@ -129,6 +158,7 @@ public class RoomServiceImpl extends ServiceImpl<IRoomMapper, Room> implements I
         }
 
         this.saveOrUpdate(room);
+        roomUserService.updateByUserObjList(param.getUserObjList(),room);
         roomNumService.addBatch(room.getRoomId(),param.getNumList());
         param.setRoomId(room.getRoomId());
         return param;
@@ -144,6 +174,7 @@ public class RoomServiceImpl extends ServiceImpl<IRoomMapper, Room> implements I
             throw new BusinessException(ResultCode.DEL_ROOM_ING);
         }
         roomNumService.deleteByRoomId(roomId);
+        roomUserService.delByRoomId(roomId);
         if(StringUtils.isNotBlank(room.getRoomShareUrl())){
             uploadToOssUtil.delete(room.getRoomShareUrl());
         }
@@ -172,6 +203,8 @@ public class RoomServiceImpl extends ServiceImpl<IRoomMapper, Room> implements I
         }
 
         roomVo.setSceneData(list);
+        List<RoomUser> roomUserList = roomUserService.getByRoomId(roomId);
+        roomVo.setRoomUserList(roomUserList);
         return roomVo;
     }
 
@@ -237,27 +270,107 @@ public class RoomServiceImpl extends ServiceImpl<IRoomMapper, Room> implements I
         return queryPath + ossPath +"?"+System.currentTimeMillis();
     }
 
+
+    /**
+     * 加入房间,开启带看,退出房间
+     * type 0 加入房间,1退出房间
+     * role  follower  leader
+     */
     @Override
-    public void inOrOutRoom(String roomId, String role, Integer type) {
+    public void inOrOutRoom(String roomId, String role, Integer type,String userId) {
         if(roomId == null || StringUtils.isBlank(role)
-                || ( !role.equals("leader") && !role.equals("follower"))){
+                || ( !role.equals("leader") && !role.equals("follower")) ){
             throw new BusinessException(ResultCode.PARAM_MISS);
         }
+        String wxRoomId = roomId;
+        String roomUserId = null;
+        if(roomId.contains("_")){
+            roomId = roomId.split("_")[0];
+            roomUserId = roomId.split("_")[1];
+        }
         Room room = this.getById(roomId);
         if(room == null){
             throw new BusinessException(ResultCode.ROOM_MISS);
         }
+
+        Date date = com.fdkankan.tk.util.DateUtil.parseTime(room.getUseEndTime());
+        if(date != null && date.getTime() <= new Date().getTime()){
+            throw new BusinessException(ResultCode.ROOM_END_EX);
+        }
+
         if(role.equals("follower")){
+            if(type == 0 ){
+                this.roomAddView(roomId);
+            }
+            String liveId = redisUtil.get(RoomUtil.redisKey+"live:"+wxRoomId);
+            if(StringUtils.isNotBlank(liveId)){
+                roomVisitLogService.addLog(Integer.parseInt(liveId),roomId,userId,type);
+            }
             return;
         }
-        if(type == 0 ){
+
+        if(roomUserId != null){             //协作带看
+            RoomUser roomuser = roomUserService.getById(roomUserId);
+            date = com.fdkankan.tk.util.DateUtil.parseTime(roomuser.getUseEndTime());
+            if(date != null && date.getTime() <= new Date().getTime()){
+                throw new BusinessException(ResultCode.ROOM_END_EX);
+            }
+
+            if(type == 0 ){     //加入房间,开启带看
+                roomuser.setRoomStatus(1);
+            }
+            if(type == 1 ){   //离开房间
+                roomuser.setRoomStatus(2);
+            }
+            roomuser.setUpdateTime(null);
+            roomUserService.updateById(roomuser);
+        }
+
+        if(type == 0 ){     //加入房间,开启带看
+            this.roomAddView(roomId);
             room.setRoomStatus(1);
+            RoomLive roomLive = roomLiveService.addLiveByRoomId(roomId,roomUserId);
+            roomVisitLogService.addLog(roomLive.getLiveId(),roomId,userId,type);
         }
-        if(type == 1 ){
+        if(type == 1 ){   //离开房间
             room.setRoomStatus(2);
+            String liveId = redisUtil.get(RoomUtil.redisKey+"live:"+wxRoomId);
+            if(StringUtils.isNotBlank(liveId)){
+                roomLiveService.stopByLiveId(liveId);
+                roomVisitLogService.addLog(Integer.parseInt(liveId),roomId,userId,type);
+            }
+            redisUtil.del(RoomUtil.redisKey+"live:"+wxRoomId);
+        }
+
+        if(roomUserId == null){
+            room.setLastLookTime(DateUtil.formatDateTime(new Date()));
+            room.setUpdateTime(null);
+            this.updateById(room);
+        }
+    }
+
+
+    @Override
+    public Long getCountAndTbStatus() {
+        return this.getBaseMapper().getCountAndTbStatus();
+    }
+
+    @Override
+    public List<Room> getRunningRoom() {
+        LambdaQueryWrapper<Room> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Room::getRoomStatus,1);
+        return this.list(wrapper);
+    }
+
+    @Override
+    public void stopRoom(Room room) {
+        LambdaUpdateWrapper<Room> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(Room::getRoomId,room.getRoomId());
+        wrapper.set(Room::getRoomStatus,2);
+        this.update(wrapper);
+        List<RoomUser> byRoomId = roomUserService.getByRoomId(room.getRoomId());
+        for (RoomUser roomUser : byRoomId) {
+            roomUserService.stopRoom(roomUser);
         }
-        room.setLastLookTime(DateUtil.formatDateTime(new Date()));
-        room.setUpdateTime(null);
-        this.updateById(room);
     }
 }

+ 34 - 0
src/main/java/com/fdkankan/tk/service/impl/RoomShareLogServiceImpl.java

@@ -0,0 +1,34 @@
+package com.fdkankan.tk.service.impl;
+import java.util.Date;
+
+import com.fdkankan.tk.entity.RoomShareLog;
+import com.fdkankan.tk.mapper.IRoomShareLogMapper;
+import com.fdkankan.tk.service.IRoomShareLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-01
+ */
+@Service
+public class RoomShareLogServiceImpl extends ServiceImpl<IRoomShareLogMapper, RoomShareLog> implements IRoomShareLogService {
+
+    @Override
+    public void saveLog(String roomId, String userId) {
+        String roomUserId = null;
+        if(roomId.contains("_")){
+            roomId = roomId.split("_")[0];
+            roomUserId = roomId.split("_")[1];
+        }
+        RoomShareLog roomShareLog = new RoomShareLog();
+        roomShareLog.setRoomId(roomId);
+        roomShareLog.setRoomUserId(roomUserId);
+        roomShareLog.setUserId(roomUserId);
+        this.save(roomShareLog);
+    }
+}

+ 148 - 0
src/main/java/com/fdkankan/tk/service/impl/RoomUserServiceImpl.java

@@ -0,0 +1,148 @@
+package com.fdkankan.tk.service.impl;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.tk.common.ResultCode;
+import com.fdkankan.tk.common.util.RoomUtil;
+import com.fdkankan.tk.entity.Room;
+import com.fdkankan.tk.entity.RoomUser;
+import com.fdkankan.tk.exception.BusinessException;
+import com.fdkankan.tk.httpClient.FdKKService;
+import com.fdkankan.tk.mapper.IRoomUserMapper;
+import com.fdkankan.tk.response.RoomAddUserParam;
+import com.fdkankan.tk.service.IRoomLiveService;
+import com.fdkankan.tk.service.IRoomUserService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.tk.service.IRoomVisitLogService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+@Service
+public class RoomUserServiceImpl extends ServiceImpl<IRoomUserMapper, RoomUser> implements IRoomUserService {
+
+    @Autowired
+    FdKKService fdKKService;
+    @Autowired
+    IRoomLiveService roomLiveService;
+    @Autowired
+    IRoomVisitLogService roomVisitLogService;
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Override
+    public void addUserCheck(RoomAddUserParam param) {
+        if( StringUtils.isBlank(param.getUserName()) ||
+                StringUtils.isBlank(param.getUseStartTime()) || StringUtils.isBlank(param.getUseEndTime())){
+            throw new BusinessException(ResultCode.PARAM_MISS);
+        }
+        fdKKService.checkUser(param.getUserName());
+
+    }
+
+    @Override
+    public void updateByUserObjList(List<RoomUser> userObjList, Room room) {
+        if(userObjList == null || userObjList.size() <=0){
+            this.delByRoomId(room.getRoomId());
+            return;
+        }
+        HashMap<String,RoomUser> roomUserHashMap = this.getMapByRoomId(room.getRoomId());
+        if(roomUserHashMap.size() >0){  //删除数据库中多余的userName
+            Set<String> dbUserName = roomUserHashMap.keySet();
+            Set<String> userNameSet = userObjList.stream().map(RoomUser::getUserName).collect(Collectors.toSet());
+            if(userNameSet.size() <=0){
+                this.delByRoomId(room.getRoomId());
+                return;
+            }
+            List<String> delUserName = new ArrayList<>();
+            for (String userName : dbUserName) {
+                if(!userNameSet.contains(userName)){
+                    delUserName.add(userName);
+                }
+            }
+            this.delByUserNameList(delUserName,room.getRoomId());
+        }
+
+        for (RoomUser roomUser : userObjList) {
+            roomUser.setRoomId(room.getRoomId());
+            RoomUser dbRoomUser = roomUserHashMap.get(roomUser.getUserName());
+            if(dbRoomUser != null){
+                roomUser.setRoomUserId(dbRoomUser.getRoomUserId());
+            }
+            this.saveOrUpdate(roomUser);
+        }
+
+
+    }
+
+    @Override
+    public void delByRoomId(String roomId) {
+        LambdaQueryWrapper<RoomUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(RoomUser::getRoomId,roomId);
+        this.remove(wrapper);
+    }
+
+
+    @Override
+    public List<RoomUser> getByRoomId(String roomId) {
+        LambdaQueryWrapper<RoomUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(RoomUser::getRoomId,roomId);
+        return this.list(wrapper);
+    }
+
+    @Override
+    public HashMap<String, RoomUser> getMapByRoomId(String roomId) {
+        HashMap<String,RoomUser> map = new HashMap<>();
+        List<RoomUser> list = this.getByRoomId(roomId);
+        list.forEach(entity -> map.put(entity.getUserName(),entity));
+        return map;
+    }
+
+    @Override
+    public void delByUserNameList(List<String> delUserName,String roomId) {
+        LambdaQueryWrapper<RoomUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(RoomUser::getRoomId,roomId);
+        wrapper.in(RoomUser::getUserName,delUserName);
+        this.remove(wrapper);
+    }
+
+    @Override
+    public void stopRoom(RoomUser roomUser) {
+        LambdaUpdateWrapper<RoomUser> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(RoomUser::getRoomUserId,roomUser.getRoomUserId());
+        wrapper.set(RoomUser::getRoomStatus,2);
+        this.update(wrapper);
+
+        String liveId = redisUtil.get(RoomUtil.redisKey+"live:"+RoomUtil.getLiveRoomId(roomUser.getRoomId(),roomUser.getRoomUserId().toString()));
+        if(StringUtils.isNotBlank(liveId)){
+            roomLiveService.stopByLiveId(liveId);
+            roomVisitLogService.stopRoom(Integer.parseInt(liveId));
+            redisUtil.del(RoomUtil.redisKey+"live:"+RoomUtil.getLiveRoomId(roomUser.getRoomId(),roomUser.getRoomUserId().toString()));
+
+        }
+    }
+
+    @Override
+    public List<RoomUser> getRunningRoom() {
+        LambdaQueryWrapper<RoomUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(RoomUser::getRoomStatus,1);
+        return list(wrapper);
+    }
+}

+ 87 - 0
src/main/java/com/fdkankan/tk/service/impl/RoomVisitLogServiceImpl.java

@@ -0,0 +1,87 @@
+package com.fdkankan.tk.service.impl;
+import java.util.Date;
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.tk.entity.RoomVisitLog;
+import com.fdkankan.tk.mapper.IRoomVisitLogMapper;
+import com.fdkankan.tk.response.DataCount;
+import com.fdkankan.tk.service.IRoomVisitLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-28
+ */
+@Service
+public class RoomVisitLogServiceImpl extends ServiceImpl<IRoomVisitLogMapper, RoomVisitLog> implements IRoomVisitLogService {
+
+    @Override
+    public void addLog(Integer liveId, String roomId, String userId,Integer type) {
+        RoomVisitLog roomVisitLog  =  this.getByLiveIdAndUserId(liveId,userId,type);
+        if(roomVisitLog == null){
+            roomVisitLog = new RoomVisitLog();
+            roomVisitLog.setRoomId(roomId);
+            roomVisitLog.setVisitUserId(userId);
+            roomVisitLog.setLiveId(liveId);
+            roomVisitLog.setInRoomTime(new Date());
+        }
+        if(type == 1){
+            roomVisitLog.setUpdateTime(null);
+            roomVisitLog.setOutRoomTime(new Date());
+        }
+        this.saveOrUpdate(roomVisitLog);
+    }
+    @Override
+    public void stopRoom(Integer liveId) {
+        LambdaUpdateWrapper<RoomVisitLog> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(RoomVisitLog::getLiveId,liveId);
+        wrapper.set(RoomVisitLog::getOutRoomTime,new Date());
+        this.update(wrapper);
+    }
+
+
+    private RoomVisitLog getByLiveIdAndUserId(Integer liveId, String userId,Integer type) {
+        LambdaQueryWrapper<RoomVisitLog> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(RoomVisitLog::getLiveId,liveId);
+        wrapper.eq(RoomVisitLog::getVisitUserId,userId);
+        if(type == 0){
+            wrapper.isNull(RoomVisitLog::getInRoomTime);
+            wrapper.orderByDesc(RoomVisitLog::getInRoomTime);
+        }
+        if(type == 1){
+            wrapper.isNull(RoomVisitLog::getOutRoomTime);
+            wrapper.orderByDesc(RoomVisitLog::getOutRoomTime);
+        }
+        List<RoomVisitLog> list = this.list(wrapper);
+        if(list != null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public Long manCount() {
+        return this.getBaseMapper().manCount();
+    }
+
+    @Override
+    public Long getCountByTime(Integer key) {
+        return this.getBaseMapper().getCountByTime(key);
+    }
+
+    @Override
+    public List<DataCount> getByGroupRoomId(String tb,String roomId, String startTime, String endTime) {
+        return this.getBaseMapper().getByGroupRoomId(tb,roomId,startTime,endTime);
+    }
+    @Override
+    public List<DataCount> getByDGroupRoomId(String tb,String roomId, String startTime, String endTime) {
+        return this.getBaseMapper().getByDGroupRoomId(tb,roomId,startTime,endTime);
+    }
+}

+ 71 - 0
src/main/java/com/fdkankan/tk/task/TaskService.java

@@ -0,0 +1,71 @@
+package com.fdkankan.tk.task;
+
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.tk.entity.Room;
+import com.fdkankan.tk.entity.RoomUser;
+import com.fdkankan.tk.service.IRoomService;
+import com.fdkankan.tk.service.IRoomUserService;
+import com.fdkankan.tk.util.DateUtil;
+import com.sun.deploy.panel.ITreeNode;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service
+@Slf4j
+public class TaskService {
+
+    @Autowired
+    RedisUtil redisUtil;
+    @Autowired
+    IRoomService roomService;
+    @Autowired
+    IRoomUserService roomUserService;
+
+    /**
+     * 每分钟检测开启中的房间是否到期关闭房间
+     */
+    @Scheduled(cron = "0 */1 * * * ?}")
+    public void roomStop(){
+        try {
+            List<Room> roomList = roomService.getRunningRoom();
+            List<String> stopRoomIds = new ArrayList<>();
+            for (Room room : roomList) {
+                String useEndTime = room.getUseEndTime();
+                if(useEndTime == null){
+                    continue;
+                }
+                int comp = DateUtil.compDateStr(useEndTime, new Date());
+                if(comp < 0){            //房间已过期关闭
+                    roomService.stopRoom(room);
+                    stopRoomIds.add(room.getRoomId());
+                }
+            }
+
+            List<RoomUser> roomUserList = roomUserService.getRunningRoom();
+            for (RoomUser roomUser : roomUserList) {
+                if(stopRoomIds.contains(roomUser.getRoomId())){
+                    continue;
+                }
+                String useEndTime2 = roomUser.getUseEndTime();
+                if(useEndTime2 == null){
+                    continue;
+                }
+                int comp2 = DateUtil.compDateStr(useEndTime2, new Date());
+                if(comp2 < 0){            //房间已过期关闭
+                    roomUserService.stopRoom(roomUser);
+                }
+            }
+
+        }catch (Exception e){
+
+        }
+
+    }
+}

+ 15 - 0
src/main/java/com/fdkankan/tk/util/DataCountUtil.java

@@ -0,0 +1,15 @@
+package com.fdkankan.tk.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DataCountUtil {
+
+    public  static  List<Integer> timeShardingRes = new ArrayList<>();
+
+    static {
+        for (int i = 0 ; i <24;i ++){
+            timeShardingRes.add(i);
+        }
+    }
+}

+ 39 - 0
src/main/java/com/fdkankan/tk/util/DateUtil.java

@@ -0,0 +1,39 @@
+package com.fdkankan.tk.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class DateUtil {
+
+    public static String dFmt ="yyyy-MM-dd HH:mm:ss";
+
+    public static Date parseTime(String time){
+        try {
+            return new SimpleDateFormat(dFmt).parse(time);
+        }catch (Exception e){
+
+        }
+        return null;
+    }
+    public static String getDate(Date date){
+        return new SimpleDateFormat(dFmt).format(date);
+    }
+
+    public static int compDateStr(String time1, Date time2){
+        Date date1 = parseTime(time1);
+        if(date1 == null){
+            return -1;
+        }
+        return  date1.getTime() > time2.getTime() ? 1 : -1;
+    }
+
+    public static Date getDateByLong(String key) {
+        try {
+            Long time = Long.parseLong(key);
+            return new Date(time);
+        }catch (Exception e){
+
+        }
+       return null;
+    }
+}

+ 160 - 0
src/main/java/com/fdkankan/tk/util/Dateutils.java

@@ -0,0 +1,160 @@
+package com.fdkankan.tk.util;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+public class Dateutils {
+
+    public static int  DAY =  Calendar.DAY_OF_MONTH;
+    public static int  WEEK =  Calendar.WEEK_OF_MONTH;
+    public static int  MONTH =  Calendar.MONTH;
+
+    /**
+     * 获取指定时间区间的所有数据(包含日期和月份)
+     * @param dBegin
+     * @param dEnd
+     * @param rule 日历规则 如:Calendar.DAY_OF_MONTH
+     * @return
+     */
+    public static List<Date> findDates(Date dBegin, Date dEnd, int rule) {
+        List<Date> lDate = new ArrayList<>();
+        if (dEnd.before(dBegin)){
+            return lDate;
+        }
+        Calendar calBegin = Calendar.getInstance();
+        // 使用给定的 Date 设置此 Calendar 的时间
+        calBegin.setTime(dBegin);
+        Calendar calEnd = Calendar.getInstance();
+        // 使用给定的 Date 设置此 Calendar 的时间
+        calEnd.setTime(dEnd);
+        // 测试此日期是否在指定日期之后
+        while (dEnd.after(calBegin.getTime())) {
+            // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
+            Date time = calBegin.getTime();
+            if(rule == Calendar.WEEK_OF_MONTH){
+                time = getMonday(time);
+            }
+            lDate.add(time);
+            calBegin.add(rule, 1);
+        }
+        return lDate;
+    }
+    public static List<String> findDatesStr(Date dBegin, Date dEnd, int rule) {
+        List<String> datesStr = new ArrayList<>();
+        List<Date> dates = findDates(dBegin, dEnd, rule);
+        for (Date date : dates) {
+            String day ;
+            if(rule == MONTH){
+                day =getMonthDate(date);
+            }else {
+                day = getDayDate(date);
+            }
+            datesStr.add(day);
+        }
+        return datesStr;
+    }
+    public static Date getDate(String date) {
+        try {
+            return new SimpleDateFormat("yyyy-MM-dd").parse(date);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return new Date();
+    }
+    public static Date getMonday(Date date) {
+        Calendar calBegin = Calendar.getInstance();
+        calBegin.setTime(date);
+        calBegin.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);    //周一
+        return calBegin.getTime();
+    }
+
+    public static String getDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
+    }
+    public static String getDateN(Date date) {
+        return new SimpleDateFormat("yyyyMMddHHmmss").format(date);
+    }
+
+    public static String getMonthDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM").format(date);
+    }
+    public static Date getMonthDate(String date) {
+        try {
+            return new SimpleDateFormat("yyyy-MM").parse(date);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return new Date();
+    }
+
+    public static String getDayDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM-dd").format(date);
+    }
+    public static String getDayZeroDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM-dd").format(date) +" 00:00:00";
+    }
+
+
+    public static String getHalfYearStr() {
+        return new SimpleDateFormat("yyyy-MM-dd").format(getHalfYear())+" 00:00:00";
+    }
+    public static Date getHalfYear() {
+        Calendar c = Calendar.getInstance();
+        c.setTime(new Date());
+        c.add(Calendar.MONTH, -6);
+        return c.getTime();
+    }
+
+    public static  String getLastMonTh(Date date){
+        Calendar ca = Calendar.getInstance();
+        ca.setTime(date);
+        ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
+        return new SimpleDateFormat("yyyy-MM-dd").format(ca.getTime()) +" 23:59:59";
+    }
+
+    public static String formatStartTime(String startTime) {
+        if(StringUtils.isBlank(startTime)){
+            startTime = Dateutils.getHalfYearStr();
+        }
+        if(startTime.length() <12){  //月,开始时间到1号 0点
+            startTime +=  " 00:00:00";
+        }
+        return startTime;
+    }
+    public static String formatEndTime(String endTime) {
+        if(StringUtils.isBlank(endTime)){
+            endTime = Dateutils.getDate(new Date());
+        }
+        if(endTime.length() <12 ){  //月,开始时间到1号 0点
+            endTime +=  " 23:59:59";
+        }
+        return endTime;
+    }
+
+
+    public static String getStartTime(String startTime) {
+        if(StringUtils.isBlank(startTime)){
+            return null;
+        }
+        if(startTime.length() > 12){
+            return startTime;
+        }
+        return startTime +" 00:00:00";
+    }
+
+    public static String getEndTime(String endTime) {
+        if(StringUtils.isBlank(endTime)){
+            return null;
+        }
+        if(endTime.length() > 12){
+            return endTime;
+        }
+        return endTime +" 23:59:59";
+    }
+
+}

+ 0 - 54
src/main/resources/application-test.yaml

@@ -1,54 +0,0 @@
-spring:
-  datasource:
-    type: com.zaxxer.hikari.HikariDataSource          # 数据源类型:HikariCP
-    driver-class-name: com.mysql.jdbc.Driver          # mysql驱动
-    url: jdbc:mysql://127.0.0.1:3306/4dkankan_takelook?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
-    username: root
-    password: 4Dage@4Dage#@168
-    hikari:
-      connection-timeout: 30000         # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 默认:30秒
-      minimum-idle: 5                   # 最小连接数
-      maximum-pool-size: 20             # 最大连接数
-      auto-commit: true                 # 事务自动提交
-      idle-timeout: 600000              # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10分钟
-      pool-name: DateSourceHikariCP     # 连接池名字
-      max-lifetime: 1800000             # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000ms
-      connection-test-query: SELECT 1   # 连接测试语句
-  redis:
-    host: 120.24.144.164
-    port: 6379
-    timeout: 6000ms
-    password: bgh0cae240
-    jedis:
-      pool:
-        max-active: 10  #连接池最大连接数(使用负值表示没有限制)
-        max-idle: 10 # 连接池中的最大空闲连接
-        min-idle: 5 # 连接池中的最小空闲连接
-        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
-    lettuce:
-      shutdown-timeout: 0ms
-
-4dkk:
-  fdService:
-    #官网生产环境:https://www.4dkankan.com      http://test.4dkankan.com
-    basePath: http://test.4dkankan.com
-    port: 80
-    #basePath: http://192.168.0.38/4dkankan_v2
-    #port: 8080
-
-wx:
-  #要打开的小程序版本。正式版为 release,体验版为 trial,开发版为 develop
-  env_version: trial
-  path: pages/room/room
-
-
-upload:
-  type: oss
-  query-path: https://4dkk.4dage.com/
-oss:
-  #point: http://oss-cn-shenzhen-internal.aliyuncs.com
-  point: http://oss-cn-shenzhen-internal.aliyuncs.com
-  key: LTAIUrvuHqj8pvry
-  secrey: JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4
-  bucket: 4dkankan
-  small: ?x-oss-process=image/resize,m_fill,h_%s,w_%s

src/main/resources/application-eurtest.yaml → src/main/resources/bootstrap-eurtest.yml


src/main/resources/application-local.yaml → src/main/resources/bootstrap-local.yml


src/main/resources/application-prod-eur.yaml → src/main/resources/bootstrap-prod-eur.yml


+ 12 - 1
src/main/resources/application-prod.yaml

@@ -1,4 +1,15 @@
 spring:
+  application:
+    name: 4dkankan-center-ucenter
+    cloud:
+      nacos:
+        config:
+          server-addr: 172.20.1.63:8848
+          file-extension: yaml
+          namespace: 4dkankan-v4-prod
+        discovery:
+          server-addr: ${spring.cloud.nacos.config.server-addr}
+          namespace: ${spring.cloud.nacos.config.namespace}
   datasource:
     type: com.zaxxer.hikari.HikariDataSource          # 数据源类型:HikariCP
     driver-class-name: com.mysql.jdbc.Driver          # mysql驱动
@@ -51,4 +62,4 @@ oss:
   key: LTAIUrvuHqj8pvry
   secrey: JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4
   bucket: 4dkankan
-  small: ?x-oss-process=image/resize,m_fill,h_%s,w_%s
+  small: ?x-oss-process=image/resize,m_fill,h_%s,w_%s

+ 20 - 0
src/main/resources/bootstrap-test.yml

@@ -0,0 +1,20 @@
+spring:
+  application:
+    name: 4dkankan-center-takelook
+  cloud:
+      nacos:
+        config:
+          server-addr: 120.24.144.164:8848
+          file-extension: yaml
+          namespace: 4dkankan-v4-test
+          extension-configs:
+            - data-id: 4dkankan-center-takelook.yaml
+              group: DEFAULT_GROUP
+              refresh: true
+          shared-configs:
+            - data-id: common-redis-config.yaml
+              group: DEFAULT_GROUP
+              refresh: true
+        discovery:
+          server-addr: ${spring.cloud.nacos.config.server-addr}
+          namespace: ${spring.cloud.nacos.config.namespace}

+ 1 - 1
src/main/resources/application.yaml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: ${activeProfile:local}
+    active: ${activeProfile:test}
   servlet:
     multipart:
       max-file-size: 1000MB

+ 11 - 0
src/main/resources/mapper/tk/RoomDanmakuMapper.xml

@@ -0,0 +1,11 @@
+<?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.fdkankan.tk.mapper.IRoomDanmakuMapper">
+
+    <select id="getDataCountTop5" resultType="com.fdkankan.tk.response.DataCount">
+        SELECT  nick_name as key,count(1) as count  FROM t_room_danmaku
+
+            GROUP BY nick_name  ORDER BY count desc LIMIT 5
+
+    </select>
+</mapper>

+ 5 - 0
src/main/resources/mapper/tk/RoomLiveMapper.xml

@@ -0,0 +1,5 @@
+<?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.fdkankan.tk.mapper.IRoomLiveMapper">
+
+</mapper>

+ 16 - 0
src/main/resources/mapper/tk/RoomMapper.xml

@@ -2,4 +2,20 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fdkankan.tk.mapper.IRoomMapper">
 
+    <select id="getCountAndTbStatus" resultType="java.lang.Long">
+        select  count(1) from t_room
+    </select>
+
+    <select id="pageList" resultType="com.fdkankan.tk.entity.Room">
+        select  r.*,ru.room_user_id from t_room r left join t_room_user ru on r.room_id = ru.room_id
+        where r.tb_status = 0
+        <if test="param.userName != null and param.userName !='' ">
+            and (r.room_user_name = #{param.userName} or ru.user_name = #{param.userName})
+        </if>
+        <if test="param.roomTitle != null and param.roomTitle !='' ">
+            and r.room_title like  concat ('%',#{param.roomTitle},'%')
+        </if>
+        order by r.create_time desc
+
+    </select>
 </mapper>

+ 5 - 0
src/main/resources/mapper/tk/RoomShareLogMapper.xml

@@ -0,0 +1,5 @@
+<?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.fdkankan.tk.mapper.IRoomShareLogMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/tk/RoomUserMapper.xml

@@ -0,0 +1,5 @@
+<?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.fdkankan.tk.mapper.IRoomUserMapper">
+
+</mapper>

+ 38 - 0
src/main/resources/mapper/tk/RoomVisitLogMapper.xml

@@ -0,0 +1,38 @@
+<?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.fdkankan.tk.mapper.IRoomVisitLogMapper">
+
+    <select id="manCount" resultType="java.lang.Long">
+        SELECT  count(DISTINCT visit_user_id) FROM t_room_visit_log
+    </select>
+    <select id="getCountByTime" resultType="java.lang.Long">
+        SELECT count(1) FROM t_room_visit_log
+        WHERE  DATE_FORMAT(in_room_time,'%k')  &gt;=  #{key}  and  DATE_FORMAT(out_room_time,'%k') &lt;= #{key}
+
+    </select>
+    <select id="getByGroupRoomId" resultType="com.fdkankan.tk.response.DataCount">
+        SELECT DATE_FORMAT(create_time,'%Y-%m-%d') as dataKey , count(1) as dataCount  FROM ${tb}
+        WHERE tb_status = 0
+        <if test="roomId != null and roomId !=''">
+           and  room_id =#{roomId}
+        </if>
+        <if test="startTime != null and startTime !='' and endTime != null and endTime !=''">
+            and  DATE_FORMAT(create_time,'%Y-%m-%d')  &gt;= #{startTime}   and  DATE_FORMAT(create_time,'%Y-%m-%d') &lt;= #{endTime}
+        </if>
+        group by dataKey
+
+    </select>
+
+    <select id="getByDGroupRoomId" resultType="com.fdkankan.tk.response.DataCount">
+        SELECT DATE_FORMAT(create_time,'%Y-%m-%d') as dataKey , count(DISTINCT user_id) as dataCount  FROM ${tb}
+        WHERE tb_status = 0
+        <if test="roomId != null and roomId !=''">
+            and  room_id =#{roomId}
+        </if>
+        <if test="startTime != null and startTime !='' and endTime != null and endTime !=''">
+            and  DATE_FORMAT(create_time,'%Y-%m-%d')  &gt;= #{startTime}   and  DATE_FORMAT(create_time,'%Y-%m-%d') &lt;= #{endTime}
+        </if>
+        group by dataKey
+
+    </select>
+</mapper>