!9 1.新增朋友圈模块

Merge pull request !9 from 云裂痕/dev
This commit is contained in:
云裂痕
2025-03-03 05:28:40 +00:00
committed by Gitee
35 changed files with 1539 additions and 339 deletions

View File

@@ -1,6 +1,9 @@
package com.hula.utils;
import cn.hutool.extra.spring.SpringUtil;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory;
@@ -20,9 +23,11 @@ import java.util.stream.Collectors;
public class RedisUtils {
private static StringRedisTemplate stringRedisTemplate;
private static ObjectMapper objectMapper;
static {
RedisUtils.stringRedisTemplate = SpringUtil.getBean(StringRedisTemplate.class);
RedisUtils.objectMapper = SpringUtil.getBean(ObjectMapper.class);
}
private static final String LUA_INCR_EXPIRE =
@@ -340,10 +345,26 @@ public class RedisUtils {
* @param item 项 不能为null
* @return 值
*/
public static Object hget(String key, String item) {
return stringRedisTemplate.opsForHash().get(key, item);
public static <T> T hget(String key, String item) {
return hget(key, item, new TypeReference<>() {});
}
public static <T> T readValue(String value, TypeReference<T> typeReference) {
try {
return objectMapper.readValue(value, typeReference);
} catch (Exception e) {
throw new RuntimeException("hGet 序列号失败", e);
}
}
public static <T> T hget(String key, String item, TypeReference<T> typeReference) {
Object result = stringRedisTemplate.opsForHash().get(key, item);
if (result == null) {
return null;
}
return readValue(result.toString(), typeReference);
}
/**
* 获取hashKey对应的所有键值
*
@@ -412,7 +433,7 @@ public class RedisUtils {
*/
public static Boolean hset(String key, String item, Object value) {
try {
stringRedisTemplate.opsForHash().put(key, item, value);
stringRedisTemplate.opsForHash().put(key, item, objectMapper.writeValueAsString(value));
return true;
} catch (Exception e) {
log.error(e.getMessage(), e);

View File

@@ -44,7 +44,7 @@ public class BaseConfig {
@Bean
@Primary
@ConditionalOnMissingBean
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
objectMapper
.setLocale(Locale.CHINA)

View File

@@ -31,6 +31,21 @@ public class RedisKey {
*/
public static final String HOT_ROOM_ZET = "hotRoom";
/**
* 用户朋友圈的信息汇总
*/
public static final String USER_FEED_STRING = BASE_KEY + "userFeed";
/**
* 朋友圈素材
*/
public static final String FEED_MEDIA = BASE_KEY + "feedMedia";
/**
* 朋友圈权限
*/
public static final String FEED_TARGET = BASE_KEY + "feedTarget";
/**
* 用户信息
*/

View File

@@ -34,7 +34,7 @@ public class CursorPageBaseResp<T> {
private Long total;
public static <T> CursorPageBaseResp<T> init(CursorPageBaseResp cursorPage, List<T> list, Long total) {
CursorPageBaseResp<T> cursorPageBaseResp = new CursorPageBaseResp<T>();
CursorPageBaseResp<T> cursorPageBaseResp = new CursorPageBaseResp<>();
cursorPageBaseResp.setIsLast(cursorPage.getIsLast());
cursorPageBaseResp.setList(list);
cursorPageBaseResp.setCursor(cursorPage.getCursor());
@@ -48,9 +48,9 @@ public class CursorPageBaseResp<T> {
}
public static <T> CursorPageBaseResp<T> empty() {
CursorPageBaseResp<T> cursorPageBaseResp = new CursorPageBaseResp<T>();
CursorPageBaseResp<T> cursorPageBaseResp = new CursorPageBaseResp<>();
cursorPageBaseResp.setIsLast(true);
cursorPageBaseResp.setList(new ArrayList<T>());
cursorPageBaseResp.setList(new ArrayList<>());
cursorPageBaseResp.setTotal(0L);
return cursorPageBaseResp;
}

View File

@@ -8,6 +8,7 @@ import com.hula.core.user.domain.entity.UserFriend;
import com.hula.core.user.domain.enums.WsBaseResp;
import com.hula.core.user.domain.enums.WSRespTypeEnum;
import com.hula.core.user.domain.vo.resp.ws.ChatMemberResp;
import com.hula.core.user.domain.vo.resp.ws.WSFeedMemberResp;
import com.hula.core.user.domain.vo.resp.ws.WSMemberChange;
import com.hula.core.user.service.cache.UserCache;
import jakarta.annotation.Resource;
@@ -106,4 +107,16 @@ public class MemberAdapter {
wsBaseResp.setData(wsMemberChange);
return wsBaseResp;
}
/**
* 发朋友圈以后推送的消息
* @param uid 发布人
* @return
*/
public static WsBaseResp<WSFeedMemberResp> buildFeedPushWS(Long uid){
WsBaseResp<WSFeedMemberResp> wsBaseResp = new WsBaseResp<>();
wsBaseResp.setType(WSRespTypeEnum.FEED_SEND_MSG.getType());
wsBaseResp.setData(new WSFeedMemberResp(uid));
return wsBaseResp;
}
}

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.ObjectUtil;
import com.hula.common.annotation.RedissonLock;
import com.hula.common.domain.vo.req.CursorPageBaseReq;
import com.hula.common.domain.vo.res.CursorPageBaseResp;
@@ -103,14 +104,8 @@ public class ChatServiceImpl implements ChatService {
private void check(ChatMessageReq request, Long uid) {
Room room = roomCache.get(request.getRoomId());
if (room.isHotRoom()) {
// 全员群跳过校验
return;
}
if (room.isRoomFriend()) {
RoomFriend roomFriend = roomFriendDao.getByRoomId(request.getRoomId());
AssertUtil.equal(NormalOrNoEnum.NORMAL.getStatus(), roomFriend.getStatus(), "您已经被对方拉黑");
AssertUtil.isTrue(uid.equals(roomFriend.getUid1()) || uid.equals(roomFriend.getUid2()), "您已经被对方拉黑");
if (ObjectUtil.isNull(room)) {
throw new RuntimeException("您已经被移除该群!");
}
if (room.isRoomGroup()) {
RoomGroup roomGroup = roomGroupCache.get(request.getRoomId());
@@ -119,8 +114,12 @@ public class ChatServiceImpl implements ChatService {
if(member.getDeFriend()){
throw new RuntimeException("您已经屏蔽群聊!");
}
}
} else {
RoomFriend roomFriend = roomFriendDao.getByRoomId(request.getRoomId());
AssertUtil.isNotEmpty(roomFriend, "你们之间不是好友!");
AssertUtil.equal(NormalOrNoEnum.NORMAL.getStatus(), roomFriend.getStatus(), "您已经被对方拉黑");
AssertUtil.isTrue(uid.equals(roomFriend.getUid1()) || uid.equals(roomFriend.getUid2()), "您已经被对方拉黑");
}
}
@Override

View File

@@ -0,0 +1,69 @@
package com.hula.core.user.controller;
import com.hula.common.domain.vo.req.CursorPageBaseReq;
import com.hula.common.domain.vo.res.CursorPageBaseResp;
import com.hula.core.user.domain.vo.OperParam;
import com.hula.core.user.domain.vo.req.feed.FeedParam;
import com.hula.core.user.domain.vo.req.feed.FeedPermission;
import com.hula.core.user.domain.vo.req.feed.FeedVo;
import com.hula.core.user.service.FeedService;
import com.hula.domain.vo.res.ApiResult;
import com.hula.utils.RequestHolder;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import jakarta.validation.groups.Default;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
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;
/**
* 朋友圈功能 发布朋友圈、编辑朋友圈、设置谁可见、谁不可见、仅聊天、不看他、不让他看我
*/
@RestController
@RequestMapping("/feed/")
public class FeedController {
@Resource
private FeedService feedService;
@PostMapping("list")
@Operation(summary = "朋友圈列表")
public ApiResult<CursorPageBaseResp<FeedVo>> list(@Valid @RequestBody CursorPageBaseReq request) {
return ApiResult.success(feedService.getFeedPage(request, RequestHolder.get().getUid()));
}
@PostMapping("pushFeed")
@Operation(summary = "发布朋友圈")
public ApiResult<Boolean> pushFeed(@Valid @RequestBody FeedParam param) {
return ApiResult.success(feedService.pushFeed(RequestHolder.get().getUid(), param));
}
@GetMapping("getFeedPermission/{feedId}")
@Operation(summary = "查看朋友圈权限")
public ApiResult<FeedPermission> getFeedPermission(@PathVariable("feedId") Long feedId) {
return ApiResult.success(feedService.getFeedPermission(RequestHolder.get().getUid(), feedId));
}
@PostMapping("edit")
@Operation(summary = "编辑朋友圈")
public ApiResult<Boolean> editFeed(@Validated(value = {OperParam.Update.class, Default.class}) @RequestBody FeedParam param){
return ApiResult.success(feedService.editFeed(RequestHolder.get().getUid(), param));
}
@PostMapping("del/{feedId}")
@Operation(summary = "删除朋友圈")
public ApiResult<Boolean> delFeed(@PathVariable("feedId") Long feedId) {
return ApiResult.success(feedService.delFeed(feedId));
}
@GetMapping("detail/{feedId}")
@Operation(summary = "用户查看详情")
public ApiResult<FeedVo> feedDetail(@PathVariable("feedId") Long feedId) {
return ApiResult.success(feedService.feedDetail(feedId));
}
}

View File

@@ -1,7 +1,9 @@
package com.hula.core.user.controller;
import com.hula.core.chat.domain.vo.request.room.TargetParam;
import com.hula.core.chat.domain.vo.request.room.TargetVo;
import com.hula.core.chat.domain.vo.request.room.UserTargetRelParam;
import com.hula.core.user.domain.entity.Target;
import com.hula.core.user.service.TargetService;
import com.hula.core.user.service.UserTargetRelService;
import com.hula.domain.vo.res.ApiResult;
@@ -30,34 +32,34 @@ public class TargetController {
private UserTargetRelService userTargetRelService;
@PostMapping("/add")
public ApiResult save(@RequestBody TargetParam param){
public ApiResult<Boolean> save(@RequestBody TargetParam param){
return ApiResult.success(targetService.save(RequestHolder.get().getUid(), param));
}
@PostMapping("/edit")
public ApiResult edit(@RequestBody TargetParam param){
public ApiResult<Boolean> edit(@RequestBody TargetParam param){
return ApiResult.success(targetService.edit(param));
}
@GetMapping("/detail")
public ApiResult detail(@RequestParam("id")Long id){
public ApiResult<Target> detail(@RequestParam("id")Long id){
return ApiResult.success(targetService.detail(id));
}
@PostMapping("/del")
public ApiResult del(@RequestBody List<Long> ids){
public ApiResult<Boolean> del(@RequestBody List<Long> ids){
return ApiResult.success(targetService.removeByIds(ids));
}
@GetMapping("/rel/detail")
@Operation(summary = "查询好友的标签列表")
public ApiResult relDetail(@RequestParam("friendId") Long friendId) {
public ApiResult<List<TargetVo>> relDetail(@RequestParam("friendId") Long friendId) {
return ApiResult.success(userTargetRelService.detail(RequestHolder.get().getUid(), friendId));
}
@Operation(summary = "标签绑定修改")
@PostMapping("/rel/edit")
public ApiResult editTarget(@RequestBody UserTargetRelParam param){
public ApiResult<Boolean> editTarget(@RequestBody UserTargetRelParam param){
return ApiResult.success(userTargetRelService.editTarget(RequestHolder.get().getUid(), param));
}
}

View File

@@ -1,5 +1,6 @@
package com.hula.core.user.controller;
import com.hula.core.user.domain.entity.UserState;
import com.hula.core.user.service.UserStateService;
import com.hula.domain.vo.res.ApiResult;
import com.hula.utils.RequestHolder;
@@ -11,6 +12,8 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 用户在线状态管理
*/
@@ -23,13 +26,13 @@ public class UserStateController {
@PostMapping("changeState/{id}")
@Operation(summary = "用户状态改变")
public ApiResult changeState(@PathVariable("id") Long id){
public ApiResult<Boolean> changeState(@PathVariable("id") Long id){
return ApiResult.success(userStateService.changeState(RequestHolder.get().getUid(), id));
}
@GetMapping("list")
@Operation(summary = "获取所有用户状态")
public ApiResult list(){
public ApiResult<List<UserState>> list(){
return ApiResult.success(userStateService.list());
}
}

View File

@@ -0,0 +1,26 @@
package com.hula.core.user.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hula.common.domain.vo.req.CursorPageBaseReq;
import com.hula.common.domain.vo.res.CursorPageBaseResp;
import com.hula.common.utils.CursorUtils;
import com.hula.core.user.domain.entity.Feed;
import com.hula.core.user.domain.vo.req.feed.FeedVo;
import com.hula.core.user.mapper.FeedMapper;
import org.springframework.stereotype.Service;
/**
* 朋友圈基础信息
*/
@Service
public class FeedDao extends ServiceImpl<FeedMapper, Feed> {
public CursorPageBaseResp<Feed> getFeedPage(Long uid, CursorPageBaseReq request) {
return CursorUtils.getCursorPageByMysql(this, request, wrapper -> wrapper.eq(Feed::getUid, uid), Feed::getCreatedTime);
}
public FeedVo getDetail(Long id) {
return baseMapper.getDetail(id);
}
}

View File

@@ -0,0 +1,55 @@
package com.hula.core.user.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hula.core.user.domain.entity.FeedMedia;
import com.hula.core.user.mapper.FeedMediaMapper;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* 朋友圈素材
*/
@Service
public class FeedMediaDao extends ServiceImpl<FeedMediaMapper, FeedMedia> {
/**
* 批量添加朋友圈的资源的数据
* @param feedId 朋友圈id
* @param urls 素材地址
* @param type 0 纯文字 1 图片 2 视频
*/
public List<FeedMedia> batchSaveMedia(Long feedId, List<String> urls, Integer type){
List<FeedMedia> feedMediaList = new ArrayList<>();
for (int i = 0; i < urls.size(); i++) {
String url = urls.get(i);
FeedMedia feedMedia = new FeedMedia();
feedMedia.setSort(i);
feedMedia.setFeedId(feedId);
feedMedia.setUrl(url);
feedMediaList.add(feedMedia);
}
saveBatch(feedMediaList);
return feedMediaList;
}
/**
* 删除朋友圈的资源等消息
* @param feedId
* @return
*/
public boolean delMediaByFeedId(Long feedId) {
return remove(new LambdaQueryWrapper<FeedMedia>().eq(FeedMedia::getFeedId, feedId));
}
/**
* 通过id获取到朋友圈资源信息
* @param feedId
* @return
*/
public List<FeedMedia> getMediaByFeedId(Long feedId) {
return list(new LambdaQueryWrapper<FeedMedia>().eq(FeedMedia::getFeedId, feedId));
}
}

View File

@@ -0,0 +1,30 @@
package com.hula.core.user.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hula.core.user.domain.entity.FeedTarget;
import com.hula.core.user.mapper.FeedTargetMapper;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class FeedTargetDao extends ServiceImpl<FeedTargetMapper, FeedTarget> {
/**
* 删除朋友圈和标签的管理
* @param feedId
* @return
*/
public boolean delByFeedId(Long feedId) {
return remove(new LambdaQueryWrapper<FeedTarget>()
.eq(FeedTarget::getFeedId, feedId));
}
public List<FeedTarget> selectFeedTargets(Long feedId) {
LambdaQueryWrapper<FeedTarget> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(FeedTarget::getFeedId, feedId).select(FeedTarget::getTargetId, FeedTarget::getType);
return baseMapper.selectList(queryWrapper);
}
}

View File

@@ -1,14 +1,19 @@
package com.hula.core.user.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hula.common.domain.vo.req.CursorPageBaseReq;
import com.hula.common.domain.vo.res.CursorPageBaseResp;
import com.hula.common.utils.CursorUtils;
import com.hula.core.user.domain.entity.UserFriend;
import com.hula.core.user.mapper.UserFriendMapper;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
@@ -46,4 +51,87 @@ public class UserFriendDao extends ServiceImpl<UserFriendMapper, UserFriend> {
.select(UserFriend::getId)
.list();
}
/**
* 查询他不看我的好友
* @param uid 操作人
* @return
*/
public List<Long> getHideLookMe(Long uid) {
return baseMapper.selectObjs(new LambdaQueryWrapper<UserFriend>()
.select(UserFriend::getUid)
.eq(UserFriend::getFriendUid, uid)
.eq(UserFriend::getHideTheirPosts, 1))
.stream()
.map(o -> (Long) o)
.collect(Collectors.toList());
}
/**
* 查询不让他看我的好友
* @param uid 操作人
* @return
*/
public List<Long> getHideMyPosts(Long uid) {
return baseMapper.selectObjs(new LambdaQueryWrapper<UserFriend>()
.select(UserFriend::getFriendUid)
.eq(UserFriend::getUid, uid)
.eq(UserFriend::getHideMyPosts, 1))
.stream()
.map(o -> (Long) o)
.collect(Collectors.toList());
}
/**
* 查询我不看他的好友
* @param uid 操作人
* @return
*/
public List<Long> getHideTheirPosts(Long uid) {
return baseMapper.selectObjs(new LambdaQueryWrapper<UserFriend>()
.select(UserFriend::getFriendUid)
.eq(UserFriend::getUid, uid)
.eq(UserFriend::getHideTheirPosts, 1))
.stream()
.map(o -> (Long) o)
.collect(Collectors.toList());
}
/**
* 查询仅聊天的好友
* @param uid 操作人
* @return
*/
public List<Long> getJustChat(Long uid) {
return baseMapper.selectObjs(new LambdaQueryWrapper<UserFriend>()
.select(UserFriend::getFriendUid)
.eq(UserFriend::getUid, uid)
.eq(UserFriend::getHideMyPosts, 1)
.eq(UserFriend::getHideTheirPosts, 1))
.stream()
.map(o -> (Long) o)
.collect(Collectors.toList());
}
/**
* 获取到当前登录人员的所有的好友的信息
* @return
*/
@Cacheable(cacheNames = "user", key = "'friends'+#uid")
public List<Long> getAllFriendIdsByUid(Long uid){
LambdaQueryWrapper<UserFriend> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.select(UserFriend::getFriendUid)
.eq(UserFriend::getUid, uid);
return baseMapper.selectObjs(queryWrapper).stream().map(obj -> (Long) obj).collect(Collectors.toList());
}
/**
* 当uid的朋友改变后需要调用此方法
* @param uid
* @return
*/
@CacheEvict(cacheNames = "user", key = "'findGroup'+#uid")
public List<Long> evictGroup(Long uid) {
return null;
}
}

View File

@@ -0,0 +1,35 @@
package com.hula.core.user.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 朋友圈表
*/
@TableName("feed")
@Data
public class Feed implements Serializable {
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
@Schema(description = "发布人id")
private Long uid;
@Schema(description = "朋友圈文案")
private String content;
@Schema(description = "privacy -> 私密 open -> 公开 partVisible -> 部分可见 notAnyone -> 不给谁看")
private String permission;
@Schema(description = "朋友圈内容类型0: 纯文字 1: 图片, 2: 视频)")
private Integer mediaType;
@Schema(description = "创建时间")
private LocalDateTime createdTime;
}

View File

@@ -0,0 +1,29 @@
package com.hula.core.user.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* 朋友圈发的图片或者视频表
*/
@TableName("feed_media")
@Data
public class FeedMedia implements Serializable {
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
@Schema(description = "朋友圈ID")
private Long feedId;
@Schema(description = "图片或视频的路径")
private String url;
@Schema(description = "排序")
private Integer sort;
}

View File

@@ -0,0 +1,31 @@
package com.hula.core.user.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* 朋友圈标签、用户可见表
*/
@TableName("feed_target")
@Data
public class FeedTarget implements Serializable {
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
@Schema(description = "朋友圈ID")
private Long feedId;
/**
* @see Target
*/
@Schema(description = "标签ID")
private Long targetId;
@Schema(description = "1 -> 关联标签id 2 -> 关联用户id")
private Integer type;
}

View File

@@ -47,6 +47,18 @@ public class UserFriend implements Serializable {
*/
private String remark;
/**
* 不让他看我0-允许1-禁止)
*/
@TableField("hide_my_posts")
private Boolean hideMyPosts;
/**
* 不看他0-允许1-禁止)
*/
@TableField("hide_their_posts")
private Boolean hideTheirPosts;
/**
* 逻辑删除(0-正常,1-删除)
*/

View File

@@ -0,0 +1,38 @@
package com.hula.core.user.domain.enums;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.io.Serializable;
import java.util.stream.Stream;
/**
* 朋友圈的枚举
*
* @author 乾乾
*/
@RequiredArgsConstructor
@Getter
public enum FeedEnum implements Serializable {
WORD(0, "纯文字"),
IMAGE(1, "图片"),
VIDEO(2, "视频");
/**
* 根据当前枚举的name匹配
*/
public static FeedEnum match(Integer val) {
return Stream.of(values()).parallel().filter(item -> item.getType().equals(val)).findAny().orElse(WORD);
}
public static FeedEnum get(Integer val) {
return match(val);
}
/**
* 朋友圈类型
*/
private final Integer type;
private final String name;
}

View File

@@ -0,0 +1,39 @@
package com.hula.core.user.domain.enums;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.io.Serializable;
import java.util.stream.Stream;
/**
* 朋友圈权限的枚举
*
* @author 乾乾
*/
@RequiredArgsConstructor
@Getter
public enum FeedPermissionEnum implements Serializable {
privacy("privacy", "私密"),
open("open", "公开"),
notAnyone("notAnyone", "不给谁看"),
partVisible("partVisible", "部分可见");
/**
* 根据当前枚举的name匹配
*/
public static FeedPermissionEnum match(String val) {
return Stream.of(values()).parallel().filter(item -> item.getType().equals(val)).findAny().orElse(open);
}
public static FeedPermissionEnum get(String val) {
return match(val);
}
/**
* 朋友圈类型
*/
private final String type;
private final String name;
}

View File

@@ -35,6 +35,7 @@ public enum WSRespTypeEnum {
MSG_RECALL("msgRecall", "消息撤回", WSMsgRecall.class),
ROOM_GROUP_NOTICE_MSG("roomGroupNoticeMsg", "群公告消息", null),
ROOM_GROUP_NOTICE_READ_MSG("roomGroupNoticeReadMsg", "群公告已读", null),
FEED_SEND_MSG("feedSendMsg", "朋友圈发布", null),
ROOM_DISSOLUTION("roomDissolution", "群解散", null),
ROOM_NOTIFICATION("roomNotification", "会话消息接收类型改变", null),
REQUEST_NEW_FRIEND("requestNewFriend", "好友申请", WSFriendApply.class),

View File

@@ -0,0 +1,38 @@
package com.hula.core.user.domain.vo;
import jakarta.validation.groups.Default;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* OperParam 操作类
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class OperParam implements Serializable{
private static final long serialVersionUID = 1L;
/**
* 保存和缺省验证组
*/
public interface Save extends Default {
}
/**
* 更新和缺省验证组
*/
public interface Update extends Default {
}
/**
* 删除和缺省验证组
*/
public interface Delete extends Default {
}
}

View File

@@ -0,0 +1,52 @@
package com.hula.core.user.domain.vo.req.feed;
import com.hula.core.user.domain.enums.FeedEnum;
import com.hula.core.user.domain.enums.FeedPermissionEnum;
import com.hula.core.user.domain.vo.OperParam;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
/**
* 发布朋友圈的参数
*/
@Data
public class FeedParam extends OperParam {
@NotNull(message = "请选择朋友圈", groups = {Update.class})
private Long id;
@Schema(description = "朋友圈文案")
private String content;
/**
* @see FeedEnum
*/
@Schema(description = "发布内容的类型")
@Min(value = 0, message = "请选择正确的素材类型")
@Max(value = 2, message = "请选择正确的素材类型")
private Integer mediaType;
@Schema(description = "发布的图片的url")
private List<String> urls;
@Schema(description = "发布视频的url")
private String videoUrl;
/**
* @see FeedPermissionEnum
*/
@Schema(description = "privacy -> 私密 open -> 公开 partVisible -> 部分可见 notAnyone -> 不给谁看")
@Min(value = 0, message = "请选择正确的可见类型")
private String permission;
@Schema(description = "permission 限制的用户id")
private List<Long> uidList;
@Schema(description = "permission 限制的标签id")
private List<Long> targetIds;
}

View File

@@ -0,0 +1,28 @@
package com.hula.core.user.domain.vo.req.feed;
import com.hula.core.user.domain.entity.Feed;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* 发布朋友圈的返回体
*/
@Data
public class FeedPermission extends Feed {
@Schema(description = "permission 限制的用户id")
private List<Long> uidList;
@Schema(description = "permission 限制的标签id")
private List<Long> targetIds;
public FeedPermission() {
}
public FeedPermission(List<Long> uidList, List<Long> targetIds) {
this.uidList = uidList;
this.targetIds = targetIds;
}
}

View File

@@ -0,0 +1,17 @@
package com.hula.core.user.domain.vo.req.feed;
import com.hula.core.user.domain.entity.Feed;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* 发布朋友圈的返回体
*/
@Data
public class FeedVo extends Feed {
@Schema(description = "发布的内容的url")
private List<String> urls;
}

View File

@@ -0,0 +1,21 @@
package com.hula.core.user.domain.vo.resp.ws;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 朋友圈发布推送的消息
*/
@Data
public class WSFeedMemberResp {
@Schema(description = "发布人")
private Long uid;
public WSFeedMemberResp() {
}
public WSFeedMemberResp(Long uid) {
this.uid = uid;
}
}

View File

@@ -0,0 +1,10 @@
package com.hula.core.user.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hula.core.user.domain.entity.Feed;
import com.hula.core.user.domain.vo.req.feed.FeedVo;
public interface FeedMapper extends BaseMapper<Feed> {
FeedVo getDetail(Long id);
}

View File

@@ -0,0 +1,7 @@
package com.hula.core.user.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hula.core.user.domain.entity.FeedMedia;
public interface FeedMediaMapper extends BaseMapper<FeedMedia> {
}

View File

@@ -0,0 +1,7 @@
package com.hula.core.user.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hula.core.user.domain.entity.FeedTarget;
public interface FeedTargetMapper extends BaseMapper<FeedTarget> {
}

View File

@@ -0,0 +1,61 @@
package com.hula.core.user.service;
import com.hula.common.domain.vo.req.CursorPageBaseReq;
import com.hula.common.domain.vo.res.CursorPageBaseResp;
import com.hula.core.user.domain.vo.req.feed.FeedParam;
import com.hula.core.user.domain.vo.req.feed.FeedPermission;
import com.hula.core.user.domain.vo.req.feed.FeedVo;
import org.springframework.transaction.annotation.Transactional;
/**
* 朋友圈核心服务
*/
public interface FeedService {
/**
* 游标刷新朋友圈列表
* @param request
* @param uid
*/
CursorPageBaseResp<FeedVo> getFeedPage(CursorPageBaseReq request, Long uid);
/**
* 发布朋友圈
* @param uid 操作人
* @param param
* @return
*/
Boolean pushFeed(Long uid, FeedParam param);
/**
* 删除朋友圈
* @param feedId
* @return
*/
@Transactional
Boolean delFeed(Long feedId);
FeedVo getDetail(Long id);
/**
* 查看朋友圈
* @param feedId
* @return
*/
FeedVo feedDetail(Long feedId);
/**
* 获取朋友圈的可见权限
* @param uid 操作人
* @param feedId
* @return
*/
FeedPermission getFeedPermission(Long uid, Long feedId);
/**
* 修改朋友圈的信息
* @param param
* @return
*/
Boolean editFeed(Long uid, FeedParam param);
}

View File

@@ -20,5 +20,15 @@ public interface UserTargetRelService {
*/
List<Long> getRelTarget(Long uid, Long friendId);
/**
* 查询标签详情
* @return
*/
List<TargetVo> detail(Long uid, Long friendId);
/**
* 获取到朋友圈可见的人员
* @param targetIds 标签集合
*/
List<Long> getFeedUidList(List<Long> targetIds, Long uid);
}

View File

@@ -3,6 +3,7 @@ package com.hula.core.user.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.core.type.TypeReference;
import com.hula.common.constant.RedisKey;
import com.hula.core.user.domain.entity.Config;
import com.hula.core.user.domain.vo.req.config.ConfigParam;
@@ -75,7 +76,7 @@ public class ConfigServiceImpl implements ConfigService {
*/
public String get(String name) {
loadingConfigCache();
String data = (String) RedisUtils.hget(RedisKey.CONFIG_KEY, name);
String data = RedisUtils.hget(RedisKey.CONFIG_KEY, name);
if (ObjectUtil.isNull(data) || StrUtil.isBlank(data)) {
// 没有找到数据
return "";

View File

@@ -0,0 +1,324 @@
package com.hula.core.user.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.hula.common.constant.RedisKey;
import com.hula.common.domain.vo.req.CursorPageBaseReq;
import com.hula.common.domain.vo.res.CursorPageBaseResp;
import com.hula.core.chat.service.adapter.MemberAdapter;
import com.hula.core.user.dao.FeedDao;
import com.hula.core.user.dao.FeedMediaDao;
import com.hula.core.user.dao.FeedTargetDao;
import com.hula.core.user.dao.UserFriendDao;
import com.hula.core.user.domain.entity.Feed;
import com.hula.core.user.domain.entity.FeedMedia;
import com.hula.core.user.domain.entity.FeedTarget;
import com.hula.core.user.domain.enums.FeedEnum;
import com.hula.core.user.domain.enums.FeedPermissionEnum;
import com.hula.core.user.domain.vo.req.feed.FeedParam;
import com.hula.core.user.domain.vo.req.feed.FeedPermission;
import com.hula.core.user.domain.vo.req.feed.FeedVo;
import com.hula.core.user.service.FeedService;
import com.hula.core.user.service.UserTargetRelService;
import com.hula.utils.RedisUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 朋友圈核心服务
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class FeedServiceImpl implements FeedService {
private final PushService pushService;
private final FeedDao feedDao;
private final FeedMediaDao feedMediaDao;
private final UserTargetRelService userTargetRelService;
private final UserFriendDao userFriendDao;
private final FeedTargetDao feedTargetDao;
/**
* @param feedList 朋友圈基础内容
* @return
*/
private List<FeedVo> buildFeedResp(List<Feed> feedList) {
List<FeedVo> feedVos = new ArrayList<>();
for (Feed feed : feedList) {
FeedVo feedVo = new FeedVo();
BeanUtil.copyProperties(feed, feedVo);
if(!feed.getMediaType().equals(FeedEnum.WORD.getType())){
List<FeedMedia> mediaList = RedisUtils.hget(RedisKey.USER_FEED_STRING, feed.getId().toString());
if(CollUtil.isEmpty(mediaList)){
mediaList = feedMediaDao.getMediaByFeedId(feed.getId());
RedisUtils.hset(RedisKey.USER_FEED_STRING, feed.getId().toString(), mediaList);
}
feedVo.setUrls(mediaList.stream().sorted(Comparator.comparingInt(FeedMedia::getSort)).map(FeedMedia::getUrl).collect(Collectors.toList()));
}
feedVos.add(feedVo);
}
return feedVos;
}
/**
* 游标刷新朋友圈列表
* @param request
* @param uid
*/
@Override
public CursorPageBaseResp<FeedVo> getFeedPage(CursorPageBaseReq request, Long uid) {
// 1. 查询朋友圈列表
CursorPageBaseResp<Feed> page = feedDao.getFeedPage(uid, request);
// 2. 合并朋友圈内容
List<FeedVo> result = buildFeedResp(page.getList());
return CursorPageBaseResp.init(page, result, page.getTotal());
}
/**
* 发布朋友圈
*/
@Transactional
public Boolean pushFeed(Long uid, FeedParam param){
// 1. 保存朋友圈
Feed feed = new Feed();
feed.setUid(uid);
feed.setContent(param.getContent());
feed.setMediaType(param.getMediaType());
feed.setPermission(param.getPermission());
feedDao.save(feed);
// 2. 告知所有人我的朋友圈更新了,所有人朋友圈按钮出现红点 + 头像
saveFeed(param, uid, feed);
return true;
}
/**
* 保存朋友圈权限+素材
* @param param 参数
* @param uid 操作人
* @param feed 朋友圈
*/
private void saveFeed(FeedParam param, Long uid, Feed feed) {
List<Long> pushList = new ArrayList<>();
List<FeedTarget> feedTargets = new ArrayList<>();
List<FeedMedia> mediaList = new ArrayList<>();
switch (FeedPermissionEnum.get(param.getPermission())){
case open -> {
// 1. 查询所有好友,排除【不让他看我, 他不看我】的好友
List<Long> uidList = userFriendDao.getAllFriendIdsByUid(uid);
uidList.removeAll(userFriendDao.getHideMyPosts(uid));
uidList.removeAll(userFriendDao.getHideLookMe(uid));
pushList.addAll(uidList);
}
case privacy -> pushList.add(uid);
case notAnyone -> {
// 2.1 查询所有好友, 排除【选中的标签+选中的好友+不让他看我+他不看我】
List<Long> uidList = userFriendDao.getAllFriendIdsByUid(uid);
if(CollUtil.isNotEmpty(param.getTargetIds())){
feedTargets.addAll(saveFeedTarget(param.getTargetIds(), feed.getId(), uid));
uidList.removeAll(userTargetRelService.getFeedUidList(param.getTargetIds(), uid));
}
if(CollUtil.isNotEmpty(param.getUidList())){
feedTargets.addAll(saveFeedUser(param.getUidList(), feed.getId(), uid));
uidList.removeAll(param.getUidList());
}
uidList.removeAll(userFriendDao.getHideMyPosts(uid));
uidList.removeAll(userFriendDao.getHideLookMe(uid));
pushList.addAll(uidList);
}
case partVisible -> {
// 2.2 解析标签映射的好友 + 选中的好友;同时排除【不让他看我, 他不看我】
Set<Long> uidList = new HashSet<>();
if(CollUtil.isNotEmpty(param.getTargetIds())){
feedTargets.addAll(saveFeedTarget(param.getTargetIds(), feed.getId(), uid));
uidList.addAll(userTargetRelService.getFeedUidList(param.getTargetIds(), uid));
}
if(CollUtil.isNotEmpty(param.getUidList())){
feedTargets.addAll(saveFeedUser(param.getUidList(), feed.getId(), uid));
uidList.addAll(param.getUidList());
}
uidList.removeAll(userFriendDao.getHideMyPosts(uid));
uidList.removeAll(userFriendDao.getHideLookMe(uid));
pushList.addAll(uidList);
}
}
// 2. 处理不同类型的朋友圈内容
switch (FeedEnum.get(param.getMediaType())){
case WORD -> log.info("发布了一条纯文字朋友圈~~");
case IMAGE, VIDEO -> {
List<String> urls = param.getUrls();
if (CollUtil.isEmpty(urls)){
throw new RuntimeException("请至少上传一条素材!");
}
mediaList = feedMediaDao.batchSaveMedia(feed.getId(), urls, param.getMediaType());
}
}
// 3. 缓存权限+素材 告知 pushList 我发布了朋友圈
RedisUtils.hdel(RedisKey.FEED_MEDIA, feed.getId());
RedisUtils.hdel(RedisKey.FEED_TARGET, feed.getId());
RedisUtils.hset(RedisKey.FEED_MEDIA, feed.getId().toString(), mediaList);
RedisUtils.hset(RedisKey.FEED_TARGET, feed.getId().toString(), feedTargets);
pushService.sendPushMsg(MemberAdapter.buildFeedPushWS(uid), pushList, uid);
}
/**
* 保存朋友圈的标签
* @param targetIds 标签id
* @param feedId 朋友圈ID
* @param uid 用户id
*/
private List<FeedTarget> saveFeedTarget(List<Long> targetIds, Long feedId, Long uid) {
List<FeedTarget> feedTargetList = new ArrayList<>();
targetIds.forEach(item -> {
FeedTarget feedTarget = new FeedTarget();
feedTarget.setFeedId(feedId);
feedTarget.setTargetId(item);
feedTarget.setType(1);
feedTargetList.add(feedTarget);
});
feedTargetDao.saveBatch(feedTargetList);
return feedTargetList;
}
/**
* 保存朋友圈关联的用户id
* @param uidList 用户id集合
* @param feedId 朋友圈id
* @param uid 操作人id
*/
private List<FeedTarget> saveFeedUser(List<Long> uidList, Long feedId, Long uid) {
List<FeedTarget> feedTargetList = new ArrayList<>();
uidList.forEach(item -> {
FeedTarget feedTarget = new FeedTarget();
feedTarget.setFeedId(feedId);
feedTarget.setTargetId(item);
feedTarget.setType(2);
feedTargetList.add(feedTarget);
});
feedTargetDao.saveBatch(feedTargetList);
return feedTargetList;
}
/**
* 删除朋友圈
* @param feedId
* @return
*/
@Transactional
public Boolean delFeed(Long feedId){
// 1. 首先将朋友圈素材、权限删除
feedMediaDao.delMediaByFeedId(feedId);
feedTargetDao.delByFeedId(feedId);
feedDao.removeById(feedId);
// 2. 清空缓存
RedisUtils.hdel(RedisKey.FEED_TARGET, feedId);
RedisUtils.hdel(RedisKey.FEED_MEDIA, feedId);
return true;
}
public FeedVo getDetail(Long id) {
return feedDao.getDetail(id);
}
/**
* 查看朋友圈
* @param feedId
* @return
*/
public FeedVo feedDetail(Long feedId) {
FeedVo feed = getDetail(feedId);
if(feed.getMediaType().equals(FeedEnum.WORD.getType())){
List<FeedMedia> feedMediaList = RedisUtils.hget(RedisKey.FEED_MEDIA, feedId.toString());
if(CollUtil.isEmpty(feedMediaList)){
feedMediaList = feedMediaDao.getMediaByFeedId(feedId);
}
if (CollUtil.isNotEmpty(feedMediaList)){
feed.setUrls(feedMediaList.stream().sorted(Comparator.comparingInt(FeedMedia::getSort)).map(FeedMedia::getUrl).collect(Collectors.toList()));
}
}
return feed;
}
/**
* 获取朋友圈的可见权限
* @param feedId
* @return
*/
public FeedPermission getFeedPermission(Long uid, Long feedId) {
FeedVo feedVo = feedDetail(feedId);
if(ObjectUtil.isNull(feedVo)){
throw new RuntimeException("请选择朋友圈!");
}
if(!feedVo.getUid().equals(uid)){
throw new RuntimeException("只能查看自己的朋友圈!");
}
// 处理朋友圈权限
if(feedVo.getPermission().equals(FeedPermissionEnum.open.getType()) && feedVo.getPermission().equals(FeedPermissionEnum.privacy.getType())){
List<FeedTarget> feedTargets = RedisUtils.hget(RedisKey.FEED_TARGET, feedId.toString());
if(CollUtil.isEmpty(feedTargets)){
feedTargets = feedTargetDao.selectFeedTargets(feedId);
}
List<Long> taggetList = feedTargets.stream().filter(item -> item.getType().equals(1)).map(FeedTarget::getTargetId).collect(Collectors.toUnmodifiableList());
List<Long> userList = feedTargets.stream().filter(item -> item.getType().equals(2)).map(FeedTarget::getTargetId).collect(Collectors.toUnmodifiableList());
return new FeedPermission(taggetList, userList);
}
return new FeedPermission();
}
/**
* 修改朋友圈的信息
* @param param
* @return
*/
public Boolean editFeed(Long uid, FeedParam param){
Feed feed = feedDao.getById(param.getId());
if(ObjectUtil.isNull(feed)){
throw new RuntimeException("请选择一条朋友圈!");
}
if(!feed.getUid().equals(uid)){
throw new RuntimeException("只能编辑自己的朋友圈!");
}
// 1. 更新朋友圈基础信息
feed.setMediaType(param.getMediaType());
feed.setPermission(param.getPermission());
feed.setContent(param.getContent());
feedDao.updateById(feed);
// 2. 删除之前的权限+素材
feedTargetDao.delByFeedId(feed.getId());
feedMediaDao.delMediaByFeedId(feed.getId());
// 3. 更新朋友圈的权限+素材
saveFeed(param, uid, feed);
return true;
}
}

View File

@@ -1,6 +1,7 @@
package com.hula.core.user.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hula.common.annotation.RedissonLock;
import com.hula.core.user.domain.entity.UserTargetRel;
import com.hula.core.chat.domain.vo.request.room.TargetVo;
@@ -14,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@@ -69,4 +71,19 @@ public class UserTargetRelServiceImpl implements UserTargetRelService {
}
return new ArrayList<>();
}
/**
* 获取到朋友圈可见的人员
* @param targetIds 标签集合
* @return
*/
public List<Long> getFeedUidList(List<Long> targetIds, Long uid) {
return userTargetRelDao.getBaseMapper().selectObjs(new LambdaQueryWrapper<UserTargetRel>()
.select(UserTargetRel::getFriendId)
.in(UserTargetRel::getTargetId, targetIds)
.eq(UserTargetRel::getUid, uid))
.stream()
.map(o -> (Long) o)
.collect(Collectors.toList());
}
}

View File

@@ -0,0 +1,9 @@
<?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.hula.core.user.mapper.TargetMapper">
<select id="getDetail" resultType="com.hula.core.user.mapper.FeedMapper">
SELECT content, uid, media_type, created_time, id
FROM feed WHERE id = #{id}
</select>
</mapper>

View File

@@ -11,7 +11,7 @@
Target Server Version : 80031 (8.0.31)
File Encoding : 65001
Date: 27/02/2025 18:20:24
Date: 03/03/2025 13:20:44
*/
SET NAMES utf8mb4;
@@ -22,18 +22,18 @@ SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
DROP TABLE IF EXISTS `announcements`;
CREATE TABLE `announcements` (
`id` bigint NOT NULL AUTO_INCREMENT,
`room_id` bigint NOT NULL COMMENT '群id',
`u_id` bigint NOT NULL COMMENT '发布者id',
`content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '公告内容',
`publish_time` datetime NOT NULL COMMENT '发布时间',
`created_by` bigint NOT NULL COMMENT '创建者',
`created_time` datetime NOT NULL COMMENT '创建时间',
`updated_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天公告表' ROW_FORMAT = Dynamic;
`id` bigint NOT NULL AUTO_INCREMENT,
`room_id` bigint NOT NULL COMMENT '群id',
`u_id` bigint NOT NULL COMMENT '发布者id',
`content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '公告内容',
`publish_time` datetime NOT NULL COMMENT '发布时间',
`created_by` bigint NOT NULL COMMENT '创建者',
`created_time` datetime NOT NULL COMMENT '创建时间',
`updated_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天公告表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of announcements
@@ -44,17 +44,17 @@ CREATE TABLE `announcements` (
-- ----------------------------
DROP TABLE IF EXISTS `announcements_read_records`;
CREATE TABLE `announcements_read_records` (
`id` bigint NOT NULL,
`announcements_id` bigint NOT NULL COMMENT '公告id',
`u_id` bigint NOT NULL COMMENT '阅读人id',
`is_check` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否已读 0未读 1已读',
`created_by` bigint NOT NULL COMMENT '创建者',
`created_time` datetime NOT NULL COMMENT '创建时间',
`updated_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`is_del` tinyint(1) NOT NULL COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '公告是否已读表' ROW_FORMAT = Dynamic;
`id` bigint NOT NULL,
`announcements_id` bigint NOT NULL COMMENT '公告id',
`u_id` bigint NOT NULL COMMENT '阅读人id',
`is_check` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否已读 0未读 1已读',
`created_by` bigint NOT NULL COMMENT '创建者',
`created_time` datetime NOT NULL COMMENT '创建时间',
`updated_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`is_del` tinyint(1) NOT NULL COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '公告是否已读表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of announcements_read_records
@@ -65,40 +65,69 @@ CREATE TABLE `announcements_read_records` (
-- ----------------------------
DROP TABLE IF EXISTS `black`;
CREATE TABLE `black` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`type` int NOT NULL COMMENT '拉黑目标类型 1.ip 2uid',
`target` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '拉黑目标',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `idx_type_target`(`type` ASC, `target` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '黑名单' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`type` int NOT NULL COMMENT '拉黑目标类型 1.ip 2uid',
`target` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '拉黑目标',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `idx_type_target`(`type` ASC, `target` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '黑名单' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of black
-- ----------------------------
-- ----------------------------
-- Table structure for config
-- ----------------------------
DROP TABLE IF EXISTS `config`;
CREATE TABLE `config` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '参数主键',
`type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '类型',
`config_name` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '参数名称',
`config_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '参数键名',
`config_value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '参数键值',
`is_del` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `key`(`config_key` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 333 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '参数配置表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of config
-- ----------------------------
INSERT INTO `config` VALUES (1, 'system', '{\"title\":\"系统名称\",\"componentType\":\"text\",\"value\":\"Hula-IM\",\"configKey\":\"systemName\",\"type\":\"system\"}', 'systemName', 'Hula-IM', 0);
INSERT INTO `config` VALUES (2, 'system', '{\"title\":\"系统Logo\",\"componentType\":\"text\",\"value\":\"/static/img/Iogo.png\",\"configKey\":\"logo\",\"type\":\"system\"}', 'logo', '/static/img/Iogo.png', 0);
INSERT INTO `config` VALUES (3, 'qiniu_up_config', '{\"title\":\"空间域名 Domain\",\"componentType\":\"text\",\"value\":\"https://upload-z2.qiniup.com\",\"configKey\":\"qnUploadUrl\",\"type\":\"qiniu_up_config\"}', 'qnUploadUrl', 'https://upload-z2.qiniup.com', 0);
INSERT INTO `config` VALUES (4, 'qiniu_up_config', '{\"title\":\"accessKey\",\"componentType\":\"text\",\"value\":\"8si6G12t2MG9IOdkNDYmL0vGAYFTW-rHl4LgA5_\",\"configKey\":\"qnAccessKey\",\"type\":\"qiniu_up_config\"}', 'qnAccessKey', '8si6G12t2MG9IOdkNDYmL0vGAYFTW-rHl4LgA5_', 0);
INSERT INTO `config` VALUES (5, 'qiniu_up_config', '{\"title\":\"SecretKey\",\"componentType\":\"text\",\"value\":\"MLzT2U2daTXFDEG9PuAy4TnvfR1oXvK2Yipm_eS9\",\"configKey\":\"qnSecretKey\",\"type\":\"qiniu_up_config\"}', 'qnSecretKey', 'MLzT2U2daTXFDEG9PuAy4TnvfR1oXvK2Yipm_eS9', 0);
INSERT INTO `config` VALUES (6, 'qiniu_up_config', '{\"title\":\"存储空间名称\",\"componentType\":\"text\",\"value\":\"hula\",\"configKey\":\"qnStorageName\",\"type\":\"qiniu_up_config\"}', 'qnStorageName', 'hula', 0);
INSERT INTO `config` VALUES (7, 'qiniu_up_config', '{\"title\":\"七牛云CDN访问图片用的\",\"componentType\":\"text\",\"value\":\"https://file.hula.com/\",\"configKey\":\"qnStorageCDN\",\"type\":\"qiniu_up_config\"}', 'qnStorageCDN', 'https://file.hula.com/', 0);
INSERT INTO `config` VALUES (8, 'system', '{\"title\":\"大群ID\",\"componentType\":\"text\",\"value\":\"1\",\"configKey\":\"roomGroupId\",\"type\":\"system\"}', 'roomGroupId', '1', 0);
INSERT INTO `config` VALUES (9, 'qiniu_up_config', '{\"title\":\"超过多少MB开启分片上传\",\"componentType\":\"text\",\"value\":\"500\",\"configKey\":\"turnSharSize\",\"type\":\"qiniu_up_config\"}', 'turnSharSize', '500', 0);
INSERT INTO `config` VALUES (10, 'qiniu_up_config', '{\"title\":\"分片大小\",\"componentType\":\"text\",\"value\":\"50\",\"configKey\":\"fragmentSize\",\"type\":\"shop_config\"}', 'fragmentSize', '50', 0);
-- ----------------------------
-- Table structure for contact
-- ----------------------------
DROP TABLE IF EXISTS `contact`;
CREATE TABLE `contact` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT 'uid',
`room_id` bigint NOT NULL COMMENT '房间id',
`mute_notification` tinyint NOT NULL DEFAULT 0 COMMENT '免打扰',
`read_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '阅读到的时间',
`top` tinyint NOT NULL DEFAULT 0 COMMENT '置顶消息',
`active_time` datetime(3) NULL DEFAULT NULL COMMENT '会话内消息最后更新的时间(只有普通会话需要维护,全员会话不需要维护)',
`last_msg_id` bigint NULL DEFAULT NULL COMMENT '会话最新消息id',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uniq_uid_room_id`(`uid` ASC, `room_id` ASC) USING BTREE,
INDEX `idx_room_id_read_time`(`room_id` ASC, `read_time` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12053 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会话列表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT 'uid',
`room_id` bigint NOT NULL COMMENT '房间id',
`mute_notification` tinyint NOT NULL DEFAULT 0 COMMENT '免打扰',
`read_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '阅读到的时间',
`top` tinyint NOT NULL DEFAULT 0 COMMENT '置顶消息',
`active_time` datetime(3) NULL DEFAULT NULL COMMENT '会话内消息最后更新的时间(只有普通会话需要维护,全员会话不需要维护)',
`last_msg_id` bigint NULL DEFAULT NULL COMMENT '会话最新消息id',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uniq_uid_room_id`(`uid` ASC, `room_id` ASC) USING BTREE,
INDEX `idx_room_id_read_time`(`room_id` ASC, `read_time` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12053 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会话列表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of contact
@@ -106,25 +135,76 @@ CREATE TABLE `contact` (
INSERT INTO `contact` VALUES (1, 20018, 1, 0, '2024-11-16 13:10:46.646', 0, NULL, NULL, '2024-11-16 12:12:49.035', '2025-02-25 15:07:03.944');
INSERT INTO `contact` VALUES (2, 20000, 1, 0, '2025-02-27 18:17:15.866', 0, NULL, NULL, '2024-11-16 12:12:49.171', '2025-02-27 18:17:15.903');
-- ----------------------------
-- Table structure for feed
-- ----------------------------
DROP TABLE IF EXISTS `feed`;
CREATE TABLE `feed` (
`id` bigint NOT NULL,
`u_id` bigint NOT NULL COMMENT '用户id',
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '朋友圈文案',
`permission` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL DEFAULT '1' COMMENT 'privacy -> 私密 open -> 公开 partVisible -> 部分可见 notAnyone -> 不给谁看',
`media_type` tinyint NULL DEFAULT NULL COMMENT '朋友圈内容类型0: 纯文字 1: 图片, 2: 视频)',
`created_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `uid`(`u_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '朋友圈表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of feed
-- ----------------------------
-- ----------------------------
-- Table structure for feed_media
-- ----------------------------
DROP TABLE IF EXISTS `feed_media`;
CREATE TABLE `feed_media` (
`id` bigint NOT NULL,
`feed_id` bigint NOT NULL COMMENT '朋友圈id',
`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '图片或视频的路径',
`sort` int NOT NULL COMMENT '排序',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '朋友圈资源表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of feed_media
-- ----------------------------
-- ----------------------------
-- Table structure for feed_target
-- ----------------------------
DROP TABLE IF EXISTS `feed_target`;
CREATE TABLE `feed_target` (
`id` bigint NOT NULL,
`type` tinyint NOT NULL DEFAULT 1 COMMENT '1 -> 关联标签id 2 -> 关联用户id',
`feed_id` bigint NOT NULL COMMENT '朋友圈id',
`target_id` bigint NOT NULL COMMENT '标签id',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '朋友圈可见表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of feed_target
-- ----------------------------
-- ----------------------------
-- Table structure for group_member
-- ----------------------------
DROP TABLE IF EXISTS `group_member`;
CREATE TABLE `group_member` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`group_id` bigint NOT NULL COMMENT '群组id',
`uid` bigint NOT NULL COMMENT '成员uid',
`role` int NOT NULL COMMENT '成员角色 1群主 2管理员 3普通成员',
`remark` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '群备注',
`de_friend` tinyint NOT NULL DEFAULT 0 COMMENT '屏蔽群 1 -> 屏蔽 0 -> 正常',
`my_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '我的群昵称',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_group_id_role`(`group_id` ASC, `role` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 79 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '群成员表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`group_id` bigint NOT NULL COMMENT '群组id',
`uid` bigint NOT NULL COMMENT '成员uid',
`role` int NOT NULL COMMENT '成员角色 1群主 2管理员 3普通成员',
`remark` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '群备注',
`de_friend` tinyint NOT NULL DEFAULT 0 COMMENT '屏蔽群 1 -> 屏蔽 0 -> 正常',
`my_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '我的群昵称',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_group_id_role`(`group_id` ASC, `role` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 79 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '群成员表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of group_member
@@ -141,16 +221,16 @@ INSERT INTO `group_member` VALUES (6, 2, 20017, 3, NULL, 0, NULL, '2024-11-30 13
-- ----------------------------
DROP TABLE IF EXISTS `item_config`;
CREATE TABLE `item_config` (
`id` bigint UNSIGNED NOT NULL COMMENT 'id',
`type` int NOT NULL COMMENT '物品类型 1改名卡 2徽章',
`img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物品图片',
`describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物品功能描述',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '功能物品配置表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL COMMENT 'id',
`type` int NOT NULL COMMENT '物品类型 1改名卡 2徽章',
`img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物品图片',
`describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物品功能描述',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '功能物品配置表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of item_config
@@ -167,23 +247,23 @@ INSERT INTO `item_config` VALUES (6, 2, 'https://hulaspark.com/minio/hula/badge/
-- ----------------------------
DROP TABLE IF EXISTS `message`;
CREATE TABLE `message` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`room_id` bigint NOT NULL COMMENT '会话表id',
`from_uid` bigint NOT NULL COMMENT '消息发送者uid',
`content` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '消息内容',
`reply_msg_id` bigint NULL DEFAULT NULL COMMENT '回复的消息内容',
`status` int NOT NULL COMMENT '消息状态 0正常 1删除',
`gap_count` int NULL DEFAULT NULL COMMENT '与回复的消息间隔多少条',
`type` int NULL DEFAULT 1 COMMENT '消息类型 1正常文本 2.撤回消息',
`extra` json NULL COMMENT '扩展信息',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_room_id`(`room_id` ASC) USING BTREE,
INDEX `idx_from_uid`(`from_uid` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5947 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '消息表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`room_id` bigint NOT NULL COMMENT '会话表id',
`from_uid` bigint NOT NULL COMMENT '消息发送者uid',
`content` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '消息内容',
`reply_msg_id` bigint NULL DEFAULT NULL COMMENT '回复的消息内容',
`status` int NOT NULL COMMENT '消息状态 0正常 1删除',
`gap_count` int NULL DEFAULT NULL COMMENT '与回复的消息间隔多少条',
`type` int NULL DEFAULT 1 COMMENT '消息类型 1正常文本 2.撤回消息',
`extra` json NULL COMMENT '扩展信息',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_room_id`(`room_id` ASC) USING BTREE,
INDEX `idx_from_uid`(`from_uid` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5947 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '消息表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of message
@@ -195,19 +275,19 @@ INSERT INTO `message` VALUES (5946, 1, 20000, '123', NULL, 0, NULL, 1, '{\"recal
-- ----------------------------
DROP TABLE IF EXISTS `message_mark`;
CREATE TABLE `message_mark` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`msg_id` bigint NOT NULL COMMENT '消息表id',
`uid` bigint NOT NULL COMMENT '标记人uid',
`type` int NOT NULL COMMENT '标记类型 1点赞 2举报',
`status` int NOT NULL COMMENT '消息状态 0正常 1取消',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_msg_id`(`msg_id` ASC) USING BTREE,
INDEX `idx_uid`(`uid` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '消息标记表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`msg_id` bigint NOT NULL COMMENT '消息表id',
`uid` bigint NOT NULL COMMENT '标记人uid',
`type` int NOT NULL COMMENT '标记类型 1点赞 2举报',
`status` int NOT NULL COMMENT '消息状态 0正常 1取消',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_msg_id`(`msg_id` ASC) USING BTREE,
INDEX `idx_uid`(`uid` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '消息标记表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of message_mark
@@ -218,14 +298,14 @@ CREATE TABLE `message_mark` (
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of role
@@ -238,18 +318,18 @@ INSERT INTO `role` VALUES (2, 'HuLa群聊管理员', '2024-07-10 11:17:15.091',
-- ----------------------------
DROP TABLE IF EXISTS `room`;
CREATE TABLE `room` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`type` int NOT NULL COMMENT '房间类型 1群聊 2单聊',
`hot_flag` int NULL DEFAULT 0 COMMENT '是否全员展示 0否 1是',
`active_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '群最后消息的更新时间(热点群不需要写扩散,只更新这里)',
`last_msg_id` bigint NULL DEFAULT NULL COMMENT '会话中的最后一条消息id',
`ext_json` json NULL COMMENT '额外信息(根据不同类型房间有不同存储的东西)',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 139 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '房间表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`type` int NOT NULL COMMENT '房间类型 1群聊 2单聊',
`hot_flag` int NULL DEFAULT 0 COMMENT '是否全员展示 0否 1是',
`active_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '群最后消息的更新时间(热点群不需要写扩散,只更新这里)',
`last_msg_id` bigint NULL DEFAULT NULL COMMENT '会话中的最后一条消息id',
`ext_json` json NULL COMMENT '额外信息(根据不同类型房间有不同存储的东西)',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 139 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '房间表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of room
@@ -263,20 +343,20 @@ INSERT INTO `room` VALUES (3, 2, 0, '2024-11-13 15:56:49.303', 661, NULL, '2024-
-- ----------------------------
DROP TABLE IF EXISTS `room_friend`;
CREATE TABLE `room_friend` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`room_id` bigint NOT NULL COMMENT '房间id',
`uid1` bigint NOT NULL COMMENT 'uid1更小的uid',
`uid2` bigint NOT NULL COMMENT 'uid2更大的uid',
`room_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '房间key由两个uid拼接先做排序uid1_uid2',
`status` int NOT NULL COMMENT '房间状态 0正常 1禁用(删好友了禁用)',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `room_key`(`room_key` ASC) USING BTREE,
INDEX `idx_room_id`(`room_id` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 88 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '单聊房间表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`room_id` bigint NOT NULL COMMENT '房间id',
`uid1` bigint NOT NULL COMMENT 'uid1更小的uid',
`uid2` bigint NOT NULL COMMENT 'uid2更大的uid',
`room_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '房间key由两个uid拼接先做排序uid1_uid2',
`status` int NOT NULL COMMENT '房间状态 0正常 1禁用(删好友了禁用)',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `room_key`(`room_key` ASC) USING BTREE,
INDEX `idx_room_id`(`room_id` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 88 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '单聊房间表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of room_friend
@@ -288,20 +368,20 @@ INSERT INTO `room_friend` VALUES (3, 12, 20016, 20017, '20016,20017', 0, '2024-1
-- ----------------------------
DROP TABLE IF EXISTS `room_group`;
CREATE TABLE `room_group` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`room_id` bigint NOT NULL COMMENT '房间id',
`account_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '群名称',
`avatar` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '群头像',
`ext_json` json NULL COMMENT '额外信息(根据不同类型房间有不同存储的东西)',
`delete_status` int NOT NULL DEFAULT 0 COMMENT '逻辑删除(0-正常,1-删除)',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_room_id`(`room_id` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 31 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '群聊房间表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`room_id` bigint NOT NULL COMMENT '房间id',
`account_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '群名称',
`avatar` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '群头像',
`ext_json` json NULL COMMENT '额外信息(根据不同类型房间有不同存储的东西)',
`delete_status` int NOT NULL DEFAULT 0 COMMENT '逻辑删除(0-正常,1-删除)',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_room_id`(`room_id` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 31 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '群聊房间表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of room_group
@@ -326,18 +406,18 @@ INSERT INTO `room_group` VALUES (30, 134, '', '', 'http://111.92.241.175:9000/hu
-- ----------------------------
DROP TABLE IF EXISTS `secure_invoke_record`;
CREATE TABLE `secure_invoke_record` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`secure_invoke_json` json NOT NULL COMMENT '请求快照参数json',
`status` tinyint NOT NULL COMMENT '状态 1待执行 2已失败',
`next_retry_time` datetime(3) NOT NULL COMMENT '下一次重试的时间',
`retry_times` int NOT NULL COMMENT '已经重试的次数',
`max_retry_times` int NOT NULL COMMENT '最大重试次数',
`fail_reason` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '执行失败的堆栈',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_next_retry_time`(`next_retry_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '本地消息表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`secure_invoke_json` json NOT NULL COMMENT '请求快照参数json',
`status` tinyint NOT NULL COMMENT '状态 1待执行 2已失败',
`next_retry_time` datetime(3) NOT NULL COMMENT '下一次重试的时间',
`retry_times` int NOT NULL COMMENT '已经重试的次数',
`max_retry_times` int NOT NULL COMMENT '最大重试次数',
`fail_reason` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '执行失败的堆栈',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_next_retry_time`(`next_retry_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '本地消息表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of secure_invoke_record
@@ -348,8 +428,8 @@ CREATE TABLE `secure_invoke_record` (
-- ----------------------------
DROP TABLE IF EXISTS `sensitive_word`;
CREATE TABLE `sensitive_word` (
`word` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '敏感词'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '敏感词库' ROW_FORMAT = Dynamic;
`word` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '敏感词'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '敏感词库' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sensitive_word
@@ -362,18 +442,18 @@ INSERT INTO `sensitive_word` VALUES ('tmd');
-- ----------------------------
DROP TABLE IF EXISTS `target`;
CREATE TABLE `target` (
`id` bigint NOT NULL AUTO_INCREMENT,
`u_id` bigint NOT NULL COMMENT '用户id',
`name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '标签名',
`icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL DEFAULT '' COMMENT '标签图标',
`created_by` bigint NULL DEFAULT NULL COMMENT '创建者',
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`updated_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`is_del` tinyint(1) NOT NULL COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `employee`(`u_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天的标签' ROW_FORMAT = Dynamic;
`id` bigint NOT NULL AUTO_INCREMENT,
`u_id` bigint NOT NULL COMMENT '用户id',
`name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '标签名',
`icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL DEFAULT '' COMMENT '标签图标',
`created_by` bigint NULL DEFAULT NULL COMMENT '创建者',
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`updated_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`is_del` tinyint(1) NOT NULL COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `employee`(`u_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天的标签' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of target
@@ -384,30 +464,30 @@ CREATE TABLE `target` (
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '用户昵称',
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '用户头像',
`account_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`sex` int NULL DEFAULT NULL COMMENT '性别 1为男性2为女性',
`open_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`active_status` int NULL DEFAULT 2 COMMENT '在线状态 1在线 2离线',
`user_state_id` bigint NOT NULL DEFAULT 0 COMMENT '用户状态id',
`last_opt_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '最后上下线时间',
`ip_info` json NULL COMMENT 'ip信息',
`item_id` bigint NULL DEFAULT NULL COMMENT '佩戴的徽章id',
`status` int NULL DEFAULT 0 COMMENT '使用状态 0.正常 1拉黑',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
`account` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户账号',
`password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户密码',
`avatar_update_time` datetime(3) NULL DEFAULT NULL COMMENT '头像修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `account_code`(`account_code` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE,
INDEX `idx_active_status_last_opt_time`(`active_status` ASC, `last_opt_time` ASC) USING BTREE,
INDEX `account_UNIQUE`(`account` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 20696 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '用户昵称',
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '用户头像',
`account_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`sex` int NULL DEFAULT NULL COMMENT '性别 1为男性2为女性',
`open_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`active_status` int NULL DEFAULT 2 COMMENT '在线状态 1在线 2离线',
`user_state_id` bigint NOT NULL DEFAULT 0 COMMENT '用户状态id',
`last_opt_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '最后上下线时间',
`ip_info` json NULL COMMENT 'ip信息',
`item_id` bigint NULL DEFAULT NULL COMMENT '佩戴的徽章id',
`status` int NULL DEFAULT 0 COMMENT '使用状态 0.正常 1拉黑',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
`account` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户账号',
`password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户密码',
`avatar_update_time` datetime(3) NULL DEFAULT NULL COMMENT '头像修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `account_code`(`account_code` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE,
INDEX `idx_active_status_last_opt_time`(`active_status` ASC, `last_opt_time` ASC) USING BTREE,
INDEX `account_UNIQUE`(`account` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 20696 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of user
@@ -419,23 +499,23 @@ INSERT INTO `user` VALUES (20000, 'admin', 'https://thirdwx.qlogo.cn/mmopen/vi_3
-- ----------------------------
DROP TABLE IF EXISTS `user_apply`;
CREATE TABLE `user_apply` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT '申请人uid',
`type` int NOT NULL COMMENT '申请类型 1加好友 2 加群',
`target_id` bigint NOT NULL COMMENT '接收对象 type: 1 -> uid; type: 2 -> roomGroupId',
`msg` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '申请信息',
`status` int NOT NULL COMMENT '申请状态 1待审批 2同意',
`read_status` int NOT NULL COMMENT '阅读状态 1未读 2已读',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
`deleted` tinyint NOT NULL DEFAULT 0 COMMENT '删除状态 0未删 1 申请人删除 2 被申请人删除 3都删除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_uid_target_id`(`uid` ASC, `target_id` ASC) USING BTREE,
INDEX `idx_target_id_read_status`(`target_id` ASC, `read_status` ASC) USING BTREE,
INDEX `idx_target_id`(`target_id` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 159 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户申请表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT '申请人uid',
`type` int NOT NULL COMMENT '申请类型 1加好友 2 加群',
`target_id` bigint NOT NULL COMMENT '接收对象 type: 1 -> uid; type: 2 -> roomGroupId',
`msg` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '申请信息',
`status` int NOT NULL COMMENT '申请状态 1待审批 2同意',
`read_status` int NOT NULL COMMENT '阅读状态 1未读 2已读',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
`deleted` tinyint NOT NULL DEFAULT 0 COMMENT '删除状态 0未删 1 申请人删除 2 被申请人删除 3都删除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_uid_target_id`(`uid` ASC, `target_id` ASC) USING BTREE,
INDEX `idx_target_id_read_status`(`target_id` ASC, `read_status` ASC) USING BTREE,
INDEX `idx_target_id`(`target_id` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 159 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户申请表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of user_apply
@@ -446,19 +526,19 @@ CREATE TABLE `user_apply` (
-- ----------------------------
DROP TABLE IF EXISTS `user_backpack`;
CREATE TABLE `user_backpack` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT 'uid',
`item_id` int NOT NULL COMMENT '物品id',
`status` int NOT NULL COMMENT '使用状态 0.待使用 1已使用',
`idempotent` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '幂等号',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uniq_idempotent`(`idempotent` ASC) USING BTREE,
INDEX `idx_uid`(`uid` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 804 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户背包表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT 'uid',
`item_id` int NOT NULL COMMENT '物品id',
`status` int NOT NULL COMMENT '使用状态 0.待使用 1已使用',
`idempotent` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '幂等号',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uniq_idempotent`(`idempotent` ASC) USING BTREE,
INDEX `idx_uid`(`uid` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 804 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户背包表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of user_backpack
@@ -469,15 +549,15 @@ CREATE TABLE `user_backpack` (
-- ----------------------------
DROP TABLE IF EXISTS `user_block`;
CREATE TABLE `user_block` (
`id` bigint NOT NULL COMMENT '主键',
`blocker_uid` bigint NOT NULL COMMENT '屏蔽方用户ID',
`blocked_uid` bigint NOT NULL COMMENT '被屏蔽方用户ID',
`created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '屏蔽时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_blocker_blocked`(`blocker_uid` ASC, `blocked_uid` ASC) USING BTREE,
INDEX `idx_blocker`(`blocker_uid` ASC) USING BTREE,
INDEX `idx_blocked`(`blocked_uid` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户屏蔽关系表' ROW_FORMAT = Dynamic;
`id` bigint NOT NULL COMMENT '主键',
`blocker_uid` bigint NOT NULL COMMENT '屏蔽方用户ID',
`blocked_uid` bigint NOT NULL COMMENT '被屏蔽方用户ID',
`created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '屏蔽时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_blocker_blocked`(`blocker_uid` ASC, `blocked_uid` ASC) USING BTREE,
INDEX `idx_blocker`(`blocker_uid` ASC) USING BTREE,
INDEX `idx_blocked`(`blocked_uid` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户屏蔽关系表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of user_block
@@ -488,15 +568,15 @@ CREATE TABLE `user_block` (
-- ----------------------------
DROP TABLE IF EXISTS `user_emoji`;
CREATE TABLE `user_emoji` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT '用户表ID',
`expression_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '表情地址',
`delete_status` int NOT NULL DEFAULT 0 COMMENT '逻辑删除(0-正常,1-删除)',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `IDX_USER_EMOJIS_UID`(`uid` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表情包' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT '用户表ID',
`expression_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '表情地址',
`delete_status` int NOT NULL DEFAULT 0 COMMENT '逻辑删除(0-正常,1-删除)',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `IDX_USER_EMOJIS_UID`(`uid` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表情包' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of user_emoji
@@ -507,19 +587,21 @@ CREATE TABLE `user_emoji` (
-- ----------------------------
DROP TABLE IF EXISTS `user_friend`;
CREATE TABLE `user_friend` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT 'uid',
`friend_uid` bigint NOT NULL COMMENT '好友uid',
`delete_status` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除(0-正常,1-删除)',
`mute_notification` tinyint NOT NULL DEFAULT 0 COMMENT '免打扰',
`remark` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '好友备注',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_uid_friend_uid`(`uid` ASC, `friend_uid` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 215 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户联系人表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT 'uid',
`friend_uid` bigint NOT NULL COMMENT '好友uid',
`delete_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除(0-正常,1-删除)',
`mute_notification` tinyint(1) NOT NULL DEFAULT 0 COMMENT '免打扰',
`hide_my_posts` tinyint(1) NOT NULL DEFAULT 0 COMMENT '不让他看我0-允许1-禁止)',
`hide_their_posts` tinyint(1) NOT NULL DEFAULT 0 COMMENT '不看他0-允许1-禁止)',
`remark` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '好友备注',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_uid_friend_uid`(`uid` ASC, `friend_uid` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 215 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户联系人表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of user_friend
@@ -530,17 +612,17 @@ CREATE TABLE `user_friend` (
-- ----------------------------
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT 'uid',
`role_id` bigint NOT NULL COMMENT '角色id',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_uid`(`uid` ASC) USING BTREE,
INDEX `idx_role_id`(`role_id` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户角色关系表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`uid` bigint NOT NULL COMMENT 'uid',
`role_id` bigint NOT NULL COMMENT '角色id',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_uid`(`uid` ASC) USING BTREE,
INDEX `idx_role_id`(`role_id` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户角色关系表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of user_role
@@ -551,16 +633,16 @@ CREATE TABLE `user_role` (
-- ----------------------------
DROP TABLE IF EXISTS `user_state`;
CREATE TABLE `user_state` (
`id` bigint NOT NULL AUTO_INCREMENT,
`title` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '状态名',
`url` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '状态图标',
`created_by` bigint NULL DEFAULT NULL COMMENT '创建者',
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`updated_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 34 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天用户状态表' ROW_FORMAT = Dynamic;
`id` bigint NOT NULL AUTO_INCREMENT,
`title` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '状态名',
`url` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '状态图标',
`created_by` bigint NULL DEFAULT NULL COMMENT '创建者',
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`updated_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 34 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天用户状态表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of user_state
@@ -604,18 +686,18 @@ INSERT INTO `user_state` VALUES (33, '游戏中', '/status/game_3x.png', 1, '202
-- ----------------------------
DROP TABLE IF EXISTS `user_target_rel`;
CREATE TABLE `user_target_rel` (
`id` bigint NOT NULL,
`u_id` bigint NOT NULL COMMENT '人员id',
`friend_id` bigint NOT NULL COMMENT '被绑定的人员id',
`target_id` bigint NOT NULL COMMENT '标签id',
`created_by` bigint NULL DEFAULT NULL COMMENT '创建者',
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`updated_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`is_del` tinyint(1) NOT NULL COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `employee`(`u_id` ASC, `friend_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '人员标签关联表' ROW_FORMAT = Dynamic;
`id` bigint NOT NULL,
`u_id` bigint NOT NULL COMMENT '人员id',
`friend_id` bigint NOT NULL COMMENT '被绑定的人员id',
`target_id` bigint NOT NULL COMMENT '标签id',
`created_by` bigint NULL DEFAULT NULL COMMENT '创建者',
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`updated_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`is_del` tinyint(1) NOT NULL COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `employee`(`u_id` ASC, `friend_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '人员标签关联表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of user_target_rel
@@ -626,15 +708,15 @@ CREATE TABLE `user_target_rel` (
-- ----------------------------
DROP TABLE IF EXISTS `worker_node`;
CREATE TABLE `worker_node` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'auto;increment id',
`host_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '主机名',
`port` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '端口',
`type` int NOT NULL COMMENT '节点类型:;ACTUAL 或者 CONTAINER',
`launch_date` date NOT NULL COMMENT '上线日期',
`modified` timestamp NULL DEFAULT NULL COMMENT '修改时间',
`created` timestamp NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'DB;WorkerID Assigner for UID Generator' ROW_FORMAT = DYNAMIC;
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'auto;increment id',
`host_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '主机名',
`port` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '端口',
`type` int NOT NULL COMMENT '节点类型:;ACTUAL 或者 CONTAINER',
`launch_date` date NOT NULL COMMENT '上线日期',
`modified` timestamp NULL DEFAULT NULL COMMENT '修改时间',
`created` timestamp NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'DB;WorkerID Assigner for UID Generator' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of worker_node
@@ -648,22 +730,32 @@ INSERT INTO `worker_node` VALUES (6, '192.168.1.105', '1740645676926-31636', 2,
INSERT INTO `worker_node` VALUES (7, '192.168.1.105', '1740649171235-18216', 2, '2025-02-27', '2025-02-27 17:39:31', '2025-02-27 17:39:31');
INSERT INTO `worker_node` VALUES (8, '192.168.1.105', '1740650592465-20161', 2, '2025-02-27', '2025-02-27 18:03:12', '2025-02-27 18:03:12');
INSERT INTO `worker_node` VALUES (9, '192.168.1.105', '1740651241906-67540', 2, '2025-02-27', '2025-02-27 18:14:02', '2025-02-27 18:14:02');
INSERT INTO `worker_node` VALUES (10, '192.168.1.105', '1740911912923-43299', 2, '2025-03-02', '2025-03-02 18:38:33', '2025-03-02 18:38:33');
INSERT INTO `worker_node` VALUES (11, '192.168.1.105', '1740974696482-23085', 2, '2025-03-03', '2025-03-03 12:04:56', '2025-03-03 12:04:56');
INSERT INTO `worker_node` VALUES (12, '192.168.1.105', '1740974744186-69746', 2, '2025-03-03', '2025-03-03 12:05:44', '2025-03-03 12:05:44');
INSERT INTO `worker_node` VALUES (13, '192.168.1.105', '1740976190991-80068', 2, '2025-03-03', '2025-03-03 12:29:51', '2025-03-03 12:29:51');
INSERT INTO `worker_node` VALUES (14, '192.168.1.105', '1740976446395-17497', 2, '2025-03-03', '2025-03-03 12:34:06', '2025-03-03 12:34:06');
INSERT INTO `worker_node` VALUES (15, '192.168.1.105', '1740976825093-79338', 2, '2025-03-03', '2025-03-03 12:40:25', '2025-03-03 12:40:25');
INSERT INTO `worker_node` VALUES (16, '192.168.1.105', '1740976869970-90188', 2, '2025-03-03', '2025-03-03 12:41:10', '2025-03-03 12:41:10');
INSERT INTO `worker_node` VALUES (17, '192.168.1.105', '1740977125946-60633', 2, '2025-03-03', '2025-03-03 12:45:26', '2025-03-03 12:45:26');
INSERT INTO `worker_node` VALUES (18, '192.168.1.105', '1740977161406-14512', 2, '2025-03-03', '2025-03-03 12:46:01', '2025-03-03 12:46:01');
INSERT INTO `worker_node` VALUES (19, '192.168.1.105', '1740979045821-69473', 2, '2025-03-03', '2025-03-03 13:17:26', '2025-03-03 13:17:26');
-- ----------------------------
-- Table structure for wx_msg
-- ----------------------------
DROP TABLE IF EXISTS `wx_msg`;
CREATE TABLE `wx_msg` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`open_id` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '微信openid用户标识',
`msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户消息',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_open_id`(`open_id` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信消息表' ROW_FORMAT = Dynamic;
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`open_id` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '微信openid用户标识',
`msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户消息',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_open_id`(`open_id` ASC) USING BTREE,
INDEX `idx_create_time`(`create_time` ASC) USING BTREE,
INDEX `idx_update_time`(`update_time` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信消息表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of wx_msg