修改私信请求

master
bynt 2 years ago
parent 277278a01e
commit 0951b60c1e

@ -300,7 +300,7 @@ public enum ResultCode implements IResultCode {
/**
*
*/
LIKE_VIDEO_COMMENT_FAILED(1019, "视频评论点赞失败"),
LIKE_VIDEO_COMMENT_FAILED(1020, "视频评论点赞失败"),
/**
*
@ -308,6 +308,12 @@ public enum ResultCode implements IResultCode {
OPT_COMMENT_VIDEO_FAILED(1018, "评论视频中评论失败"),
/**
*
*/
SEND_MESSAGE_FAILED(1021, "发送私信失败"),
/**
*
*/

@ -83,7 +83,8 @@ public class OnlineServiceImpl implements IOnlineUserService {
@Override
public PageResult getAll(String filter, Pageable pageable) {
List<OnlineUser> onlineUsers = getAll(filter);
return PageResult.success((long) onlineUsers.size(), PageUtil.toPage(pageable.getPageNumber() - 1, pageable.getPageSize(), onlineUsers));
return PageResult.success((long) onlineUsers.size(),
PageUtil.toPage(pageable.getPageNumber() - 1, pageable.getPageSize(), onlineUsers));
}
/**
@ -136,7 +137,7 @@ public class OnlineServiceImpl implements IOnlineUserService {
List<String> keys = this.redisUtils.scan(CacheKey.ONLINE_USER + "*");
Collections.reverse(keys);
return keys.stream().map(key -> (OnlineUser) this.redisUtils.get(key)).filter(onlineUser -> {
if (StringUtils.isNotBlank(filter)) {
if (CharSequenceUtil.isNotBlank(filter)) {
return onlineUser.toString().contains(filter);
}
return true;
@ -169,8 +170,8 @@ public class OnlineServiceImpl implements IOnlineUserService {
*
* @param username /
*/
@Override
@Async
@Override
public void kickOutForUsername(String username) {
List<OnlineUser> onlineUsers = getAll(username);
for (OnlineUser onlineUser : onlineUsers) {
@ -179,6 +180,4 @@ public class OnlineServiceImpl implements IOnlineUserService {
}
}
}
}

@ -32,7 +32,7 @@ public class TiktokLabelOrganizeController {
@PostMapping("/save")
@ApiOperation("标签组新增")
public Result<?> add(@Validated({AddGroup.class}) @RequestBody TiktokLabelOrganizeEntity labelOrganizeEntity) {
labelOrganizeService.save(labelOrganizeEntity);
labelOrganizeService.saveLabelOrganize(labelOrganizeEntity);
return Result.success();
}

@ -1,15 +1,21 @@
package com.baiye.controller;
import com.baiye.api.request.TiktokPrivateLetterRequest;
import com.baiye.core.base.api.Result;
import com.baiye.core.base.api.ResultCode;
import com.baiye.core.page.PageResult;
import com.baiye.dto.MessageRecordDTO;
import com.baiye.entity.TiktokPrivateLetter;
import com.baiye.query.MessageRecordQuery;
import com.baiye.service.TiktokPrivateLetterService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* @author Enzo
@ -26,12 +32,44 @@ public class TiktokPrivateLetterController {
@PostMapping("/list")
@ApiOperation("私信列表")
public Result<PageResult> list(Pageable pageable){
PageResult pageResult = this.tiktokPrivateLetterService.queryAll(pageable);
return Result.data(pageResult);
public Result<List<MessageRecordDTO>> list(Pageable pageable) {
List<MessageRecordDTO> list
= this.tiktokPrivateLetterService.queryAll(pageable);
return Result.data(list);
}
@ApiOperation("私信已读")
@GetMapping("/read")
public Result<Result<ResultCode>> readMessage(Long tiktokId) {
this.tiktokPrivateLetterService.readMessage(tiktokId);
return Result.success();
}
@ApiOperation("私信未读")
@GetMapping("/notRead")
public Result<ResultCode> notReadMessage(Long tiktokId) {
this.tiktokPrivateLetterService.notReadMessage(tiktokId);
return Result.success();
}
@ApiOperation("删除评论")
@GetMapping("/delete")
public Result<String> deleteMessage
(@RequestParam("tiktokId") Long tiktokId) {
this.tiktokPrivateLetterService.deleteMessage(tiktokId);
return Result.success();
}
@ApiOperation("评论分页")
@GetMapping("/letterPage")
public PageResult queryMessageByUserId
(MessageRecordQuery messageRecordQuery, Pageable pageable) {
return this.tiktokPrivateLetterService.
queryMessageByUserId(messageRecordQuery, pageable);
}
}

@ -2,10 +2,9 @@ package com.baiye.controller;
import com.baiye.core.base.api.Result;
import com.baiye.core.base.api.ResultCode;
import com.baiye.core.page.PageResult;
import com.baiye.dto.CommentMessageRecordDTO;
import com.baiye.dto.MessageRecordDTO;
import com.baiye.entity.TiktokEquipmentEntity;
import com.baiye.query.CommentRecordQuery;
import com.baiye.query.MessageRecordQuery;
import com.baiye.service.TiktokVideoCommentService;
import com.baiye.util.SecurityUtils;
import io.swagger.annotations.Api;
@ -18,8 +17,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@ -40,44 +37,44 @@ public class TiktokVideoCommentController {
@GetMapping("/list")
@ApiOperation("评论列表")
public Result<List<CommentMessageRecordDTO>> list(Pageable pageable){
public Result<List<MessageRecordDTO>> list(Pageable pageable) {
Long currentUserId = SecurityUtils.getCurrentUserId();
List<CommentMessageRecordDTO> commentPage =
List<MessageRecordDTO> commentPage =
this.tiktokVideoCommentService.commentPage(pageable, currentUserId);
return Result.data(commentPage);
}
@ApiOperation("评论消息")
@ApiOperation("评论已读")
@GetMapping("/read")
public Result<Result<ResultCode>> readMessage(Long memberId) {
this.tiktokVideoCommentService.readComment(memberId);
public Result<Result<ResultCode>> readMessage(Long tiktokId,Long videoId) {
this.tiktokVideoCommentService.readComment(tiktokId, videoId);
return Result.success();
}
@ApiOperation("评论未读")
@GetMapping("/notRead")
public Result<ResultCode> notReadMessage(Long memberId) {
this.tiktokVideoCommentService.notReadComment(memberId);
public Result<ResultCode> notReadMessage(Long tiktokId, Long videoId) {
this.tiktokVideoCommentService.notReadComment(tiktokId, videoId);
return Result.success();
}
@ApiOperation("删除评论")
@GetMapping("/delete")
public Result<PageResult> deleteMessage
(@RequestParam("userId") Long memberId) {
this.tiktokVideoCommentService.deleteComment(memberId);
public Result<String> deleteMessage
(@RequestParam("tiktokId") Long tiktokId,@RequestParam("videoId") Long videoId) {
this.tiktokVideoCommentService.deleteComment(tiktokId, videoId);
return Result.success();
}
@ApiOperation("评论分页")
@GetMapping("/commentPage")
public Result<Map<String, Object>> queryMessageByUserId
(CommentRecordQuery commentRecordQuery, Pageable pageable) {
(MessageRecordQuery messageRecordQuery, Pageable pageable) {
return Result.data((this.tiktokVideoCommentService.
queryMessageByUserId(commentRecordQuery, pageable)));
queryMessageByUserId(messageRecordQuery, pageable)));
}
@ApiOperation("获取设备号用户")
@ -88,4 +85,12 @@ public class TiktokVideoCommentController {
}
@ApiOperation("发送消息")
@GetMapping("/sendMessage")
public void sendMessage(String message) {
//
tiktokVideoCommentService.sendMessage(message);
}
}

@ -3,6 +3,7 @@ package com.baiye.feign;
import com.baiye.core.annotation.Log;
import com.baiye.core.base.api.Result;
import com.baiye.dto.request.*;
import com.baiye.service.TiktokUserMessageService;
import com.baiye.service.TiktokVideoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -21,10 +22,13 @@ import org.springframework.web.bind.annotation.RestController;
@RequiredArgsConstructor
public class TiktokUserProvider implements TikTokUserFeignProvider {
private final TiktokVideoService tiktokVideoService;
private final TiktokUserMessageService tiktokUserMessageService;
@ApiOperation("视频点赞")
public Result<Object> likeVideo(@RequestBody LikeVideoRequestDTO likeVideoRequestDTO) {
return Result.data(tiktokVideoService.likeVideo(likeVideoRequestDTO));
@ -48,11 +52,15 @@ public class TiktokUserProvider implements TikTokUserFeignProvider {
return tiktokVideoService.optCommentVideo(optCommentVideoRequestDTO);
}
@ApiOperation("删除评论")
public Result<Object> delComment(@RequestBody CommentDeleteRequestDTO deleteRequestDTO) {
return tiktokVideoService.deleteComment(deleteRequestDTO);
}
@ApiOperation("发送私信")
public Result<Object> sendMessage(SendMessageRequestDTO messageRequestDTO) {
return tiktokUserMessageService.sendMessage(messageRequestDTO);
}
}

@ -0,0 +1,134 @@
package com.baiye.job.dy_tool_member;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baiye.api.TiktokRequestClient;
import com.baiye.api.request.TiktokPrivateLetterRequest;
import com.baiye.api.response.TiktokPrivateLetterResponse;
import com.baiye.core.constant.DefaultNumberConstants;
import com.baiye.core.constant.TiktokRequestConstants;
import com.baiye.dto.TiktokMemberDTO;
import com.baiye.entity.TiktokEquipmentEntity;
import com.baiye.entity.TiktokPrivateLetter;
import com.baiye.entity.TiktokPrivateLetterParameter;
import com.baiye.properties.TiktokProperties;
import com.baiye.service.TiktokEquipmentService;
import com.baiye.service.TiktokMemberService;
import com.baiye.service.TiktokPrivateLetterParameterService;
import com.baiye.service.TiktokPrivateLetterService;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.example.autoconfig.ElasticSimpleJob;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
/**
*
*
* @author Enzo
* @date : 2022/9/30
*/
@Slf4j
@Component
@ElasticSimpleJob(jobName = "tiktokNotFriendPrivateLetterJop", cron = "0 0/10 * * * ? ")
public class TiktokNotFriendPrivateLetterJop implements SimpleJob {
@Value("${snowflake.workerId}")
private int workerId;
@Value("${snowflake.datacenterId}")
private int datacenterId;
@Resource
private TiktokProperties tiktokProperties;
@Resource
private TiktokMemberService tiktokMemberService;
@Resource
private TiktokEquipmentService tiktokEquipmentService;
private static TiktokNotFriendPrivateLetterJop tiktokNotFriendPrivateLetterJop;
@Resource
private TiktokPrivateLetterService tiktokPrivateLetterService;
@Resource
private TiktokPrivateLetterParameterService tiktokPrivateLetterParameterService;
@PostConstruct
public void init() {
tiktokNotFriendPrivateLetterJop = this;
}
@Override
public void execute(ShardingContext shardingContext) {
List<TiktokPrivateLetter> list = Lists.newArrayList();
List<TiktokEquipmentEntity> equipmentEntityList =
tiktokNotFriendPrivateLetterJop.tiktokEquipmentService.findBySignInStatus(DefaultNumberConstants.ONE_NUMBER);
if (CollUtil.isNotEmpty(equipmentEntityList)) {
for (TiktokEquipmentEntity entity : equipmentEntityList) {
// 好友私信请求
TiktokPrivateLetterRequest privateLetterRequest = new TiktokPrivateLetterRequest();
TiktokPrivateLetterRequest.PrivateLetterDTO letterDTO = privateLetterRequest.new PrivateLetterDTO();
String dyVendorId = entity.getDyVendorId();
TiktokPrivateLetterParameter byVendorId = tiktokNotFriendPrivateLetterJop.tiktokPrivateLetterParameterService.
selectByVendorId(entity.getDyVendorId(), DefaultNumberConstants.TWO_NUMBER);
letterDTO.setMaxTime((long) DefaultNumberConstants.ZERO_NUMBER);
if (ObjectUtil.isNotNull(byVendorId)
&& ObjectUtil.isNotNull(byVendorId.getMaxTime())) {
letterDTO.setMaxTime(byVendorId.getMaxTime());
}
letterDTO.setVendorId(dyVendorId);
privateLetterRequest.setData(letterDTO);
// 构建请求
TiktokPrivateLetterResponse notFriendResponse = TiktokRequestClient.createTiktokResponse
(TiktokRequestConstants.TIK_TOK_GET_RECENT_STRANGER_MESSAGE, privateLetterRequest, tiktokProperties);
if (ObjectUtil.isNotNull(notFriendResponse.getSuccess())
&& Boolean.TRUE.equals(notFriendResponse.getSuccess())
&& notFriendResponse.getStatus() == HttpStatus.OK.value()) {
TiktokPrivateLetterResponse.PrivateLetterResponse responseData = notFriendResponse.getData();
if (CollUtil.isNotEmpty(responseData.getConvList())) {
// 解析数据
TiktokPrivateLetterResponse.PrivateLetterResponse.TikTokMessageDTO tikTokMessageDTO
= responseData.getConvList().get(DefaultNumberConstants.ZERO_NUMBER);
for (TiktokPrivateLetterResponse.PrivateLetterResponse.
TikTokMessageDTO.MessageDTO dto : tikTokMessageDTO.getMsgList()) {
String text = dto.getText().getText();
Long nextId = IdUtil.getSnowflake(workerId, datacenterId).nextId();
TiktokMemberDTO tiktokMemberDTO = tiktokNotFriendPrivateLetterJop.tiktokMemberService.
saveTiktokMemberByTiktok(String.valueOf(dto.getSenderId()), entity.getDyVendorId());
// 构建实体
TiktokPrivateLetter privateLetter = TiktokPrivateLetter.builder().id(nextId).
senderId(dto.getSenderId()).receiverId
(Long.parseLong(entity.getDyUserId())).msg(text).memberId
(ObjectUtil.isNotNull(tiktokMemberDTO) ? Long.parseLong(tiktokMemberDTO.getId()) : nextId).
tiktokId(dto.getSenderId()).status(DefaultNumberConstants.ONE_NUMBER).msgType(dto.getText().getType()).
isRead(DefaultNumberConstants.ZERO_NUMBER).msgTime(dto.getTime()).build();
// 发送消息
tiktokNotFriendPrivateLetterJop.tiktokPrivateLetterService.sendMessage(tiktokMemberDTO, privateLetter);
list.add(privateLetter);
}
Long maxTime = responseData.getMaxTime();
// 修改发送时间
tiktokNotFriendPrivateLetterJop.tiktokPrivateLetterParameterService.
saveOrUpdateParameter(byVendorId, dyVendorId, maxTime, DefaultNumberConstants.TWO_NUMBER);
// 批量保存私信内容
tiktokNotFriendPrivateLetterJop.tiktokPrivateLetterService.batchInsertPrivateLetter(list);
}
}
}
}
}
}

@ -1,15 +1,38 @@
package com.baiye.job.dy_tool_member;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baiye.api.TiktokRequestClient;
import com.baiye.api.request.TiktokPrivateLetterRequest;
import com.baiye.api.response.TiktokPrivateLetterResponse;
import com.baiye.core.constant.DefaultNumberConstants;
import com.baiye.core.constant.TiktokRequestConstants;
import com.baiye.dto.TiktokMemberDTO;
import com.baiye.entity.TiktokEquipmentEntity;
import com.baiye.entity.TiktokPrivateLetter;
import com.baiye.entity.TiktokPrivateLetterParameter;
import com.baiye.properties.TiktokProperties;
import com.baiye.service.TiktokEquipmentService;
import com.baiye.service.TiktokMemberService;
import com.baiye.service.TiktokPrivateLetterParameterService;
import com.baiye.service.TiktokPrivateLetterService;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.example.autoconfig.ElasticSimpleJob;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
/**
*
*
* @author Enzo
* @date : 2022/9/30
*/
@ -19,17 +42,94 @@ import javax.annotation.PostConstruct;
public class TiktokPrivateLetterJop implements SimpleJob {
@Value("${snowflake.workerId}")
private int workerId;
@Value("${snowflake.datacenterId}")
private int datacenterId;
@Resource
private TiktokProperties tiktokProperties;
@Resource
private TiktokMemberService tiktokMemberService;
@Resource
private TiktokEquipmentService tiktokEquipmentService;
private static TiktokPrivateLetterJop privateLetterJop;
@Resource
private TiktokPrivateLetterService tiktokPrivateLetterService;
@Resource
private TiktokPrivateLetterParameterService tiktokPrivateLetterParameterService;
@PostConstruct
public void init(){
public void init() {
privateLetterJop = this;
}
@Override
public void execute(ShardingContext shardingContext) {
List<TiktokPrivateLetter> list = Lists.newArrayList();
List<TiktokEquipmentEntity> equipmentEntityList =
privateLetterJop.tiktokEquipmentService.findBySignInStatus(DefaultNumberConstants.ONE_NUMBER);
if (CollUtil.isNotEmpty(equipmentEntityList)) {
for (TiktokEquipmentEntity entity : equipmentEntityList) {
// 好友私信请求
TiktokPrivateLetterRequest privateLetterRequest = new TiktokPrivateLetterRequest();
TiktokPrivateLetterRequest.PrivateLetterDTO letterDTO = privateLetterRequest.new PrivateLetterDTO();
String dyVendorId = entity.getDyVendorId();
TiktokPrivateLetterParameter byVendorId = privateLetterJop.tiktokPrivateLetterParameterService.
selectByVendorId(entity.getDyVendorId(), DefaultNumberConstants.ONE_NUMBER);
letterDTO.setMaxTime((long) DefaultNumberConstants.ZERO_NUMBER);
if (ObjectUtil.isNotNull(byVendorId)
&& ObjectUtil.isNotNull(byVendorId.getMaxTime())) {
letterDTO.setMaxTime(byVendorId.getMaxTime());
}
letterDTO.setVendorId(dyVendorId);
privateLetterRequest.setData(letterDTO);
// 构建请求
TiktokPrivateLetterResponse privateLetterResponse = TiktokRequestClient.createTiktokResponse
(TiktokRequestConstants.TIK_TOK_GET_FRIEND_MESSAGE, privateLetterRequest, tiktokProperties);
if (ObjectUtil.isNotNull(privateLetterResponse.getSuccess())
&& Boolean.TRUE.equals(privateLetterResponse.getSuccess())
&& privateLetterResponse.getStatus() == HttpStatus.OK.value()) {
TiktokPrivateLetterResponse.PrivateLetterResponse data = privateLetterResponse.getData();
if (CollUtil.isNotEmpty(data.getConvList())) {
// 解析数据
TiktokPrivateLetterResponse.PrivateLetterResponse.TikTokMessageDTO tikTokMessageDTO
= data.getConvList().get(DefaultNumberConstants.ZERO_NUMBER);
for (TiktokPrivateLetterResponse.PrivateLetterResponse.
TikTokMessageDTO.MessageDTO dto : tikTokMessageDTO.getMsgList()) {
String text = dto.getText().getText();
Long nextId = IdUtil.getSnowflake(workerId, datacenterId).nextId();
TiktokMemberDTO tiktokMemberDTO = privateLetterJop.tiktokMemberService.
saveTiktokMemberByTiktok(String.valueOf(dto.getSenderId()), entity.getDyVendorId());
// 构建实体
TiktokPrivateLetter privateLetter = TiktokPrivateLetter.builder().id(nextId).
senderId(dto.getSenderId()).receiverId
(Long.parseLong(entity.getDyUserId())).msg(text).memberId
(ObjectUtil.isNotNull(tiktokMemberDTO) ? Long.parseLong(tiktokMemberDTO.getId()) : nextId).
tiktokId(dto.getSenderId()).status(DefaultNumberConstants.ONE_NUMBER).msgType(dto.getText().getType()).
isRead(DefaultNumberConstants.ZERO_NUMBER).msgTime(dto.getTime()).build();
// 发送消息
privateLetterJop.tiktokPrivateLetterService.sendMessage(tiktokMemberDTO, privateLetter);
list.add(privateLetter);
}
Long maxTime = data.getMaxTime();
// 修改发送时间
privateLetterJop.tiktokPrivateLetterParameterService.
saveOrUpdateParameter(byVendorId, dyVendorId, maxTime, DefaultNumberConstants.ONE_NUMBER);
// 批量保存私信内容
privateLetterJop.tiktokPrivateLetterService.batchInsertPrivateLetter(list);
}
}
}
}
}
}

@ -12,7 +12,6 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
@ -48,13 +47,14 @@ public class TiktokMessageTest {
comment.setStatus(DefaultNumberConstants.ONE_NUMBER);
comment.setIsRead(DefaultNumberConstants.ZERO_NUMBER);
objects.add(comment);
tiktokVideoCommentMapper.insert(comment);
}
tiktokVideoCommentMapper.batchInsert(objects);
}
@Test
public void getByMember(){
tiktokMemberService.saveTiktokMemberByTiktok("865465039378013");
tiktokMemberService.saveTiktokMemberByTiktok("865465039378013", "");
}
}

@ -1,7 +1,13 @@
package com.baiye.dao;
import com.baiye.dto.MessageRecordDTO;
import com.baiye.dto.SelectGroupDTO;
import com.baiye.entity.TiktokPrivateLetter;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
* @author Enzo
@ -10,4 +16,25 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface TiktokPrivateLetterMapper extends BaseMapper<TiktokPrivateLetter> {
/**
*
* @param list
*/
void batchInsert(List<TiktokPrivateLetter> list);
/**
*
* @param page
* @return
*/
IPage<SelectGroupDTO> queryMemberId(Page<MessageRecordDTO> page);
/**
*
* @param flag
* @param limitNum
* @param tiktokId
*/
void updateNotReadMessageByMember(int flag, int limitNum, Long tiktokId);
}

@ -0,0 +1,13 @@
package com.baiye.dao;
import com.baiye.entity.TiktokPrivateLetterParameter;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Enzo
* @date 2022-10-10
*/
public interface TiktokPrivateLetterParameterMapper extends BaseMapper<TiktokPrivateLetterParameter> {
}

@ -31,11 +31,13 @@ public interface TiktokVideoCommentMapper extends BaseMapper<TiktokVideoComment>
/**
*
*
* @param flag
* @param oneNumber
* @param memberId
* @param videoId
*/
void updateNotReadCommentByMember(@Param("flag") int flag, @Param("limitNum") int oneNumber, @Param("memberId") Long memberId);
void updateNotReadCommentByMember(@Param("flag") int flag, @Param("limitNum") int oneNumber, @Param("memberId") Long memberId,@Param("videoId") Long videoId);
/**
*

@ -14,13 +14,15 @@ import java.util.List;
* @date : 2022/9/20
*/
@Data
public class CommentMessageRecordDTO {
public class MessageRecordDTO {
@ApiModelProperty("评论类型")
@ApiModelProperty("类型")
private Integer msgType;
@ApiModelProperty("标识")
private Boolean msgFlag;
@ApiModelProperty("未读数量")
private Integer notReadNum;
@ -33,6 +35,9 @@ public class CommentMessageRecordDTO {
@ApiModelProperty("最后消息内容")
private String lastComment;
@ApiModelProperty("最后评论id")
private Long cid;
@ApiModelProperty("是否有未读")
private Boolean isRead;

@ -17,6 +17,8 @@ public class SaveSopCommentDTO {
@ApiModelProperty(value = "视频ID")
private Long awemeId;
@ApiModelProperty(value = "小组id")
private Long organizeId;
private List<TiktokSopCommentVideoDTO> dtoList;

@ -0,0 +1,62 @@
package com.baiye.dto;
import com.baiye.core.constant.DateConstant;
import com.baiye.core.convert.EmojiConverterListJson;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Convert;
import java.util.Date;
/**
*
*
* @author Enzo
* @date : 2022-10-12
*/
@Data
public class TiktokPrivateLetterDTO {
@ApiModelProperty(value = "发送者id")
private Long senderId;
@ApiModelProperty(value = "接收者id")
private Long receiverId;
@ApiModelProperty(value = "会员id")
private Long memberId;
@ApiModelProperty(value = "会员id")
private Long tiktokId;
@ApiModelProperty(value = "消息属于哪个用户id")
private Long userId;
@ApiModelProperty(value = "消息内容")
@Convert(converter = EmojiConverterListJson.class)
private String msg;
@ApiModelProperty(value = "消息状态")
private Integer status;
@ApiModelProperty(value = "消息类型")
private Integer msgType;
@ApiModelProperty(value = "是否读取0未读 1已读")
private Integer isRead;
@ApiModelProperty(value = "消息时间")
private Long msgTime;
@ApiModelProperty(value = "创建时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateConstant.NORM_DATETIME_PATTERN, timezone = "GMT+8")
private Date createTime;
@ApiModelProperty(value = "true发送false接收")
private Boolean msgFlag;
}

@ -0,0 +1,33 @@
package com.baiye.dto.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author Enzo
* @date : 2022/10/12
*/
@Data
public class SendMessageRequestDTO implements Serializable {
private static final long serialVersionUID = -8176321148422988741L;
@ApiModelProperty("设备抖音标识")
private String vendorId;
@ApiModelProperty("用户Id")
private String userId;
@ApiModelProperty("用户昵称")
private String nickName;
@ApiModelProperty("消息内容, 视频消息请传视频ID")
private String content;
@ApiModelProperty("消息类型 7-文字信息8-视频消息")
private Integer type;
}

@ -3,6 +3,7 @@ package com.baiye.entity;
import com.baiye.core.convert.EmojiConverterListJson;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@ -15,8 +16,10 @@ import java.util.Date;
* @author Enzo
* @date : 2022/8/31
*/
@Getter
@Setter
@Builder
@TableName("tb_tiktok_private_letter")
public class TiktokPrivateLetter implements Serializable {
@ -29,15 +32,18 @@ public class TiktokPrivateLetter implements Serializable {
@ApiModelProperty(value = "发送者id")
private Long senderId;
@ApiModelProperty(value = "接收者id")
private Long receiverId;
@ApiModelProperty(value = "会员id")
private Long memberId;
@ApiModelProperty(value = "会员id")
private Long tiktokId;
@ApiModelProperty(value = "消息属于哪个用户id")
private Long userId;
@ApiModelProperty(value = "消息内容")
@Convert(converter = EmojiConverterListJson.class)
private String msg;
@ -51,12 +57,15 @@ public class TiktokPrivateLetter implements Serializable {
@ApiModelProperty(value = "是否读取0未读 1已读")
private Integer isRead = 0;
@ApiModelProperty(value = "消息时间")
private Long msgTime;
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间")
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value = "mq消息")
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "true发送false接收")

@ -0,0 +1,49 @@
package com.baiye.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
/**
*
* @author Enzo
* @date : 2022-10-10
*/
@Getter
@Setter
@TableName("tb_tiktok_private_letter_parameter")
public class TiktokPrivateLetterParameter implements Serializable {
private static final long serialVersionUID = -5094808793570870865L;
@TableId(value = "id", type = IdType.AUTO)
@ApiModelProperty(value = "ID")
private Long id;
@ApiModelProperty(value = "第一次请求0 第二次为第一次请求")
private Long maxTime;
@ApiModelProperty(value = "抖音设备id")
private String dyVendorId;
@ApiModelProperty(value = "请求类型")
private Integer type;
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间")
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value = "修改时间")
private Date updateTime;
}

@ -0,0 +1,31 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.mapstruct;
import com.baiye.core.base.BaseMapStruct;
import com.baiye.dto.TiktokPrivateLetterDTO;
import com.baiye.entity.TiktokPrivateLetter;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author Zheng Jie
* @date 2019-03-29
*/
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface MessageRecordMapStruct extends BaseMapStruct<TiktokPrivateLetterDTO, TiktokPrivateLetter> {
}

@ -12,11 +12,12 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommentRecordQuery {
public class MessageRecordQuery {
@Query
private String tiktokId;
@Query
private Long videoId;
}

@ -26,8 +26,8 @@ public class TiktokPrivateLetterRequest extends BaseTiktokRequest {
@ApiModelProperty(value = "设备抖音标识")
private String vendorId;
@ApiModelProperty(value = "作者id")
private String maxTime;
@ApiModelProperty(value = "第一次传0后面传前一次返回的maxtime返回的消息是从这个时间点开始的")
private Long maxTime;
@ApiModelProperty(value = "是否需要登录")
private Boolean checkLogin = Boolean.TRUE;

@ -0,0 +1,58 @@
package com.baiye.api.request;
import com.baiye.api.response.TiktokSendMessageResponse;
import com.baiye.core.base.api.BaseTiktokRequest;
import com.baiye.dto.request.CommentVideoListRequestDTO;
import com.baiye.dto.request.SendMessageRequestDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @author Enzo
* @date : 2022/8/24
*/
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class TiktokSendMessageRequest extends BaseTiktokRequest {
private TiktokSendMessageDTO data;
@lombok.Data
public class TiktokSendMessageDTO {
@ApiModelProperty("设备抖音标识")
private String vendorId;
@ApiModelProperty("用户Id")
private String userId;
@ApiModelProperty("用户昵称")
private String nickName;
@ApiModelProperty("消息内容, 视频消息请传视频ID")
private String content;
@ApiModelProperty("消息类型 7-文字信息8-视频消息")
private Integer type;
@ApiModelProperty(value = "是否需要登录")
private Boolean checkLogin = Boolean.TRUE;
@ApiModelProperty(value = "是否需要详细信息")
private Boolean checkProxyInfo = Boolean.FALSE;
}
@Override
public Class<TiktokSendMessageResponse> getResponseClass() {
return TiktokSendMessageResponse.class;
}
}

@ -1,13 +1,11 @@
package com.baiye.api.response;
import com.baiye.core.base.api.BaseTiktokResponse;
import com.baiye.dto.CommentVideoDTO;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
/**
* @author Enzo
@ -17,7 +15,7 @@ import java.util.List;
@Setter
@AllArgsConstructor
public class TiktokCommentVideoListResponse extends
BaseTiktokResponse<TiktokCommentVideoListResponse> implements Serializable {
BaseTiktokResponse<TiktokSendMessageResponse> implements Serializable {

@ -58,7 +58,7 @@ public class TiktokPrivateLetterResponse extends BaseTiktokResponse<TiktokPrivat
private String converstionId;
@JsonProperty("senderId")
private String senderId;
private Long senderId;
@JsonProperty("text")
private Text text;

@ -0,0 +1,25 @@
package com.baiye.api.response;
import com.baiye.core.base.api.BaseTiktokResponse;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
* @author Enzo
* @date : 2022/8/24
*/
@Getter
@Setter
@AllArgsConstructor
public class TiktokSendMessageResponse extends
BaseTiktokResponse<TiktokSendMessageResponse> implements Serializable {
private static final long serialVersionUID = 7515504688664430338L;
}

@ -13,6 +13,7 @@ import com.baiye.core.constant.EncryptionConstants;
import com.baiye.core.util.AesEncrypt;
import com.baiye.dto.*;
import com.baiye.dto.request.OptCommentVideoRequestDTO;
import com.baiye.dto.request.SendMessageRequestDTO;
import com.baiye.exception.global.BadRequestException;
import com.baiye.feign.TikTokUserFeignProvider;
import com.baiye.service.BaseSocketServerHandler;
@ -240,6 +241,7 @@ public class TiktokSocketServerHandler extends SimpleChannelInboundHandler<Objec
Result<Object> objectResult = null;
if (tiktokWebsocketMessageRequestDTO != null && tiktokWebsocketMessageRequestDTO.getData() != null) {
Integer type = tiktokWebsocketMessageRequestDTO.getType();
// 发送评论
if (type == DefaultNumberConstants.ONE_NUMBER) {
OptCommentVideoRequestDTO requestDTO = JSONUtil.toBean(JSONUtil.toJsonStr
(tiktokWebsocketMessageRequestDTO.getData()), OptCommentVideoRequestDTO.class);
@ -251,6 +253,12 @@ public class TiktokSocketServerHandler extends SimpleChannelInboundHandler<Objec
requestDTO.setUserId(Long.parseLong(decrypt));
objectResult = tikTokUserFeignProvider.optVideoComment(requestDTO);
}
// 发送私信
if (type == DefaultNumberConstants.TWO_NUMBER) {
SendMessageRequestDTO requestDTO = JSONUtil.toBean(JSONUtil.toJsonStr
(tiktokWebsocketMessageRequestDTO.getData()), SendMessageRequestDTO.class);
objectResult = tikTokUserFeignProvider.sendMessage(requestDTO);
}
}
String message = ObjectUtil.isNotNull(objectResult) && StringUtils.isNotBlank

@ -1,6 +1,5 @@
package com.baiye.service;
import com.baiye.core.base.api.Result;
import com.baiye.core.page.PageResult;
import com.baiye.entity.TiktokEquipmentEntity;
import com.baomidou.mybatisplus.extension.service.IService;
@ -53,4 +52,5 @@ public interface TiktokEquipmentService extends IService<TiktokEquipmentEntity>
List<TiktokEquipmentEntity> findByOrganizeId(Long organizeId, int num);
TiktokEquipmentEntity findByDyVendorId(String vendorId);
}

@ -20,10 +20,12 @@ public interface TiktokMemberService extends IService<TiktokMember> {
/**
* id
*
* @param tiktokId
* @param belongTiktokId
* @return
*/
TiktokMemberDTO saveTiktokMemberByTiktok(String tiktokId);
TiktokMemberDTO saveTiktokMemberByTiktok(String tiktokId, String belongTiktokId);
/**
* id

@ -0,0 +1,31 @@
package com.baiye.service;
import com.baiye.entity.TiktokPrivateLetterParameter;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Enzo
* @date 2022-10-10
*/
public interface TiktokPrivateLetterParameterService extends IService<TiktokPrivateLetterParameter> {
/**
*
* @param dyVendorId
* @param num
* @return
*/
TiktokPrivateLetterParameter selectByVendorId(String dyVendorId, Integer num);
/**
*
*
* @param byVendorId
* @param dyVendorId
* @param maxTime
* @param num
* @return
*/
Boolean saveOrUpdateParameter(TiktokPrivateLetterParameter byVendorId, String dyVendorId, Long maxTime, Integer num);
}

@ -1,10 +1,15 @@
package com.baiye.service;
import com.baiye.core.page.PageResult;
import com.baiye.dto.MessageRecordDTO;
import com.baiye.dto.TiktokMemberDTO;
import com.baiye.entity.TiktokPrivateLetter;
import com.baiye.query.MessageRecordQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.data.domain.Pageable;
import java.util.List;
/**
* @author Enzo
* @date 2022-8-31
@ -16,5 +21,45 @@ public interface TiktokPrivateLetterService extends IService<TiktokPrivateLetter
* @param pageable
* @return
*/
PageResult queryAll(Pageable pageable);
List<MessageRecordDTO> queryAll(Pageable pageable);
/**
*
* @param list
*/
void batchInsertPrivateLetter(List<TiktokPrivateLetter> list);
/**
*
*
* @param tiktokMemberDTO
* @param privateLetter
*/
void sendMessage(TiktokMemberDTO tiktokMemberDTO, TiktokPrivateLetter privateLetter);
/**
*
* @param tiktokId
*/
void readMessage(Long tiktokId);
/**
*
* @param tiktokId
*/
void notReadMessage(Long tiktokId);
/**
*
* @param tiktokId
*/
void deleteMessage(Long tiktokId);
/**
*
* @param messageRecordQuery
* @param pageable
* @return
*/
PageResult queryMessageByUserId(MessageRecordQuery messageRecordQuery, Pageable pageable);
}

@ -0,0 +1,19 @@
package com.baiye.service;
import com.baiye.core.base.api.Result;
import com.baiye.dto.request.SendMessageRequestDTO;
/**
* @author Enzo
* @date : 2022/10/12
*/
public interface TiktokUserMessageService {
/**
*
* @param messageRequestDTO
* @return
*/
Result<Object> sendMessage(SendMessageRequestDTO messageRequestDTO);
}

@ -1,11 +1,11 @@
package com.baiye.service;
import com.baiye.core.base.api.Result;
import com.baiye.dto.CommentMessageRecordDTO;
import com.baiye.dto.MessageRecordDTO;
import com.baiye.dto.SaveSopCommentDTO;
import com.baiye.entity.TiktokEquipmentEntity;
import com.baiye.entity.TiktokVideoComment;
import com.baiye.query.CommentRecordQuery;
import com.baiye.query.MessageRecordQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.data.domain.Pageable;
@ -26,36 +26,42 @@ public interface TiktokVideoCommentService extends IService<TiktokVideoComment>
* @param currentUserId
* @return
*/
List<CommentMessageRecordDTO> commentPage(Pageable pageable, Long currentUserId);
List<MessageRecordDTO> commentPage(Pageable pageable, Long currentUserId);
/**
*
* @param memberId
*
* @param tiktokId
* @param videoId
*/
void readComment(Long memberId);
void readComment(Long tiktokId, Long videoId);
/**
*
* @param memberId
*
* @param tiktokId
* @param videoId
*/
void deleteComment(Long memberId);
void deleteComment(Long tiktokId, Long videoId);
/**
*
*
* @param
* @param commentRecordQuery
* @param messageRecordQuery common
* @param pageable
* @return
*/
Map<String, Object> queryMessageByUserId(CommentRecordQuery commentRecordQuery, Pageable pageable);
Map<String, Object> queryMessageByUserId(MessageRecordQuery messageRecordQuery, Pageable pageable);
/**
*
* @param memberId
*
* @param tiktokId
* @param videoId
*/
void notReadComment(Long memberId);
void notReadComment(Long tiktokId, Long videoId);
/**
*
@ -73,7 +79,7 @@ public interface TiktokVideoCommentService extends IService<TiktokVideoComment>
Result<TiktokEquipmentEntity> getEquipmentByOrganizeId(Long organizeId);
/**
*
* id
* @param videoId
* @return
*/
@ -93,4 +99,10 @@ public interface TiktokVideoCommentService extends IService<TiktokVideoComment>
*/
Boolean saveComment(List<SaveSopCommentDTO> dtoList);
/**
*
* @param message
*/
void sendMessage(String message);
}

@ -15,7 +15,6 @@ import com.baiye.entity.TiktokEquipmentEntity;
import com.baiye.entity.TiktokNumOrganizeEntity;
import com.baiye.service.TiktokEquipmentService;
import com.baiye.service.TiktokUserService;
import com.baiye.utils.GetVendorIdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -35,7 +34,8 @@ import java.util.stream.Collectors;
@Service
@Slf4j
@RequiredArgsConstructor
public class TiktokEquipmentServiceImpl extends ServiceImpl<TiktokEquipmentMapper, TiktokEquipmentEntity> implements TiktokEquipmentService {
public class TiktokEquipmentServiceImpl
extends ServiceImpl<TiktokEquipmentMapper, TiktokEquipmentEntity> implements TiktokEquipmentService {
private final TiktokUserService tiktokUserService;
@ -160,6 +160,11 @@ public class TiktokEquipmentServiceImpl extends ServiceImpl<TiktokEquipmentMappe
eq(TiktokEquipmentEntity::getDeviceStatus, num));
}
@Override
public TiktokEquipmentEntity findByDyVendorId(String vendorId) {
return this.getOne(new LambdaQueryWrapper<TiktokEquipmentEntity>().eq
(TiktokEquipmentEntity::getDyVendorId, vendorId));
}
}

@ -28,7 +28,8 @@ import java.util.stream.Collectors;
*/
@Service
@RequiredArgsConstructor
public class TiktokLabelOrganizeServiceImpl extends ServiceImpl<TiktokLabelOrganizeMapper, TiktokLabelOrganizeEntity> implements TiktokLabelOrganizeService {
public class TiktokLabelOrganizeServiceImpl
extends ServiceImpl<TiktokLabelOrganizeMapper, TiktokLabelOrganizeEntity> implements TiktokLabelOrganizeService {
private final TiktokLabelService labelService;

@ -1,6 +1,5 @@
package com.baiye.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
@ -13,7 +12,6 @@ import com.baiye.core.constant.TiktokRequestConstants;
import com.baiye.dao.TiktokMemberMapper;
import com.baiye.dto.TiktokMemberDTO;
import com.baiye.dto.request.SearchMemberRequestDTO;
import com.baiye.entity.TiktokEquipmentEntity;
import com.baiye.entity.TiktokMember;
import com.baiye.mapstruct.TiktokMemberStruct;
import com.baiye.properties.TiktokProperties;
@ -26,8 +24,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author Enzo
* @date : 2022/9/22
@ -61,50 +57,45 @@ public class TiktokMemberServiceImpl extends
}
@Override
@Cacheable(cacheNames = "memberCache",key = "'tiktokId:' + #tiktokId")
public TiktokMemberDTO saveTiktokMemberByTiktok(String tiktokId) {
@Cacheable(cacheNames = "memberCache", key = "'tiktokId:' + #tiktokId")
public TiktokMemberDTO saveTiktokMemberByTiktok(String tiktokId, String belongTiktokId) {
TiktokMember member = this.getOne
(new LambdaQueryWrapper<TiktokMember>()
.eq(TiktokMember::getTiktokId, tiktokId));
if (ObjectUtil.isNotNull(member)) {
return tiktokMemberStruct.toDto(member);
return tiktokMemberStruct.toDto(member);
}
TiktokSearchMemberRequest request = new TiktokSearchMemberRequest();
List<TiktokEquipmentEntity> accountEntityList =
tiktokEquipmentService.findBySignInStatus(DefaultNumberConstants.ONE_NUMBER);
if (CollUtil.isNotEmpty(accountEntityList)) {
for (TiktokEquipmentEntity entity : accountEntityList) {
// 设置请求参数
SearchMemberRequestDTO data = SearchMemberRequestDTO.builder().
userId(tiktokId).
checkLogin(Boolean.FALSE).
vendorId(entity.getDyVendorId()).
checkProxyInfo(Boolean.FALSE).build();
request.setData(data);
// 设置请求参数
TiktokSearchMemberResponse tiktokResponse = TiktokRequestClient.createTiktokResponse
(TiktokRequestConstants.GET_USER_PROFILE, request, tiktokProperties);
if (Boolean.TRUE.equals(tiktokResponse.getSuccess())
&& tiktokResponse.getStatus() == HttpStatus.SUCCESS) {
TiktokSearchMemberResponse.User user = tiktokResponse.getData();
if (ObjectUtil.isNotNull(user) && ObjectUtil.isNotNull(user.getUniqueId())) {
Long memberId = IdUtil.getSnowflake(workerId, datacenterId).nextId();
TiktokMember tiktokMember = TiktokMember.builder().tiktokId(tiktokId).
avatar(user.getAvatarMedium().get(DefaultNumberConstants.ZERO_NUMBER)).
city(user.getCity()).nickname(user.getNickname()).province(user.getProvince()).
// 设置请求参数
SearchMemberRequestDTO data = SearchMemberRequestDTO.builder().
userId(tiktokId).
checkLogin(Boolean.FALSE).
vendorId(belongTiktokId).
checkProxyInfo(Boolean.FALSE).build();
request.setData(data);
// 设置请求参数
TiktokSearchMemberResponse tiktokResponse = TiktokRequestClient.createTiktokResponse
(TiktokRequestConstants.GET_USER_PROFILE, request, tiktokProperties);
if (Boolean.TRUE.equals(tiktokResponse.getSuccess())
&& tiktokResponse.getStatus() == HttpStatus.SUCCESS) {
TiktokSearchMemberResponse.User user = tiktokResponse.getData();
if (ObjectUtil.isNotNull(user) && ObjectUtil.isNotNull(user.getUniqueId())) {
Long memberId = IdUtil.getSnowflake(workerId, datacenterId).nextId();
TiktokMember tiktokMember = TiktokMember.builder().tiktokId(tiktokId).
avatar(user.getAvatarMedium().get(DefaultNumberConstants.ZERO_NUMBER)).
city(user.getCity()).nickname(user.getNickname()).province(user.getProvince()).
gender(user.getGender()).id(memberId).build();
return tiktokMemberMapper.insert(tiktokMember) > DefaultNumberConstants.ZERO_NUMBER ? tiktokMemberStruct.toDto(tiktokMember) : null;
}
}
return tiktokMemberMapper.insert(tiktokMember) >
DefaultNumberConstants.ZERO_NUMBER ? tiktokMemberStruct.toDto(tiktokMember) : null;
}
}
return null;
}
@Override
@Cacheable(cacheNames = "tiktokMemberCache",key = "'member:' + #memberId")
public TiktokMemberDTO queryById(Long memberId) {
@Cacheable(cacheNames = "tiktokMemberCache", key = "'member:' + #memberId")
public TiktokMemberDTO queryById(Long memberId) {
return tiktokMemberStruct.toDto(this.getById(memberId));
}

@ -0,0 +1,46 @@
package com.baiye.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baiye.core.constant.DefaultNumberConstants;
import com.baiye.dao.TiktokPrivateLetterParameterMapper;
import com.baiye.entity.TiktokPrivateLetterParameter;
import com.baiye.service.TiktokPrivateLetterParameterService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author Enzo
* @date 2022-10-10
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class TiktokPrivateLetterParameterServiceImpl extends
ServiceImpl<TiktokPrivateLetterParameterMapper, TiktokPrivateLetterParameter> implements TiktokPrivateLetterParameterService {
@Override
public TiktokPrivateLetterParameter selectByVendorId(String dyVendorId, Integer num) {
return this.baseMapper.selectOne(new LambdaQueryWrapper<TiktokPrivateLetterParameter>().eq
(TiktokPrivateLetterParameter::getDyVendorId, dyVendorId).eq(TiktokPrivateLetterParameter::getType, num));
}
@Override
public Boolean saveOrUpdateParameter(TiktokPrivateLetterParameter byVendorId, String dyVendorId, Long maxTime, Integer num) {
if (ObjectUtil.isNull(byVendorId)) {
byVendorId = new TiktokPrivateLetterParameter();
byVendorId.setType(num);
byVendorId.setMaxTime(maxTime);
byVendorId.setDyVendorId(dyVendorId);
return baseMapper.insert(byVendorId) > DefaultNumberConstants.ZERO_NUMBER;
}
return this.update(new LambdaUpdateWrapper<TiktokPrivateLetterParameter>().eq
(TiktokPrivateLetterParameter::getId, byVendorId.getId()).
set(TiktokPrivateLetterParameter::getMaxTime, maxTime));
}
}

@ -1,16 +1,44 @@
package com.baiye.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.baiye.core.constant.DateConstant;
import com.baiye.core.constant.DefaultNumberConstants;
import com.baiye.core.page.PageResult;
import com.baiye.dao.TiktokPrivateLetterMapper;
import com.baiye.dto.TiktokPrivateLetterMessageRecordDTO;
import com.baiye.dto.MessageRecordDTO;
import com.baiye.dto.SelectGroupDTO;
import com.baiye.dto.TiktokMemberDTO;
import com.baiye.entity.TiktokEquipmentEntity;
import com.baiye.entity.TiktokPrivateLetter;
import com.baiye.entity.TiktokVideoComment;
import com.baiye.handler.TiktokSocketServerHandler;
import com.baiye.mapstruct.MessageRecordMapStruct;
import com.baiye.query.MessageRecordQuery;
import com.baiye.service.TiktokMemberService;
import com.baiye.service.TiktokPrivateLetterService;
import com.baiye.util.PageUtils;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static java.util.Comparator.comparing;
@ -19,67 +47,128 @@ import static java.util.Comparator.comparing;
* @date : 2022/8/31
*/
@Service
public class TiktokPrivateLetterServiceImpl extends ServiceImpl<TiktokPrivateLetterMapper, TiktokPrivateLetter> implements TiktokPrivateLetterService {
@RequiredArgsConstructor
public class TiktokPrivateLetterServiceImpl extends
ServiceImpl<TiktokPrivateLetterMapper, TiktokPrivateLetter> implements TiktokPrivateLetterService {
private final TiktokMemberService tiktokMemberService;
private final MessageRecordMapStruct messageRecordMapStruct;
private final TiktokSocketServerHandler tiktokSocketServerHandler;
private final TiktokPrivateLetterMapper tiktokPrivateLetterMapper;
@Override
public PageResult queryAll(Pageable pageable) {
List<TiktokPrivateLetterMessageRecordDTO> messageRecord = Lists.newArrayList();
/* ResponseMessageRecordDTO recordDTO;
// 查询所有用户
List<Long> userIdList = personalWeChatUserService.
selectUserIdListByCurrentUserId(currentUserId);
if (CollUtil.isNotEmpty(userIdList)) {
for (Long userId : userIdList) {
recordDTO = new ResponseMessageRecordDTO();
// 查询前十条数据
List<MessageRecord> list = this.list
(new LambdaQueryWrapper<MessageRecord>()
.eq(MessageRecord::getUserId, userId).orderByDesc
(MessageRecord::getCreateTime)
.last("limit 10"));
if (CollUtil.isNotEmpty(list)) {
// 查询未读数量
int count = this.count
(new LambdaQueryWrapper<MessageRecord>()
.eq(MessageRecord::getUserId, userId)
.eq(MessageRecord::getIsRead, Boolean.FALSE));
// 查询用户
PersonalWeChatUserDTO user =
personalWeChatUserService.queryByUserId(userId);
user.setEnterpriseId(AesEncrypt.encrypt
(user.getEnterpriseId(),EncryptionConstants.ENCRYPTION_KEY));
List<MessageRecordDTO> dtoList =
recordMapStruct.toDto(list);
// 获取最后一条数据
MessageRecord lastRecord = list.get
(list.size() - DefaultNumberConstants.ONE_NUMBER);
if (ObjectUtil.isNotNull(lastRecord)) {
recordDTO.setLastMessageTime(lastRecord.getCreateTime());
}
recordDTO.setLastUpdateTime(user.getUpdateTime());
recordDTO.setIsRead
(count > DefaultNumberConstants.ZERO_NUMBER);
public List<MessageRecordDTO> queryAll(Pageable pageable) {
List<MessageRecordDTO> messageRecord = Lists.newArrayList();
MessageRecordDTO recordDTO;
Page<MessageRecordDTO> page = new Page<>
(pageable.getPageNumber(), pageable.getPageSize());
IPage<SelectGroupDTO> queryMemberId =
tiktokPrivateLetterMapper.queryMemberId(page);
if (CollUtil.isNotEmpty(queryMemberId.getRecords())) {
for (SelectGroupDTO dto : queryMemberId.getRecords()) {
recordDTO = new MessageRecordDTO();
// 查询未读数量
int count = this.count
(new LambdaQueryWrapper<TiktokPrivateLetter>().
eq(TiktokPrivateLetter::getMemberId, dto.getMemberId()).
eq(TiktokPrivateLetter::getIsRead, Boolean.FALSE));
// 查询用户
TiktokMemberDTO user =
tiktokMemberService.queryById(Long.parseLong(dto.getMemberId()));
if (ObjectUtil.isNotNull(user)) {
recordDTO.setIsStar(user.getIsStar());
recordDTO.setWeChatUser(user);
recordDTO.setNotReadNum(count);
recordDTO.setMessageRecordList(dtoList);
messageRecord.add(recordDTO);
recordDTO.setLastUpdateTime(user.getUpdateTime());
}
recordDTO.setNotReadNum(count);
recordDTO.setTiktokMember(user);
recordDTO.setLastComment(dto.getContent());
recordDTO.setLastMessageTime(dto.getCreateTime());
recordDTO.setTiktokVideoComments(Lists.newArrayList());
recordDTO.setMsgType(DefaultNumberConstants.ONE_NUMBER);
recordDTO.setIsRead(count > DefaultNumberConstants.ZERO_NUMBER);
messageRecord.add(recordDTO);
}
}
// 排序 先以是否星标 -> 是否含有未读倒序 -> 再以消息时间降序 -> 最后以时间倒叙
// 排序 是否含有未读倒序 -> 再以消息时间降序 -> 最后以用户时间倒叙
messageRecord.sort
(comparing(ResponseMessageRecordDTO::getIsStar).thenComparing(ResponseMessageRecordDTO::getIsRead)
.thenComparing(ResponseMessageRecordDTO::getLastMessageTime).reversed()
.thenComparing(ResponseMessageRecordDTO::getLastUpdateTime));
(comparing(MessageRecordDTO::getIsRead)
.thenComparing(MessageRecordDTO::getLastMessageTime).reversed()
.thenComparing(MessageRecordDTO::getLastUpdateTime));
return messageRecord;
return null;*/
return null;
}
@Override
public void batchInsertPrivateLetter(List<TiktokPrivateLetter> list) {
if (CollUtil.isNotEmpty(list)) {
tiktokPrivateLetterMapper.batchInsert(list);
}
}
@Override
public void sendMessage(TiktokMemberDTO tiktokMemberDTO, TiktokPrivateLetter privateLetter) {
MessageRecordDTO recordDTO = new MessageRecordDTO();
recordDTO.setMsgFlag(Boolean.TRUE);
// 查询未读数量
recordDTO.setTiktokMember(tiktokMemberDTO);
recordDTO.setIsRead(Boolean.TRUE);
if (ObjectUtil.isNotNull(tiktokMemberDTO)) {
recordDTO.setIsStar(tiktokMemberDTO.getIsStar());
recordDTO.setLastUpdateTime(tiktokMemberDTO.getUpdateTime());
}
recordDTO.setLastMessageTime(DateUtil.date());
recordDTO.setMsgType(privateLetter.getMsgType());
recordDTO.setNotReadNum(DefaultNumberConstants.ONE_NUMBER);
recordDTO.setLastComment(privateLetter.getMsg());
String string = JSON.toJSONStringWithDateFormat(recordDTO, DateConstant.NORM_DATETIME_PATTERN);
Map<String, Object> map = new Gson().fromJson(string, new TypeToken<HashMap<String, Object>>() {}.getType());
// 发送消息
tiktokSocketServerHandler.sendMessage(String.valueOf(DefaultNumberConstants.ONE_NUMBER), map);
}
@Override
public void readMessage(Long tiktokId) {
this.update(new LambdaUpdateWrapper<TiktokPrivateLetter>().
eq(TiktokPrivateLetter::getTiktokId, tiktokId).
set(TiktokPrivateLetter::getIsRead, Boolean.TRUE));
}
@Override
public void notReadMessage(Long tiktokId) {
this.baseMapper.updateNotReadMessageByMember
(DefaultNumberConstants.ZERO_NUMBER, DefaultNumberConstants.ONE_NUMBER, tiktokId);
}
@Override
public void deleteMessage(Long tiktokId) {
LambdaQueryWrapper<TiktokPrivateLetter> remove =
new LambdaQueryWrapper<TiktokPrivateLetter>().eq
(TiktokPrivateLetter::getTiktokId, tiktokId);
this.remove(remove);
}
@Override
public PageResult queryMessageByUserId(MessageRecordQuery messageRecordQuery, Pageable pageable) {
Page<TiktokPrivateLetter> page = PageUtils.startPageAndSort(pageable);
Wrapper<TiktokPrivateLetter> queryWrapper =
new LambdaQueryWrapper<TiktokPrivateLetter>().eq
(TiktokPrivateLetter::getTiktokId,
messageRecordQuery.getTiktokId());
Page<TiktokPrivateLetter> selectPage = this.page(page, queryWrapper);
Collections.reverse(selectPage.getRecords());
return PageResult.success
(selectPage.getTotal(), selectPage.getPages(),
this.messageRecordMapStruct.toDto(selectPage.getRecords()));
}
}

@ -0,0 +1,93 @@
package com.baiye.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baiye.api.TiktokRequestClient;
import com.baiye.api.request.TiktokSendMessageRequest;
import com.baiye.api.response.TiktokOptCommentVideoResponse;
import com.baiye.api.response.TiktokSendMessageResponse;
import com.baiye.core.base.api.Result;
import com.baiye.core.base.api.ResultCode;
import com.baiye.core.constant.DefaultNumberConstants;
import com.baiye.core.constant.TiktokRequestConstants;
import com.baiye.dao.TiktokPrivateLetterMapper;
import com.baiye.dto.TiktokMemberDTO;
import com.baiye.dto.request.SendMessageRequestDTO;
import com.baiye.entity.TiktokEquipmentEntity;
import com.baiye.entity.TiktokPrivateLetter;
import com.baiye.properties.TiktokProperties;
import com.baiye.request.MessageRequest;
import com.baiye.service.TiktokEquipmentService;
import com.baiye.service.TiktokMemberService;
import com.baiye.service.TiktokUserMessageService;
import com.baomidou.mybatisplus.extension.api.R;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
/**
* @author Enzo
* @date : 2022/10/12
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class TiktokUserMessageServiceImpl implements TiktokUserMessageService {
@Value("${snowflake.workerId}")
private int workerId;
@Value("${snowflake.datacenterId}")
private int datacenterId;
private final TiktokProperties tiktokProperties;
private final TiktokMemberService tiktokMemberService;
private final TiktokEquipmentService tiktokEquipmentService;
private final TiktokPrivateLetterMapper tiktokPrivateLetterMapper;
@Override
public Result<Object> sendMessage(SendMessageRequestDTO messageRequestDTO) {
TiktokSendMessageRequest request = new TiktokSendMessageRequest();
TiktokSendMessageRequest.TiktokSendMessageDTO messageDTO = request.new TiktokSendMessageDTO();
BeanUtil.copyProperties(messageRequestDTO, messageDTO);
request.setData(messageDTO);
// 构建参数
TiktokSendMessageResponse response = TiktokRequestClient.createTiktokResponse
(TiktokRequestConstants.TIK_TOK_SEND_MESSAGE, request, tiktokProperties);
if (ObjectUtil.isNotNull(response.getSuccess())
&& Boolean.TRUE.equals(response.getSuccess())) {
if (response.getStatus() == HttpStatus.OK.value()) {
Long nextId = IdUtil.getSnowflake
(workerId, datacenterId).nextId();
TiktokEquipmentEntity byDyVendorId
= tiktokEquipmentService.findByDyVendorId(messageRequestDTO.getVendorId());
TiktokMemberDTO tiktokMemberDTO = tiktokMemberService.saveTiktokMemberByTiktok
(messageRequestDTO.getUserId(), messageRequestDTO.getVendorId());
// 构建实体
TiktokPrivateLetter privateLetter =
TiktokPrivateLetter.builder().id(nextId).senderId(Long.parseLong(byDyVendorId.getDyUserId())).
receiverId(Long.parseLong(messageRequestDTO.getUserId())).
msg(messageRequestDTO.getContent()).memberId(ObjectUtil.isNotNull(tiktokMemberDTO)
? Long.parseLong(tiktokMemberDTO.getId()) : nextId).tiktokId(Long.parseLong(messageRequestDTO.getUserId())).status
(DefaultNumberConstants.ONE_NUMBER).msgType(messageRequestDTO.getType()).
isRead(DefaultNumberConstants.ZERO_NUMBER).msgTime(DateUtil.date().getTime()).build();
tiktokPrivateLetterMapper.insert(privateLetter);
return Result.success();
}
return Result.fail(StringUtils.isNotBlank
(response.getMsg()) ? response.getMsg()
: ResultCode.SEND_MESSAGE_FAILED.getMsg());
}
return Result.fail(StringUtils.isNotBlank
(response.getMsg()) ? response.getMsg()
: ResultCode.SEND_MESSAGE_FAILED.getMsg());
}
}

@ -1,24 +1,21 @@
package com.baiye.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.baiye.core.base.api.Result;
import com.baiye.core.constant.DateConstant;
import com.baiye.core.constant.DefaultNumberConstants;
import com.baiye.dao.TiktokVideoCommentMapper;
import com.baiye.dto.CommentMessageRecordDTO;
import com.baiye.dto.SaveSopCommentDTO;
import com.baiye.dto.SelectGroupDTO;
import com.baiye.dto.TiktokMemberDTO;
import com.baiye.dto.*;
import com.baiye.entity.TiktokEquipmentEntity;
import com.baiye.entity.TiktokMember;
import com.baiye.entity.TiktokVideoComment;
import com.baiye.handler.TiktokSocketServerHandler;
import com.baiye.mapstruct.TiktokVideoCommentStruct;
import com.baiye.query.CommentRecordQuery;
import com.baiye.query.MessageRecordQuery;
import com.baiye.service.TiktokEquipmentService;
import com.baiye.service.TiktokMemberService;
import com.baiye.service.TiktokVideoCommentService;
@ -32,13 +29,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -75,18 +76,18 @@ public class TiktokVideoCommentServiceImpl extends
@Override
public List<CommentMessageRecordDTO> commentPage(Pageable pageable, Long currentUserId) {
public List<MessageRecordDTO> commentPage(Pageable pageable, Long currentUserId) {
List<CommentMessageRecordDTO> messageRecord = Lists.newArrayList();
CommentMessageRecordDTO recordDTO;
List<MessageRecordDTO> messageRecord = Lists.newArrayList();
MessageRecordDTO recordDTO;
Page<CommentMessageRecordDTO> page = new Page<>(pageable.getPageNumber(), pageable.getPageSize());
Page<MessageRecordDTO> page = new Page<>(pageable.getPageNumber(), pageable.getPageSize());
IPage<SelectGroupDTO> queryMemberId = tiktokVideoCommentMapper.queryMemberId(page, currentUserId);
if (CollUtil.isNotEmpty(queryMemberId.getRecords())) {
for (SelectGroupDTO dto : queryMemberId.getRecords()) {
recordDTO = new CommentMessageRecordDTO();
recordDTO = new MessageRecordDTO();
// 查询未读数量
int count = this.count
@ -115,35 +116,38 @@ public class TiktokVideoCommentServiceImpl extends
}
// 排序 是否含有未读倒序 -> 再以消息时间降序 -> 最后以用户时间倒叙
messageRecord.sort
(comparing(CommentMessageRecordDTO::getIsRead)
.thenComparing(CommentMessageRecordDTO::getLastMessageTime).reversed()
.thenComparing(CommentMessageRecordDTO::getLastUpdateTime));
(comparing(MessageRecordDTO::getIsRead)
.thenComparing(MessageRecordDTO::getLastMessageTime).reversed()
.thenComparing(MessageRecordDTO::getLastUpdateTime));
return messageRecord;
}
@Override
public void readComment(Long memberId) {
public void readComment(Long tiktokId, Long videoId) {
this.update(new LambdaUpdateWrapper<TiktokVideoComment>().
eq(TiktokVideoComment::getMemberId, memberId).
set(TiktokVideoComment::getIsRead, Boolean.TRUE));
eq(TiktokVideoComment::getTiktokId, tiktokId).
eq(TiktokVideoComment::getVideoId, videoId).
set(TiktokVideoComment::getIsRead, Boolean.TRUE));
}
@Override
public void deleteComment(Long memberId) {
public void deleteComment(Long tiktokId, Long videoId) {
LambdaQueryWrapper<TiktokVideoComment> remove =
new LambdaQueryWrapper<TiktokVideoComment>().eq(TiktokVideoComment::getMemberId, memberId);
new LambdaQueryWrapper<TiktokVideoComment>().eq
(TiktokVideoComment::getTiktokId, tiktokId).eq
(TiktokVideoComment::getVideoId, videoId);
this.remove(remove);
}
@Override
public Map<String, Object> queryMessageByUserId(CommentRecordQuery commentRecordQuery, Pageable pageable) {
public Map<String, Object> queryMessageByUserId(MessageRecordQuery messageRecordQuery, Pageable pageable) {
Map<String, Object> map = Maps.newHashMap();
Page<TiktokVideoComment> page = PageUtils.startPageAndSort(pageable);
Wrapper<TiktokVideoComment> queryWrapper =
new LambdaQueryWrapper<TiktokVideoComment>().eq
(TiktokVideoComment::getTiktokId,
commentRecordQuery.getTiktokId()).
eq(TiktokVideoComment::getVideoId, commentRecordQuery.getVideoId());
messageRecordQuery.getTiktokId()).
eq(TiktokVideoComment::getVideoId, messageRecordQuery.getVideoId());
Page<TiktokVideoComment> selectPage = this.page(page, queryWrapper);
Collections.reverse(selectPage.getRecords());
@ -166,9 +170,9 @@ public class TiktokVideoCommentServiceImpl extends
}
@Override
public void notReadComment(Long memberId) {
public void notReadComment(Long tiktokId, Long videoId) {
this.baseMapper.updateNotReadCommentByMember
(DefaultNumberConstants.ZERO_NUMBER, DefaultNumberConstants.ONE_NUMBER, memberId);
(DefaultNumberConstants.ZERO_NUMBER, DefaultNumberConstants.ONE_NUMBER, tiktokId, videoId);
}
@Override
@ -211,21 +215,22 @@ public class TiktokVideoCommentServiceImpl extends
List<TiktokVideoComment> commentsList = Lists.newArrayList();
if (CollUtil.isNotEmpty(dtoList)) {
for (SaveSopCommentDTO dto : dtoList) {
if (CollUtil.isNotEmpty(dto.getDtoList())) {
String searchVendorId = vendorIdUtil.getSearchVendorId(dto.getOrganizeId(), DefaultNumberConstants.TEN_NUMBER);
if (CollUtil.isNotEmpty(dto.getDtoList()) && StringUtils.isBlank(searchVendorId)) {
// 视频查询评论列表
List<Long> longs = tiktokVideoCommentMapper.selectCommentByVideoId(dto.getAwemeId());
for (SaveSopCommentDTO.TiktokSopCommentVideoDTO commentVideoDTO : dto.getDtoList()) {
// 评论别人
if (Boolean.TRUE.equals(commentVideoDTO.getIsCommentOther())) {
TiktokMemberDTO member = tiktokMemberService.
saveTiktokMemberByTiktok(commentVideoDTO.getChildTiktokId());
builSendMessage(commentsList, dto, longs, commentVideoDTO, member, Boolean.FALSE, Boolean.TRUE);
saveTiktokMemberByTiktok(commentVideoDTO.getChildTiktokId(),searchVendorId);
buildSendMessage(commentsList, dto, longs, commentVideoDTO, member, Boolean.FALSE, Boolean.TRUE);
}
// 被人评论
if (Boolean.FALSE.equals(commentVideoDTO.getIsCommentOther())) {
TiktokMemberDTO member = tiktokMemberService.
saveTiktokMemberByTiktok(commentVideoDTO.getParentTiktokId());
builSendMessage(commentsList, dto, longs, commentVideoDTO, member, Boolean.TRUE, Boolean.FALSE);
saveTiktokMemberByTiktok(commentVideoDTO.getParentTiktokId(), searchVendorId);
buildSendMessage(commentsList, dto, longs, commentVideoDTO, member, Boolean.TRUE, Boolean.FALSE);
}
}
}
@ -238,7 +243,9 @@ public class TiktokVideoCommentServiceImpl extends
return Boolean.FALSE;
}
private void builSendMessage(List<TiktokVideoComment> commentsList, SaveSopCommentDTO dto, List<Long> longs, SaveSopCommentDTO.TiktokSopCommentVideoDTO commentVideoDTO, TiktokMemberDTO member, Boolean aFalse, Boolean aTrue) {
private void buildSendMessage(List<TiktokVideoComment> commentsList, SaveSopCommentDTO dto,
List<Long> longs, SaveSopCommentDTO.TiktokSopCommentVideoDTO commentVideoDTO,
TiktokMemberDTO member, Boolean aFalse, Boolean aTrue) {
if (ObjectUtil.isNotNull(member) && ObjectUtil.isNotNull(member.getId())) {
if (!longs.contains(commentVideoDTO.getParentCommentId())) {
// 构建父类评论
@ -246,7 +253,7 @@ public class TiktokVideoCommentServiceImpl extends
(aFalse, commentVideoDTO.getDyVendorId(),
dto.getAwemeId(), commentVideoDTO.getParentTiktokId(),
commentVideoDTO.getParentCommentId(), commentVideoDTO.getParentCommentContent(),
Long.parseLong(member.getId()));
Long.parseLong(member.getId()));
commentsList.add(parentComment);
}
if (!longs.contains(commentVideoDTO.getChildCommentId())) {
@ -255,36 +262,39 @@ public class TiktokVideoCommentServiceImpl extends
(aTrue, commentVideoDTO.getDyVendorId(),
dto.getAwemeId(), commentVideoDTO.getChildTiktokId(),
commentVideoDTO.getChildCommentId(), commentVideoDTO.getChildContent(),
Long.parseLong(member.getId()));
Long.parseLong(member.getId()));
commentsList.add(childComment);
sendMessage(dto, commentVideoDTO, member);
sendMessage(dto, commentVideoDTO, member, aTrue);
}
}
}
private void sendMessage(SaveSopCommentDTO dto, SaveSopCommentDTO.TiktokSopCommentVideoDTO commentVideoDTO, TiktokMemberDTO member) {
CommentMessageRecordDTO recordDTO = new CommentMessageRecordDTO();
private void sendMessage(SaveSopCommentDTO dto, SaveSopCommentDTO.TiktokSopCommentVideoDTO commentVideoDTO,
TiktokMemberDTO member, Boolean aTrue) {
MessageRecordDTO recordDTO = new MessageRecordDTO();
// 查询未读数量
recordDTO.setMsgFlag(aTrue);
recordDTO.setTiktokMember(member);
recordDTO.setIsRead(Boolean.TRUE);
recordDTO.setIsStar(member.getIsStar());
recordDTO.setLastMessageTime(DateUtil.date());
recordDTO.setLastUpdateTime(member.getUpdateTime());
member.setVideoId(String.valueOf(dto.getAwemeId()));
recordDTO.setCid(commentVideoDTO.getChildCommentId());
recordDTO.setTiktokVideoComments(Lists.newArrayList());
recordDTO.setMsgType(DefaultNumberConstants.ONE_NUMBER);
recordDTO.setNotReadNum(DefaultNumberConstants.ONE_NUMBER);
recordDTO.setLastComment(commentVideoDTO.getChildContent());
// 发送消息
String string = JSON.toJSONStringWithDateFormat(recordDTO, DateConstant.NORM_DATETIME_PATTERN);
Map<String, Object> map = new Gson().fromJson(string, new TypeToken<HashMap<String, Object>>() {}.getType());
// TODO 设置发送人 发送消息
tiktokSocketServerHandler.sendMessage
(String.valueOf(DefaultNumberConstants.ONE_NUMBER), BeanUtil.beanToMap(recordDTO));
(String.valueOf(DefaultNumberConstants.ONE_NUMBER), map);
}
private TiktokVideoComment buildComment(Boolean flag,
String dyVendorId, Long videoId,
String tiktokId, Long commentId,
String content, Long memberId) {
private TiktokVideoComment buildComment(Boolean flag, String dyVendorId, Long videoId, String tiktokId,
Long commentId, String content, Long memberId) {
Long nextId = IdUtil.getSnowflake
(workerId, datacenterId).nextId();
TiktokVideoComment comment = new TiktokVideoComment();
@ -300,4 +310,33 @@ public class TiktokVideoCommentServiceImpl extends
comment.setIsRead(DefaultNumberConstants.ZERO_NUMBER);
return comment;
}
@Override
public void sendMessage(String message) {
MessageRecordDTO recordDTO = new MessageRecordDTO();
// 查询用户
TiktokMemberDTO user =
tiktokMemberService.queryById(1575406028253728768L);
recordDTO.setCid(7149000389068505886L);
recordDTO.setMsgFlag(Boolean.TRUE);
// 查询未读数量
recordDTO.setTiktokMember(user);
recordDTO.setIsRead(Boolean.TRUE);
recordDTO.setIsStar(user.getIsStar());
recordDTO.setLastMessageTime(DateUtil.date());
recordDTO.setLastUpdateTime(user.getUpdateTime());
user.setVideoId(String.valueOf(7142044321905200391L));
recordDTO.setTiktokVideoComments(Lists.newArrayList());
recordDTO.setMsgType(DefaultNumberConstants.ONE_NUMBER);
recordDTO.setNotReadNum(DefaultNumberConstants.ONE_NUMBER);
recordDTO.setLastComment("小乌龟");
String string = JSON.toJSONStringWithDateFormat(recordDTO, DateConstant.NORM_DATETIME_PATTERN);
Map<String, Object> map = new Gson().fromJson(string, new TypeToken<HashMap<String, Object>>() {}.getType());
// 发送消息
tiktokSocketServerHandler.sendMessage
(String.valueOf(DefaultNumberConstants.ONE_NUMBER), map);
}
}

@ -8,6 +8,7 @@ import cn.hutool.core.util.RandomUtil;
import com.baiye.api.TiktokRequestClient;
import com.baiye.api.request.*;
import com.baiye.api.response.*;
import com.baiye.core.base.api.BaseTiktokResponse;
import com.baiye.core.base.api.Result;
import com.baiye.core.base.api.ResultCode;
import com.baiye.core.constant.DefaultNumberConstants;
@ -109,7 +110,6 @@ public class TiktokVideoServiceImpl implements TiktokVideoService {
if (ObjectUtil.isNotNull(tiktokResponse.getStatus())
&& tiktokResponse.getStatus() == HttpStatus.OK.value()) {
return Lists.newArrayList();
// return Convert.toList(CommentVideoDTO.class, tiktokResponse.getData());
}
return Lists.newArrayList();
}
@ -118,15 +118,15 @@ public class TiktokVideoServiceImpl implements TiktokVideoService {
public Result<Object> optCommentVideo(OptCommentVideoRequestDTO optCommentVideoRequestDTO) {
if (ObjectUtil.isNull(optCommentVideoRequestDTO.getMemberId())) {
// 判断用户是否存在
Long aLong = tiktokMemberService.
saveTiktokMember(optCommentVideoRequestDTO.getTiktokId());
/* Long aLong = tiktokMemberService.
saveTiktokMemberByTiktok(optCommentVideoRequestDTO.getTiktokId());*/
if (ObjectUtil.isNull(aLong) || aLong == DefaultNumberConstants.ZERO_NUMBER) {
TiktokMemberDTO member = tiktokMemberService.
saveTiktokMemberByTiktok(optCommentVideoRequestDTO.getTiktokId(),
optCommentVideoRequestDTO.getBelongTiktokId());
if (ObjectUtil.isNull(member) || StringUtils.isBlank(member.getId())) {
throw new BadRequestException("创建会员账号失败");
}
// 设置会员id
optCommentVideoRequestDTO.setMemberId(aLong);
optCommentVideoRequestDTO.setMemberId(Long.parseLong(member.getId()));
}
if (Boolean.TRUE.equals(optCommentVideoRequestDTO.getIsFirstChat())
@ -139,6 +139,7 @@ public class TiktokVideoServiceImpl implements TiktokVideoService {
// 创建用户聊天信息
TiktokVideoComment comment = new TiktokVideoComment();
BeanUtil.copyProperties(optCommentVideoRequestDTO, comment);
comment.setId(nextId);
comment.setMsgFlag(Boolean.FALSE);
comment.setMsg(optCommentVideoRequestDTO.getContent());
comment.setVideoId(optCommentVideoRequestDTO.getAwemeId());
@ -169,11 +170,11 @@ public class TiktokVideoServiceImpl implements TiktokVideoService {
long nextId = IdUtil.getSnowflake().nextId();
TiktokVideoComment comment = new TiktokVideoComment();
BeanUtil.copyProperties(optCommentVideoRequestDTO, comment);
comment.setId(nextId);
comment.setMsgFlag(Boolean.TRUE);
comment.setCommentId(data.getComment().getCid());
comment.setMsg(optCommentVideoRequestDTO.getContent());
comment.setVideoId(optCommentVideoRequestDTO.getAwemeId());
// 创建用户聊天信息
comment.setIsRead(DefaultNumberConstants.ZERO_NUMBER);
comment.setStatus(DefaultNumberConstants.ONE_NUMBER);
boolean save = tiktokVideoCommentMapper.insert(comment) > DefaultNumberConstants.ZERO_NUMBER;
@ -197,7 +198,7 @@ public class TiktokVideoServiceImpl implements TiktokVideoService {
if (ObjectUtil.isNull(commentVideoRequestDTO.getMemberId())) {
// 判断用户是否存在
TiktokMemberDTO member = tiktokMemberService.
saveTiktokMemberByTiktok(commentVideoRequestDTO.getTiktokId());
saveTiktokMemberByTiktok(commentVideoRequestDTO.getTiktokId(), commentVideoRequestDTO.getBelongTiktokId());
if (ObjectUtil.isNull(member) || StringUtils.isBlank(member.getId())) {
throw new BadRequestException("创建会员账号失败");
}

@ -2,5 +2,61 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.baiye.dao.TiktokPrivateLetterMapper">
<insert id="batchInsert" >
INSERT INTO tb_tiktok_private_letter
(
id,
sender_id,
receiver_id,
member_id,
msg,
status,
msg_type,
is_read,
msg_time,
create_time,
update_time,
msg_flag
)
VALUES
<foreach collection="list" item="letter" separator=",">
(#{letter.id},
#{letter.senderId},
#{letter.receiverId},
#{letter.memberId},
#{letter.msg},
#{letter.status},
#{letter.msgType},
#{letter.isRead},
#{letter.msgTime},
#{letter.createTime},
#{letter.updateTime},
#{letter.msgFlag}
)
</foreach>
</insert>
<select id="queryMemberId" resultType="com.baiye.dto.SelectGroupDTO">
SELECT a.create_time as createTime,
a.member_id as memberId,
a.msg as content,
a.is_read as isRead
FROM tb_tiktok_private_letter AS a,
(SELECT MAX(id) as id,
member_id AS memberId,
min(is_read) AS isRead
FROM `tb_tiktok_private_letter`
WHERE user_id = 1
GROUP BY `memberId`) AS b
WHERE a.id = b.id
ORDER BY b.isRead
</select>
<update id="updateNotReadMessageByMember">
update tb_tiktok_private_letter
SET is_read = #{flag}
WHERE member_id = #{memberId} AND video_id = #{videoId}
ORDER BY id DESC LIMIT #{limitNum}
</update>
</mapper>

@ -0,0 +1,6 @@
<?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.baiye.dao.TiktokPrivateLetterParameterMapper">
</mapper>

@ -8,7 +8,7 @@
<update id="updateNotReadCommentByMember">
update tb_tiktok_video_comment
SET is_read = #{flag}
WHERE member_id = #{memberId} ORDER BY id DESC LIMIT #{limitNum}
WHERE member_id = #{memberId} AND video_id = #{videoId} ORDER BY id DESC LIMIT #{limitNum}
</update>
<select id="queryMemberId" resultType="com.baiye.dto.SelectGroupDTO">

@ -5,7 +5,6 @@ import com.baiye.common.RingBufferWorkerPoolFactory;
import com.baiye.service.MessageConsumerImpl;
import com.baiye.service.SocketServer;
import com.lmax.disruptor.BlockingWaitStrategy;
import com.lmax.disruptor.YieldingWaitStrategy;
import com.lmax.disruptor.dsl.ProducerType;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.ApplicationArguments;

@ -62,4 +62,14 @@ public interface TikTokUserFeignProvider {
@PostMapping("/api/tiktok/delComment")
Result<Object> delComment(@RequestBody CommentDeleteRequestDTO deleteRequestDTO);
/**
*
*
* @param deleteRequestDTO deleteRequestDTO
* @return boolean
*/
@PostMapping("/api/tiktok/sendMessage")
Result<Object> sendMessage(@RequestBody SendMessageRequestDTO deleteRequestDTO);
}

@ -1,7 +1,6 @@
package com.baiye.dto;
import cn.hutool.core.date.DatePattern;
import com.baiye.core.constant.DateConstant;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;

@ -20,7 +20,6 @@
<module>cdp-entrance</module>
<module>cdp-tag-center</module>
<module>cdp-customer</module>
</modules>

Loading…
Cancel
Save