From 0951b60c1e82e5a2542aca79e261bf5a5e2eca72 Mon Sep 17 00:00:00 2001 From: bynt Date: Wed, 12 Oct 2022 19:31:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=A7=81=E4=BF=A1=E8=AF=B7?= =?UTF-8?q?=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/baiye/core/base/api/ResultCode.java | 8 +- .../auth/service/impl/OnlineServiceImpl.java | 9 +- .../TiktokLabelOrganizeController.java | 2 +- .../TiktokPrivateLetterController.java | 50 ++++- .../TiktokVideoCommentController.java | 39 ++-- .../com/baiye/feign/TiktokUserProvider.java | 12 +- .../TiktokNotFriendPrivateLetterJop.java | 134 ++++++++++++ .../TiktokPrivateLetterJop.java | 102 ++++++++- .../src/test/java/TiktokMessageTest.java | 6 +- .../baiye/dao/TiktokPrivateLetterMapper.java | 27 +++ .../TiktokPrivateLetterParameterMapper.java | 13 ++ .../baiye/dao/TiktokVideoCommentMapper.java | 4 +- ...geRecordDTO.java => MessageRecordDTO.java} | 11 +- .../java/com/baiye/dto/SaveSopCommentDTO.java | 2 + .../com/baiye/dto/TiktokPrivateLetterDTO.java | 62 ++++++ .../dto/request/SendMessageRequestDTO.java | 33 +++ .../com/baiye/entity/TiktokPrivateLetter.java | 15 +- .../entity/TiktokPrivateLetterParameter.java | 49 +++++ .../mapstruct/MessageRecordMapStruct.java | 31 +++ ...cordQuery.java => MessageRecordQuery.java} | 3 +- .../request/TiktokPrivateLetterRequest.java | 4 +- .../api/request/TiktokSendMessageRequest.java | 58 +++++ .../TiktokCommentVideoListResponse.java | 4 +- .../response/TiktokPrivateLetterResponse.java | 2 +- .../response/TiktokSendMessageResponse.java | 25 +++ .../handler/TiktokSocketServerHandler.java | 8 + .../baiye/service/TiktokEquipmentService.java | 2 +- .../baiye/service/TiktokMemberService.java | 4 +- .../TiktokPrivateLetterParameterService.java | 31 +++ .../service/TiktokPrivateLetterService.java | 47 ++++- .../service/TiktokUserMessageService.java | 19 ++ .../service/TiktokVideoCommentService.java | 36 ++-- .../impl/TiktokEquipmentServiceImpl.java | 9 +- .../impl/TiktokLabelOrganizeServiceImpl.java | 3 +- .../service/impl/TiktokMemberServiceImpl.java | 59 +++--- ...ktokPrivateLetterParameterServiceImpl.java | 46 ++++ .../impl/TiktokPrivateLetterServiceImpl.java | 199 +++++++++++++----- .../impl/TiktokUserMessageServiceImpl.java | 93 ++++++++ .../impl/TiktokVideoCommentServiceImpl.java | 123 +++++++---- .../service/impl/TiktokVideoServiceImpl.java | 19 +- .../mapper/TiktokPrivateLetterMapper.xml | 56 +++++ .../TiktokPrivateLetterParameterMapper.xml | 6 + .../mapper/TiktokVideoCommentMapper.xml | 2 +- .../com/baiye/app/NettyDisruptorRunner.java | 1 - .../baiye/feign/TikTokUserFeignProvider.java | 10 + .../com/baiye/dto/TransmissionMessageDTO.java | 1 - pom.xml | 1 - 47 files changed, 1268 insertions(+), 212 deletions(-) create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/job/dy_tool_member/TiktokNotFriendPrivateLetterJop.java create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokPrivateLetterParameterMapper.java rename cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/{CommentMessageRecordDTO.java => MessageRecordDTO.java} (85%) create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/TiktokPrivateLetterDTO.java create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/request/SendMessageRequestDTO.java create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/entity/TiktokPrivateLetterParameter.java create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/mapstruct/MessageRecordMapStruct.java rename cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/query/{CommentRecordQuery.java => MessageRecordQuery.java} (90%) create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/request/TiktokSendMessageRequest.java create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/response/TiktokSendMessageResponse.java create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokPrivateLetterParameterService.java create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokUserMessageService.java create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokPrivateLetterParameterServiceImpl.java create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokUserMessageServiceImpl.java create mode 100644 cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokPrivateLetterParameterMapper.xml diff --git a/cdp-common/cdp-common-core/src/main/java/com/baiye/core/base/api/ResultCode.java b/cdp-common/cdp-common-core/src/main/java/com/baiye/core/base/api/ResultCode.java index 491dedf..750625f 100644 --- a/cdp-common/cdp-common-core/src/main/java/com/baiye/core/base/api/ResultCode.java +++ b/cdp-common/cdp-common-core/src/main/java/com/baiye/core/base/api/ResultCode.java @@ -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, "发送私信失败"), + + /** * 发送文本消息失败 */ diff --git a/cdp-iaas/authorization-server/src/main/java/com/baiye/auth/service/impl/OnlineServiceImpl.java b/cdp-iaas/authorization-server/src/main/java/com/baiye/auth/service/impl/OnlineServiceImpl.java index 635f164..8e35268 100644 --- a/cdp-iaas/authorization-server/src/main/java/com/baiye/auth/service/impl/OnlineServiceImpl.java +++ b/cdp-iaas/authorization-server/src/main/java/com/baiye/auth/service/impl/OnlineServiceImpl.java @@ -83,7 +83,8 @@ public class OnlineServiceImpl implements IOnlineUserService { @Override public PageResult getAll(String filter, Pageable pageable) { List 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 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 onlineUsers = getAll(username); for (OnlineUser onlineUser : onlineUsers) { @@ -179,6 +180,4 @@ public class OnlineServiceImpl implements IOnlineUserService { } } } - - } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokLabelOrganizeController.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokLabelOrganizeController.java index 5c220e7..1720fd5 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokLabelOrganizeController.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokLabelOrganizeController.java @@ -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(); } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokPrivateLetterController.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokPrivateLetterController.java index 18c63ae..c7b2766 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokPrivateLetterController.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokPrivateLetterController.java @@ -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 list(Pageable pageable){ - PageResult pageResult = this.tiktokPrivateLetterService.queryAll(pageable); - return Result.data(pageResult); + public Result> list(Pageable pageable) { + List list + = this.tiktokPrivateLetterService.queryAll(pageable); + return Result.data(list); + } + + + @ApiOperation("私信已读") + @GetMapping("/read") + public Result> readMessage(Long tiktokId) { + this.tiktokPrivateLetterService.readMessage(tiktokId); + return Result.success(); + } + + + @ApiOperation("私信未读") + @GetMapping("/notRead") + public Result notReadMessage(Long tiktokId) { + this.tiktokPrivateLetterService.notReadMessage(tiktokId); + return Result.success(); } + @ApiOperation("删除评论") + @GetMapping("/delete") + public Result 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); + } } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokVideoCommentController.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokVideoCommentController.java index 7a9aeec..1c24dac 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokVideoCommentController.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokVideoCommentController.java @@ -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(Pageable pageable){ + public Result> list(Pageable pageable) { Long currentUserId = SecurityUtils.getCurrentUserId(); - List commentPage = + List commentPage = this.tiktokVideoCommentService.commentPage(pageable, currentUserId); return Result.data(commentPage); } - @ApiOperation("评论消息") + @ApiOperation("评论已读") @GetMapping("/read") - public Result> readMessage(Long memberId) { - this.tiktokVideoCommentService.readComment(memberId); + public Result> readMessage(Long tiktokId,Long videoId) { + this.tiktokVideoCommentService.readComment(tiktokId, videoId); return Result.success(); } @ApiOperation("评论未读") @GetMapping("/notRead") - public Result notReadMessage(Long memberId) { - this.tiktokVideoCommentService.notReadComment(memberId); + public Result notReadMessage(Long tiktokId, Long videoId) { + this.tiktokVideoCommentService.notReadComment(tiktokId, videoId); return Result.success(); } @ApiOperation("删除评论") @GetMapping("/delete") - public Result deleteMessage - (@RequestParam("userId") Long memberId) { - this.tiktokVideoCommentService.deleteComment(memberId); + public Result deleteMessage + (@RequestParam("tiktokId") Long tiktokId,@RequestParam("videoId") Long videoId) { + this.tiktokVideoCommentService.deleteComment(tiktokId, videoId); return Result.success(); } @ApiOperation("评论分页") @GetMapping("/commentPage") public Result> 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); + } + + } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/feign/TiktokUserProvider.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/feign/TiktokUserProvider.java index 7ec1331..f2dd97e 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/feign/TiktokUserProvider.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/feign/TiktokUserProvider.java @@ -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 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 delComment(@RequestBody CommentDeleteRequestDTO deleteRequestDTO) { return tiktokVideoService.deleteComment(deleteRequestDTO); } + @ApiOperation("发送私信") + public Result sendMessage(SendMessageRequestDTO messageRequestDTO) { + return tiktokUserMessageService.sendMessage(messageRequestDTO); + } + } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/job/dy_tool_member/TiktokNotFriendPrivateLetterJop.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/job/dy_tool_member/TiktokNotFriendPrivateLetterJop.java new file mode 100644 index 0000000..28f3409 --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/job/dy_tool_member/TiktokNotFriendPrivateLetterJop.java @@ -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 list = Lists.newArrayList(); + List 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); + } + } + } + } + } +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/job/dy_tool_member/TiktokPrivateLetterJop.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/job/dy_tool_member/TiktokPrivateLetterJop.java index f61e035..5128df5 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/job/dy_tool_member/TiktokPrivateLetterJop.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/job/dy_tool_member/TiktokPrivateLetterJop.java @@ -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 list = Lists.newArrayList(); + List 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); + } + } + } + } } } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/test/java/TiktokMessageTest.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/test/java/TiktokMessageTest.java index 94c8e8a..d68e3ee 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/test/java/TiktokMessageTest.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/test/java/TiktokMessageTest.java @@ -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", ""); } } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokPrivateLetterMapper.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokPrivateLetterMapper.java index a7176cc..9b8570c 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokPrivateLetterMapper.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokPrivateLetterMapper.java @@ -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 { + /** + * 批量插入私信 + * @param list + */ + void batchInsert(List list); + + + /** + * 分页查找未读数量 + * @param page + * @return + */ + IPage queryMemberId(Page page); + + /** + * 修改已读状态 + * @param flag + * @param limitNum + * @param tiktokId + */ + void updateNotReadMessageByMember(int flag, int limitNum, Long tiktokId); } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokPrivateLetterParameterMapper.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokPrivateLetterParameterMapper.java new file mode 100644 index 0000000..585fe26 --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokPrivateLetterParameterMapper.java @@ -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 { + + +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokVideoCommentMapper.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokVideoCommentMapper.java index a1923fc..d38bd70 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokVideoCommentMapper.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dao/TiktokVideoCommentMapper.java @@ -31,11 +31,13 @@ public interface TiktokVideoCommentMapper extends BaseMapper /** * 修改未读状态 + * * @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); /** * 视频与会员查找最后一条消息记录 diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/CommentMessageRecordDTO.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/MessageRecordDTO.java similarity index 85% rename from cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/CommentMessageRecordDTO.java rename to cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/MessageRecordDTO.java index f8c6781..617b0e0 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/CommentMessageRecordDTO.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/MessageRecordDTO.java @@ -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; diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/SaveSopCommentDTO.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/SaveSopCommentDTO.java index 60b6d51..1a1cc45 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/SaveSopCommentDTO.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/SaveSopCommentDTO.java @@ -17,6 +17,8 @@ public class SaveSopCommentDTO { @ApiModelProperty(value = "视频ID") private Long awemeId; + @ApiModelProperty(value = "小组id") + private Long organizeId; private List dtoList; diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/TiktokPrivateLetterDTO.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/TiktokPrivateLetterDTO.java new file mode 100644 index 0000000..485d417 --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/TiktokPrivateLetterDTO.java @@ -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; + + +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/request/SendMessageRequestDTO.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/request/SendMessageRequestDTO.java new file mode 100644 index 0000000..faf8137 --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/dto/request/SendMessageRequestDTO.java @@ -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; + + +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/entity/TiktokPrivateLetter.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/entity/TiktokPrivateLetter.java index 991736f..4f6f180 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/entity/TiktokPrivateLetter.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/entity/TiktokPrivateLetter.java @@ -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接收") diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/entity/TiktokPrivateLetterParameter.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/entity/TiktokPrivateLetterParameter.java new file mode 100644 index 0000000..d810dd3 --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/entity/TiktokPrivateLetterParameter.java @@ -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; + + + + +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/mapstruct/MessageRecordMapStruct.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/mapstruct/MessageRecordMapStruct.java new file mode 100644 index 0000000..e372112 --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/mapstruct/MessageRecordMapStruct.java @@ -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 { + +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/query/CommentRecordQuery.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/query/MessageRecordQuery.java similarity index 90% rename from cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/query/CommentRecordQuery.java rename to cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/query/MessageRecordQuery.java index 60e8025..1dac054 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/query/CommentRecordQuery.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-core/src/main/java/com/baiye/query/MessageRecordQuery.java @@ -12,11 +12,12 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class CommentRecordQuery { +public class MessageRecordQuery { @Query private String tiktokId; @Query private Long videoId; + } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/request/TiktokPrivateLetterRequest.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/request/TiktokPrivateLetterRequest.java index cb823e4..e6fad60 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/request/TiktokPrivateLetterRequest.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/request/TiktokPrivateLetterRequest.java @@ -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; diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/request/TiktokSendMessageRequest.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/request/TiktokSendMessageRequest.java new file mode 100644 index 0000000..45e5cd0 --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/request/TiktokSendMessageRequest.java @@ -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 getResponseClass() { + return TiktokSendMessageResponse.class; + } + + +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/response/TiktokCommentVideoListResponse.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/response/TiktokCommentVideoListResponse.java index 00d250c..eb068d9 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/response/TiktokCommentVideoListResponse.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/response/TiktokCommentVideoListResponse.java @@ -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 implements Serializable { + BaseTiktokResponse implements Serializable { diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/response/TiktokPrivateLetterResponse.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/response/TiktokPrivateLetterResponse.java index bb0d61b..2dbe6b0 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/response/TiktokPrivateLetterResponse.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/api/response/TiktokPrivateLetterResponse.java @@ -58,7 +58,7 @@ public class TiktokPrivateLetterResponse extends BaseTiktokResponse implements Serializable { + + + + private static final long serialVersionUID = 7515504688664430338L; + + +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/handler/TiktokSocketServerHandler.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/handler/TiktokSocketServerHandler.java index 56d6ce5..e84bf6c 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/handler/TiktokSocketServerHandler.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/handler/TiktokSocketServerHandler.java @@ -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 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 List findByOrganizeId(Long organizeId, int num); + TiktokEquipmentEntity findByDyVendorId(String vendorId); } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokMemberService.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokMemberService.java index 89a505d..b21533c 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokMemberService.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokMemberService.java @@ -20,10 +20,12 @@ public interface TiktokMemberService extends IService { /** * 抖音id保存会员 + * * @param tiktokId + * @param belongTiktokId * @return */ - TiktokMemberDTO saveTiktokMemberByTiktok(String tiktokId); + TiktokMemberDTO saveTiktokMemberByTiktok(String tiktokId, String belongTiktokId); /** * id 查会员 diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokPrivateLetterParameterService.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokPrivateLetterParameterService.java new file mode 100644 index 0000000..9ed052c --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokPrivateLetterParameterService.java @@ -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 { + + + /** + * 查询请求时间 + * @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); +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokPrivateLetterService.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokPrivateLetterService.java index ee2d5fd..9d32ecd 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokPrivateLetterService.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokPrivateLetterService.java @@ -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 queryAll(Pageable pageable); + + /** + * 批量插入私信 + * @param list + */ + void batchInsertPrivateLetter(List 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); } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokUserMessageService.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokUserMessageService.java new file mode 100644 index 0000000..58e1770 --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokUserMessageService.java @@ -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 sendMessage(SendMessageRequestDTO messageRequestDTO); +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokVideoCommentService.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokVideoCommentService.java index 5606b27..f595035 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokVideoCommentService.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokVideoCommentService.java @@ -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 * @param currentUserId * @return */ - List commentPage(Pageable pageable, Long currentUserId); + List 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 queryMessageByUserId(CommentRecordQuery commentRecordQuery, Pageable pageable); + Map 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 Result getEquipmentByOrganizeId(Long organizeId); /** - * + * 视频查找评论id * @param videoId * @return */ @@ -93,4 +99,10 @@ public interface TiktokVideoCommentService extends IService */ Boolean saveComment(List dtoList); + /** + * 发送消息 + * @param message + */ + void sendMessage(String message); + } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokEquipmentServiceImpl.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokEquipmentServiceImpl.java index c291276..31115ff 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokEquipmentServiceImpl.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokEquipmentServiceImpl.java @@ -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 implements TiktokEquipmentService { +public class TiktokEquipmentServiceImpl + extends ServiceImpl implements TiktokEquipmentService { private final TiktokUserService tiktokUserService; @@ -160,6 +160,11 @@ public class TiktokEquipmentServiceImpl extends ServiceImpl().eq + (TiktokEquipmentEntity::getDyVendorId, vendorId)); + } } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokLabelOrganizeServiceImpl.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokLabelOrganizeServiceImpl.java index 4f4d830..9688672 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokLabelOrganizeServiceImpl.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokLabelOrganizeServiceImpl.java @@ -28,7 +28,8 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -public class TiktokLabelOrganizeServiceImpl extends ServiceImpl implements TiktokLabelOrganizeService { +public class TiktokLabelOrganizeServiceImpl + extends ServiceImpl implements TiktokLabelOrganizeService { private final TiktokLabelService labelService; diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokMemberServiceImpl.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokMemberServiceImpl.java index add56fe..4aff1a1 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokMemberServiceImpl.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokMemberServiceImpl.java @@ -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() .eq(TiktokMember::getTiktokId, tiktokId)); if (ObjectUtil.isNotNull(member)) { - return tiktokMemberStruct.toDto(member); + return tiktokMemberStruct.toDto(member); } TiktokSearchMemberRequest request = new TiktokSearchMemberRequest(); - List 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)); } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokPrivateLetterParameterServiceImpl.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokPrivateLetterParameterServiceImpl.java new file mode 100644 index 0000000..af404d0 --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokPrivateLetterParameterServiceImpl.java @@ -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 implements TiktokPrivateLetterParameterService { + + + @Override + public TiktokPrivateLetterParameter selectByVendorId(String dyVendorId, Integer num) { + return this.baseMapper.selectOne(new LambdaQueryWrapper().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().eq + (TiktokPrivateLetterParameter::getId, byVendorId.getId()). + set(TiktokPrivateLetterParameter::getMaxTime, maxTime)); + } +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokPrivateLetterServiceImpl.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokPrivateLetterServiceImpl.java index 82a9549..9f1ca4c 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokPrivateLetterServiceImpl.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokPrivateLetterServiceImpl.java @@ -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 implements TiktokPrivateLetterService { +@RequiredArgsConstructor +public class TiktokPrivateLetterServiceImpl extends + ServiceImpl 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 messageRecord = Lists.newArrayList(); - /* ResponseMessageRecordDTO recordDTO; - - // 查询所有用户 - List userIdList = personalWeChatUserService. - selectUserIdListByCurrentUserId(currentUserId); - - if (CollUtil.isNotEmpty(userIdList)) { - for (Long userId : userIdList) { - recordDTO = new ResponseMessageRecordDTO(); - // 查询前十条数据 - List list = this.list - (new LambdaQueryWrapper() - .eq(MessageRecord::getUserId, userId).orderByDesc - (MessageRecord::getCreateTime) - .last("limit 10")); - - if (CollUtil.isNotEmpty(list)) { - // 查询未读数量 - int count = this.count - (new LambdaQueryWrapper() - .eq(MessageRecord::getUserId, userId) - .eq(MessageRecord::getIsRead, Boolean.FALSE)); - // 查询用户 - PersonalWeChatUserDTO user = - personalWeChatUserService.queryByUserId(userId); - user.setEnterpriseId(AesEncrypt.encrypt - (user.getEnterpriseId(),EncryptionConstants.ENCRYPTION_KEY)); - List 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 queryAll(Pageable pageable) { + + List messageRecord = Lists.newArrayList(); + MessageRecordDTO recordDTO; + + Page page = new Page<> + (pageable.getPageNumber(), pageable.getPageSize()); + + IPage queryMemberId = + tiktokPrivateLetterMapper.queryMemberId(page); + + if (CollUtil.isNotEmpty(queryMemberId.getRecords())) { + for (SelectGroupDTO dto : queryMemberId.getRecords()) { + recordDTO = new MessageRecordDTO(); + + // 查询未读数量 + int count = this.count + (new LambdaQueryWrapper(). + 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 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 map = new Gson().fromJson(string, new TypeToken>() {}.getType()); + // 发送消息 + tiktokSocketServerHandler.sendMessage(String.valueOf(DefaultNumberConstants.ONE_NUMBER), map); + } + + @Override + public void readMessage(Long tiktokId) { + this.update(new LambdaUpdateWrapper(). + 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 remove = + new LambdaQueryWrapper().eq + (TiktokPrivateLetter::getTiktokId, tiktokId); + this.remove(remove); + } + + @Override + public PageResult queryMessageByUserId(MessageRecordQuery messageRecordQuery, Pageable pageable) { + Page page = PageUtils.startPageAndSort(pageable); + Wrapper queryWrapper = + new LambdaQueryWrapper().eq + (TiktokPrivateLetter::getTiktokId, + messageRecordQuery.getTiktokId()); + Page selectPage = this.page(page, queryWrapper); + Collections.reverse(selectPage.getRecords()); + return PageResult.success + (selectPage.getTotal(), selectPage.getPages(), + this.messageRecordMapStruct.toDto(selectPage.getRecords())); } } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokUserMessageServiceImpl.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokUserMessageServiceImpl.java new file mode 100644 index 0000000..4402131 --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokUserMessageServiceImpl.java @@ -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 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()); + } +} diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokVideoCommentServiceImpl.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokVideoCommentServiceImpl.java index 21391a2..12088aa 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokVideoCommentServiceImpl.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokVideoCommentServiceImpl.java @@ -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 commentPage(Pageable pageable, Long currentUserId) { + public List commentPage(Pageable pageable, Long currentUserId) { - List messageRecord = Lists.newArrayList(); - CommentMessageRecordDTO recordDTO; + List messageRecord = Lists.newArrayList(); + MessageRecordDTO recordDTO; - Page page = new Page<>(pageable.getPageNumber(), pageable.getPageSize()); + Page page = new Page<>(pageable.getPageNumber(), pageable.getPageSize()); IPage 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(). - 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 remove = - new LambdaQueryWrapper().eq(TiktokVideoComment::getMemberId, memberId); + new LambdaQueryWrapper().eq + (TiktokVideoComment::getTiktokId, tiktokId).eq + (TiktokVideoComment::getVideoId, videoId); this.remove(remove); } @Override - public Map queryMessageByUserId(CommentRecordQuery commentRecordQuery, Pageable pageable) { + public Map queryMessageByUserId(MessageRecordQuery messageRecordQuery, Pageable pageable) { Map map = Maps.newHashMap(); Page page = PageUtils.startPageAndSort(pageable); Wrapper queryWrapper = new LambdaQueryWrapper().eq (TiktokVideoComment::getTiktokId, - commentRecordQuery.getTiktokId()). - eq(TiktokVideoComment::getVideoId, commentRecordQuery.getVideoId()); + messageRecordQuery.getTiktokId()). + eq(TiktokVideoComment::getVideoId, messageRecordQuery.getVideoId()); Page 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 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 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 commentsList, SaveSopCommentDTO dto, List longs, SaveSopCommentDTO.TiktokSopCommentVideoDTO commentVideoDTO, TiktokMemberDTO member, Boolean aFalse, Boolean aTrue) { + private void buildSendMessage(List commentsList, SaveSopCommentDTO dto, + List 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 map = new Gson().fromJson(string, new TypeToken>() {}.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 map = new Gson().fromJson(string, new TypeToken>() {}.getType()); + // 发送消息 + tiktokSocketServerHandler.sendMessage + (String.valueOf(DefaultNumberConstants.ONE_NUMBER), map); + + } } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokVideoServiceImpl.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokVideoServiceImpl.java index 2840d92..a70768f 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokVideoServiceImpl.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/impl/TiktokVideoServiceImpl.java @@ -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 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("创建会员账号失败"); } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokPrivateLetterMapper.xml b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokPrivateLetterMapper.xml index f70c108..3ba4c97 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokPrivateLetterMapper.xml +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokPrivateLetterMapper.xml @@ -2,5 +2,61 @@ + + 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 + + (#{letter.id}, + #{letter.senderId}, + #{letter.receiverId}, + #{letter.memberId}, + #{letter.msg}, + #{letter.status}, + #{letter.msgType}, + #{letter.isRead}, + #{letter.msgTime}, + #{letter.createTime}, + #{letter.updateTime}, + #{letter.msgFlag} + ) + + + + + + + update tb_tiktok_private_letter + SET is_read = #{flag} + WHERE member_id = #{memberId} AND video_id = #{videoId} + ORDER BY id DESC LIMIT #{limitNum} + diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokPrivateLetterParameterMapper.xml b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokPrivateLetterParameterMapper.xml new file mode 100644 index 0000000..1bd5e4e --- /dev/null +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokPrivateLetterParameterMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokVideoCommentMapper.xml b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokVideoCommentMapper.xml index 572b4fd..3351a02 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokVideoCommentMapper.xml +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/TiktokVideoCommentMapper.xml @@ -8,7 +8,7 @@ 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}