diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/SysAdviceController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/SysAdviceController.java new file mode 100644 index 0000000..167cd18 --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/resource/SysAdviceController.java @@ -0,0 +1,105 @@ +package com.mcwl.web.controller.resource; + +import com.mcwl.common.core.domain.R; +import com.mcwl.resource.domain.vo.AdviceVo; +import com.mcwl.resource.domain.vo.AttentionAdviceVo; +import com.mcwl.resource.domain.vo.CommentAdviceVo; +import com.mcwl.resource.domain.vo.LikeAdviceVo; +import com.mcwl.resource.service.ISysAdviceService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 消息通知 + */ +@RestController +@RequestMapping("advice") +@RequiredArgsConstructor +@Api(tags = "消息通知") +public class SysAdviceController { + + private final ISysAdviceService sysAdviceService; + + + /** + * 已读 + */ + @GetMapping("read") + @ApiOperation(value = "已读") + public R read(@Valid + @NotNull(message = "消息id不能为空") + @ApiParam(value = "消息id", required = true) + Long adviceId) { + sysAdviceService.read(adviceId); + return R.ok(); + } + + /** + * 一键已读 + */ + @GetMapping("readAll") + @ApiOperation(value = "一键已读") + public R readAll() { + sysAdviceService.readAll(); + return R.ok(); + } + + + /** + * 获取所有通知 + */ + @GetMapping("getAllMsg") + @ApiOperation(value = "获取所有通知") + public R> getAllMsg() { + List adviceVo = sysAdviceService.getAllMsg(); + return R.ok(adviceVo); + } + + + /** + * 获取评论通知 + */ + @GetMapping("getCommentMsg") + @ApiOperation(value = "获取评论通知") + public R> getCommentMsg(@Valid + @NotNull(message = "类型不能为空") + @ApiParam(value = "类型 0模型 1工作流 2图片 3全部", required = true) + Integer productType) { + List adviceVo = sysAdviceService.getCommentMsg(productType); + return R.ok(adviceVo); + } + + /** + * 获取点赞通知 + */ + @GetMapping("getLikeMsg") + @ApiOperation(value = "获取点赞通知") + public R> getLikeMsg(@Valid + @NotNull(message = "类型不能为空") + @ApiParam(value = "类型 0模型 1工作流 2图片 3评论 4全部", required = true) + Integer productType) { + List likeAdviceVoList = sysAdviceService.getLikeMsg(productType); + return R.ok(likeAdviceVoList); + } + + + /** + * 获取关注通知 + */ + @GetMapping("getAttentionMsg") + @ApiOperation(value = "获取关注通知") + public R> getAttentionMsg() { + List attentionAdviceVoList = sysAdviceService.getAttentionMsg(); + return R.ok(attentionAdviceVoList); + } + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysAdviceController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysAdviceController.java deleted file mode 100644 index 31dde5b..0000000 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysAdviceController.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.mcwl.web.controller.system; - -import com.mcwl.common.core.domain.AjaxResult; -import com.mcwl.system.domain.vo.AdviceVo; -import com.mcwl.system.service.ISysAdviceService; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -@RestController -@RequestMapping("system/advice") -@RequiredArgsConstructor -public class SysAdviceController { - - private final ISysAdviceService sysAdviceService; - - /** - * 根据当前用户获取新消息提醒 - */ - @GetMapping("getUserNewMsg") - public AjaxResult getUserNewMsg() { - List adviceVo = sysAdviceService.getUserNewMsg(); - return AjaxResult.success(adviceVo); - } - - /** - * 根据当前用户获取系统公告 - */ - @GetMapping("getUserSystemNotice") - public AjaxResult getUserSystemNotice() { - List adviceVo = sysAdviceService.getUserSystemNotice(); - return AjaxResult.success(adviceVo); - } - - /** - * 根据当前用户获取所有消息 - */ - @GetMapping("getUserAllMsg") - public AjaxResult getUserAllMsg() { - List adviceVo = sysAdviceService.getUserAllMsg(); - return AjaxResult.success(adviceVo); - } - - /** - * 获取所有消息 - */ - @GetMapping("getAllMsg") - public AjaxResult getAllMsg() { - List adviceVo = sysAdviceService.getAllMsg(); - return AjaxResult.success(adviceVo); - } - - -} diff --git a/mcwl-memberCenter/pom.xml b/mcwl-memberCenter/pom.xml index edfee9b..f774532 100644 --- a/mcwl-memberCenter/pom.xml +++ b/mcwl-memberCenter/pom.xml @@ -45,6 +45,12 @@ spring-boot-starter-amqp 3.1.2 + + com.mcwl + mcwl-resource + 3.8.8 + compile + \ No newline at end of file diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java index 0557381..b298cc0 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java @@ -2,12 +2,10 @@ package com.mcwl.memberCenter.consumer; import com.mcwl.common.constant.QueueConstants; import com.mcwl.common.core.domain.entity.SysUser; -import com.mcwl.common.utils.SecurityUtils; import com.mcwl.memberCenter.domain.Member; -import com.mcwl.memberCenter.service.MemberService; -import com.mcwl.system.domain.SysAdvice; +import com.mcwl.resource.domain.SysAdvice; +import com.mcwl.resource.service.ISysAdviceService; import com.mcwl.system.domain.enums.AdviceEnum; -import com.mcwl.system.service.ISysAdviceService; import com.mcwl.system.service.ISysUserService; import com.rabbitmq.client.Channel; import org.springframework.amqp.core.Message; diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java index e39bd00..d9ecb64 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java @@ -3,9 +3,9 @@ package com.mcwl.memberCenter.consumer; import com.mcwl.common.constant.QueueConstants; import com.mcwl.common.core.domain.entity.SysUser; import com.mcwl.memberCenter.domain.Member; -import com.mcwl.system.domain.SysAdvice; +import com.mcwl.resource.domain.SysAdvice; import com.mcwl.system.domain.enums.AdviceEnum; -import com.mcwl.system.service.ISysAdviceService; +import com.mcwl.resource.service.ISysAdviceService; import com.mcwl.system.service.ISysUserService; import com.rabbitmq.client.Channel; import lombok.RequiredArgsConstructor; diff --git a/mcwl-resource/pom.xml b/mcwl-resource/pom.xml index 58efc12..ad7488d 100644 --- a/mcwl-resource/pom.xml +++ b/mcwl-resource/pom.xml @@ -32,5 +32,12 @@ mcwl-system + + + org.springframework.boot + spring-boot-starter-amqp + 3.1.2 + + diff --git a/mcwl-system/src/main/java/com/mcwl/system/domain/SysAdvice.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/SysAdvice.java similarity index 72% rename from mcwl-system/src/main/java/com/mcwl/system/domain/SysAdvice.java rename to mcwl-resource/src/main/java/com/mcwl/resource/domain/SysAdvice.java index 137eb59..c68efcb 100644 --- a/mcwl-system/src/main/java/com/mcwl/system/domain/SysAdvice.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/SysAdvice.java @@ -1,4 +1,4 @@ -package com.mcwl.system.domain; +package com.mcwl.resource.domain; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -28,11 +28,6 @@ public class SysAdvice extends BaseEntity { */ private Long receiverId; - /** - * 消息类型 表示新消息提醒,系统公告等 - */ - private AdviceEnum type; - /** * 标题 */ @@ -44,9 +39,29 @@ public class SysAdvice extends BaseEntity { private String content; /** - * 是否已读 0 是 1 否 + * 商品id */ - private String isRead; + private Long productId; + + /** + * 商品类型 0模型 1工作流 2图片 + */ + private Integer productType; + + /** + * 评论id + */ + private Long commentId; + + /** + * 是否已读 0否 1是 + */ + private Integer isRead; + + /** + * 消息类型 表示新消息提醒,系统公告等 + */ + private AdviceEnum type; diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelCommentRes.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelCommentRes.java index b3c1dac..e61cf8f 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelCommentRes.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/dto/ModelCommentRes.java @@ -33,7 +33,7 @@ public class ModelCommentRes { /** * 回复人 */ - @ApiModelProperty(value = "回复人") + @ApiModelProperty(value = "回复人", required = true) private Long replyUserId; } diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/AdviceVo.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/AdviceVo.java new file mode 100644 index 0000000..70a802f --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/AdviceVo.java @@ -0,0 +1,46 @@ +package com.mcwl.resource.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mcwl.system.domain.enums.AdviceEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +@ApiModel(description = "消息通知") +public class AdviceVo { + + /** + * id + */ + @ApiModelProperty(value = "id") + private Long id; + + /** + * 标题 + */ + @ApiModelProperty(value = "标题") + private String title; + + /** + * 内容 + */ + @ApiModelProperty(value = "内容") + private String content; + + /** + * 是否已读 0否 1是 + */ + @ApiModelProperty(value = "是否已读 0否 1是") + private String isRead; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private Date createTime; + +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/AttentionAdviceVo.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/AttentionAdviceVo.java new file mode 100644 index 0000000..6423c0b --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/AttentionAdviceVo.java @@ -0,0 +1,45 @@ +package com.mcwl.resource.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +@ApiModel(description = "关注消息") +public class AttentionAdviceVo { + + /** + * 通知id + */ + @ApiModelProperty(value = "通知id") + private Long id; + + /** + * 关注我的用户头像 + */ + @ApiModelProperty(value = "关注我的用户头像") + private String userAvatar; + + /** + * 内容 + */ + @ApiModelProperty(value = "内容") + private String content; + + /** + * 是否已读 0否 1是 + */ + @ApiModelProperty(value = "是否已读 0否 1是") + private Integer isRead; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private Date createTime; + +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/CommentAdviceVo.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/CommentAdviceVo.java new file mode 100644 index 0000000..4ef91c0 --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/CommentAdviceVo.java @@ -0,0 +1,64 @@ +package com.mcwl.resource.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +@ApiModel(description = "评论/点赞消息") +public class CommentAdviceVo { + + /** + * 通知id + */ + @ApiModelProperty(value = "通知id") + private Long id; + + /** + * 评论/点赞用户头像 + */ + @ApiModelProperty(value = "评论/点赞用户头像") + private String userAvatar; + + /** + * 内容 + */ + @ApiModelProperty(value = "内容") + private String content; + + + /** + * 评论/点赞的商品id + */ + @ApiModelProperty(value = "评论/点赞的商品id") + private Long productId; + + /** + * 评论/点赞的商品图片 + */ + @ApiModelProperty(value = "商品图片") + private String productImag; + + /** + * 评论/点赞的商品类型 0模型 1工作流 2图片 + */ + @ApiModelProperty(value = "评论/点赞的商品类型 0模型 1工作流 2图片") + private Integer productType; + + /** + * 是否已读 0否 1是 + */ + @ApiModelProperty(value = "是否已读 0否 1是") + private Integer isRead; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private Date createTime; + +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/LikeAdviceVo.java b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/LikeAdviceVo.java new file mode 100644 index 0000000..24f97fb --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/domain/vo/LikeAdviceVo.java @@ -0,0 +1,19 @@ +package com.mcwl.resource.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(description = "评论/点赞消息") +public class LikeAdviceVo extends CommentAdviceVo { + + /** + * 评论id + */ + @ApiModelProperty(value = "评论id") + private Long commentId; + +} diff --git a/mcwl-system/src/main/java/com/mcwl/system/mapper/SysAdviceMapper.java b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/SysAdviceMapper.java similarity index 59% rename from mcwl-system/src/main/java/com/mcwl/system/mapper/SysAdviceMapper.java rename to mcwl-resource/src/main/java/com/mcwl/resource/mapper/SysAdviceMapper.java index 85f400a..ec8a52b 100644 --- a/mcwl-system/src/main/java/com/mcwl/system/mapper/SysAdviceMapper.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/mapper/SysAdviceMapper.java @@ -1,12 +1,9 @@ -package com.mcwl.system.mapper; +package com.mcwl.resource.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.mcwl.system.domain.SysAdvice; -import com.mcwl.system.domain.SysConfig; +import com.mcwl.resource.domain.SysAdvice; import org.apache.ibatis.annotations.Mapper; -import java.util.List; - /** * 消息通知 */ diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/ISysAdviceService.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/ISysAdviceService.java new file mode 100644 index 0000000..7dc2f1f --- /dev/null +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/ISysAdviceService.java @@ -0,0 +1,35 @@ +package com.mcwl.resource.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mcwl.resource.domain.SysAdvice; +import com.mcwl.resource.domain.vo.AdviceVo; +import com.mcwl.resource.domain.vo.AttentionAdviceVo; +import com.mcwl.resource.domain.vo.CommentAdviceVo; +import com.mcwl.resource.domain.vo.LikeAdviceVo; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 消息通知 服务层 + * + * @author mcwl + */ +public interface ISysAdviceService extends IService { + + List getAllMsg(); + + List getCommentMsg(Integer productType); + + List getLikeMsg(Integer productType); + + List getAttentionMsg(); + + void read(Long adviceId); + + /** + * 一键已读 + */ + void readAll(); +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelCommentLikeServiceImpl.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelCommentLikeServiceImpl.java index 7a2386b..6b759e0 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelCommentLikeServiceImpl.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelCommentLikeServiceImpl.java @@ -1,33 +1,28 @@ package com.mcwl.resource.service.impl; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mcwl.common.exception.ServiceException; import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.common.utils.StringUtils; import com.mcwl.resource.domain.ModelComment; import com.mcwl.resource.domain.ModelCommentLike; -import com.mcwl.resource.domain.ModelImageComment; -import com.mcwl.resource.domain.ModelImageCommentLike; +import com.mcwl.resource.domain.SysAdvice; import com.mcwl.resource.mapper.ModelCommentLikeMapper; import com.mcwl.resource.mapper.ModelCommentMapper; -import com.mcwl.resource.mapper.ModelImageCommentMapper; import com.mcwl.resource.service.ModelCommentLikeService; +import com.mcwl.system.domain.enums.AdviceEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Collection; import java.util.Date; -import java.util.Map; import java.util.Objects; -import java.util.function.Function; /** * 模型评论点赞 */ @Service -public class ModelCommentLikeServiceImpl extends ServiceImpl implements ModelCommentLikeService { +public class ModelCommentLikeServiceImpl extends ServiceImpl implements ModelCommentLikeService { @Autowired private ModelCommentMapper modelCommentMapper; @@ -50,6 +45,7 @@ public class ModelCommentLikeServiceImpl extends ServiceImpl responseModelImageList = modelImageMapper.imageList(pageVo); + + List modelImageLikeIds = new ArrayList<>(); + + List modelImageLikes = baseMapper.selectList(new LambdaQueryWrapper() + .eq(ModelImageLike::getUserId, SecurityUtils.getUserId())); + for (ModelImageLike modelImageLike : modelImageLikes) { + modelImageLikeIds.add(modelImageLike.getModelImageId()); + } + + for (ResponseModelImage responseModelImage : responseModelImageList) { String[] split = responseModelImage.getImagePaths().split(","); responseModelImage.setPath(split[0]); - //查询模型是否点赞 - ModelImageLike likeImage = baseMapper.getLikeImage(SecurityUtils.getUserId(), responseModelImage.getId()); - if (likeImage == null){ + //查询是否点赞 + if (!modelImageLikeIds.contains(responseModelImage.getId())){ responseModelImage.setIsLike(0); }else { responseModelImage.setIsLike(1); @@ -180,4 +195,31 @@ public class ModelImageLikeServiceImpl extends ServiceImpl initPage(PageDomain pageDomain) { Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize()); if (StringUtils.isBlank(pageDomain.getOrderByColumn())) { @@ -136,4 +168,6 @@ public class ModelLikeServiceImpl extends ServiceImpl implements ISysAdviceService { + + private final ISysUserService sysUserService; + + private final ModelService modelService; + + private final WorkFlowService workFlowService; + + private final ModelImageService modelImageService; + + private final Map modelProductMap = new ConcurrentHashMap<>(); + private final Map workFlowMap = new ConcurrentHashMap<>(); + private final Map modelImageMap = new ConcurrentHashMap<>(); + + @Override + public List getAllMsg() { + + // 创建分页对象 + Page page = new Page<>(1, 20); + + LambdaQueryWrapper lqw = new LambdaQueryWrapper() + .and(wrapper -> wrapper + .eq(SysAdvice::getReceiverId, SecurityUtils.getUserId()) + .or() + .isNull(SysAdvice::getReceiverId) + ) + .orderByDesc(SysAdvice::getCreateTime); + + Page sysAdvicePage = baseMapper.selectPage(page, lqw); + + + List sysAdvices = sysAdvicePage.getRecords(); + + return BeanUtil.copyToList(sysAdvices, AdviceVo.class); + } + + @Override + public List getCommentMsg(Integer productType) { + + this.postConstruct(); + + List sysAdviceList = baseMapper.selectList(new LambdaQueryWrapper() + .eq(SysAdvice::getType, AdviceEnum.COMMENT_REMIND) + .eq(SysAdvice::getReceiverId, SecurityUtils.getUserId()) + .eq(productType != 3, SysAdvice::getProductType, productType) + .orderByDesc(SysAdvice::getCreateTime)); + + + List commentUserIdList = new ArrayList<>(); + for (SysAdvice sysAdvice : sysAdviceList) { + commentUserIdList.add(sysAdvice.getSenderId()); + } + List sysUsers = sysUserService.listByIds(commentUserIdList); + + Map commentUserMap = new HashMap<>(); + for (SysUser sysUser : sysUsers) { + commentUserMap.put(sysUser.getUserId(), sysUser); + } + + List commentAdviceVoList = new ArrayList<>(); + for (SysAdvice sysAdvice : sysAdviceList) { + CommentAdviceVo commentAdviceVo = BeanUtil.copyProperties(sysAdvice, CommentAdviceVo.class); + + Long senderId = sysAdvice.getSenderId(); + SysUser senderUser = commentUserMap.get(senderId); + if (Objects.nonNull(senderUser)) { + commentAdviceVo.setUserAvatar(senderUser.getAvatar()); + } + if (productType == 0) { + ModelProduct modelProduct = modelProductMap.get(sysAdvice.getProductId()); + if (Objects.nonNull(modelProduct)) { + commentAdviceVo.setProductImag(modelProduct.getSurfaceUrl()); + } + } else if (productType == 1) { + WorkFlow workFlow = workFlowMap.get(sysAdvice.getProductId()); + if (Objects.nonNull(workFlow)) { + commentAdviceVo.setProductImag(workFlow.getCoverPath()); + } + } else if (productType == 2) { + ModelImage modelImage = modelImageMap.get(sysAdvice.getProductId()); + if (Objects.nonNull(modelImage)) { + commentAdviceVo.setProductImag(modelImage.getImagePaths().split(",")[0]); + } + } + + commentAdviceVoList.add(commentAdviceVo); + } + + return commentAdviceVoList; + } + + @Override + public List getLikeMsg(Integer productType) { + this.postConstruct(); + List sysAdviceList; + if (productType == 3) { + sysAdviceList = baseMapper.selectList(new LambdaQueryWrapper() + .eq(SysAdvice::getType, AdviceEnum.LIKE_REMIND) + .eq(SysAdvice::getReceiverId, SecurityUtils.getUserId()) + .isNotNull(SysAdvice::getCommentId) + .orderByDesc(SysAdvice::getCreateTime)); + } else { + sysAdviceList = baseMapper.selectList(new LambdaQueryWrapper() + .eq(SysAdvice::getType, AdviceEnum.LIKE_REMIND) + .eq(SysAdvice::getReceiverId, SecurityUtils.getUserId()) + .eq(productType != 4, SysAdvice::getProductType, productType) + .orderByDesc(SysAdvice::getCreateTime)); + } + + List likeUserIdList = new ArrayList<>(); + for (SysAdvice sysAdvice : sysAdviceList) { + likeUserIdList.add(sysAdvice.getSenderId()); + } + List sysUsers = sysUserService.listByIds(likeUserIdList); + + Map likeUserMap = new HashMap<>(); + for (SysUser sysUser : sysUsers) { + likeUserMap.put(sysUser.getUserId(), sysUser); + } + + + List likeAdviceVoList = new ArrayList<>(); + for (SysAdvice sysAdvice : sysAdviceList) { + LikeAdviceVo likeAdviceVo = BeanUtil.copyProperties(sysAdvice, LikeAdviceVo.class); + + Long senderId = sysAdvice.getSenderId(); + SysUser senderUser = likeUserMap.get(senderId); + if (Objects.nonNull(senderUser)) { + likeAdviceVo.setUserAvatar(senderUser.getAvatar()); + } + if (productType == 0) { + ModelProduct modelProduct = modelProductMap.get(sysAdvice.getProductId()); + if (Objects.nonNull(modelProduct)) { + likeAdviceVo.setProductImag(modelProduct.getSurfaceUrl()); + } + } else if (productType == 1) { + WorkFlow workFlow = workFlowMap.get(sysAdvice.getProductId()); + if (Objects.nonNull(workFlow)) { + likeAdviceVo.setProductImag(workFlow.getCoverPath()); + } + } else if (productType == 2) { + ModelImage modelImage = modelImageMap.get(sysAdvice.getProductId()); + if (Objects.nonNull(modelImage)) { + likeAdviceVo.setProductImag(modelImage.getImagePaths().split(",")[0]); + } + } + + likeAdviceVoList.add(likeAdviceVo); + } + + return likeAdviceVoList; + } + + @Override + public List getAttentionMsg() { + List sysAdviceList = baseMapper.selectList(new LambdaQueryWrapper() + .eq(SysAdvice::getType, AdviceEnum.FANS_REMIND) + .eq(SysAdvice::getReceiverId, SecurityUtils.getUserId()) + .orderByDesc(SysAdvice::getCreateTime)); + + List attentionAdviceVoList = new ArrayList<>(); + List atentUserIdList = new ArrayList<>(); + + // 通知表中获取所有关注我的用户id + for (SysAdvice sysAdvice : sysAdviceList) { + atentUserIdList.add(sysAdvice.getSenderId()); + } + + // 构建map, key为用户id,value为用户信息 + Map attentionUserMap = new HashMap<>(); + + // 批量查询用户信息, 并构建映射关系 + List atentUserList = sysUserService.listByIds(atentUserIdList); + for (SysUser sysUser : atentUserList) { + attentionUserMap.put(sysUser.getUserId(), sysUser); + } + + for (SysAdvice sysAdvice : sysAdviceList) { + AttentionAdviceVo attentionAdviceVo = BeanUtil.copyProperties(sysAdvice, AttentionAdviceVo.class); + Long senderId = sysAdvice.getSenderId(); + SysUser attentionUser = attentionUserMap.get(senderId); + if (Objects.nonNull(attentionUser)) { + attentionAdviceVo.setUserAvatar(attentionUser.getAvatar()); + } + attentionAdviceVoList.add(attentionAdviceVo); + } + + return attentionAdviceVoList; + } + + @Override + public void read(Long adviceId) { + SysAdvice sysAdvice = baseMapper.selectById(adviceId); + + if (Objects.isNull(sysAdvice)) { + return; + } + + Long receiverId = sysAdvice.getReceiverId(); + if (!Objects.equals(SecurityUtils.getUserId(), receiverId)) { + return; + } + + sysAdvice.setIsRead(1); + baseMapper.updateById(sysAdvice); + + } + + @Override + public void readAll() { + List sysAdviceList = baseMapper.selectList(new LambdaQueryWrapper() + .eq(SysAdvice::getIsRead, 0) + .eq(SysAdvice::getReceiverId, SecurityUtils.getUserId())); + for (SysAdvice sysAdvice : sysAdviceList) { + sysAdvice.setIsRead(1); + baseMapper.updateById(sysAdvice); + } + } + + public void postConstruct() { + Long userId = SecurityUtils.getUserId(); + + // 并行加载数据 + CompletableFuture> productsFuture = CompletableFuture.supplyAsync(() -> + modelService.lambdaQuery().eq(ModelProduct::getUserId, userId).list() + ); + + CompletableFuture> workflowsFuture = CompletableFuture.supplyAsync(() -> + workFlowService.lambdaQuery().eq(WorkFlow::getUserId, userId).list() + ); + + CompletableFuture> imagesFuture = CompletableFuture.supplyAsync(() -> + modelImageService.lambdaQuery().eq(ModelImage::getUserId, userId).list() + ); + + // 等待所有任务完成 + CompletableFuture.allOf(productsFuture, workflowsFuture, imagesFuture).join(); + + // 更新缓存 + modelProductMap.clear(); + productsFuture.join().forEach(p -> modelProductMap.put(p.getId(), p)); + + workFlowMap.clear(); + workflowsFuture.join().forEach(w -> workFlowMap.put(w.getId(), w)); + + modelImageMap.clear(); + imagesFuture.join().forEach(i -> modelImageMap.put(i.getId(), i)); + + } + + +} diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/SysUserAttentionServiceImpl.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/SysUserAttentionServiceImpl.java index e5d2ac3..69c8e9c 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/SysUserAttentionServiceImpl.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/SysUserAttentionServiceImpl.java @@ -2,10 +2,11 @@ package com.mcwl.resource.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; -import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.domain.R; import com.mcwl.common.core.domain.entity.SysUser; import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.common.utils.StringUtils; +import com.mcwl.resource.domain.SysAdvice; import com.mcwl.resource.domain.SysUserAttention; import com.mcwl.resource.domain.SysUserInfo; import com.mcwl.resource.domain.vo.PageVo; @@ -14,6 +15,7 @@ import com.mcwl.resource.mapper.ModelImageMapper; import com.mcwl.resource.mapper.ModelMapper; import com.mcwl.resource.mapper.SysUserAttentionMapper; import com.mcwl.resource.service.SysUserAttentionService; +import com.mcwl.system.domain.enums.AdviceEnum; import com.mcwl.system.mapper.SysUserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -53,7 +55,7 @@ public class SysUserAttentionServiceImpl implements SysUserAttentionService { //查看是否已关注 Boolean aBoolean = selectAttention(userId); - if (aBoolean == true) { + if (aBoolean) { //取关 sysUserAttentionMapper.deleteByUserId(SecurityUtils.getUserId(), userId); return R.ok(false); @@ -66,6 +68,18 @@ public class SysUserAttentionServiceImpl implements SysUserAttentionService { .createTime(new Date()) .build(); sysUserAttentionMapper.insert(sysUserAttention); + + + // 添加通知 + String content = StringUtils.format("{}关注了您,快去看看吧!", SecurityUtils.getUsername()); + SysAdvice sysAdvice = new SysAdvice(); + sysAdvice.setSenderId(SecurityUtils.getUserId()); + sysAdvice.setReceiverId(userId); + sysAdvice.setContent(content); + sysAdvice.setIsRead(0); + sysAdvice.setType(AdviceEnum.FANS_REMIND); + + return R.ok(true); } diff --git a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowCommentLikeServiceImpl.java b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowCommentLikeServiceImpl.java index f4cbe28..be9036d 100644 --- a/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowCommentLikeServiceImpl.java +++ b/mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowCommentLikeServiceImpl.java @@ -3,11 +3,14 @@ package com.mcwl.resource.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mcwl.common.exception.ServiceException; import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.common.utils.StringUtils; +import com.mcwl.resource.domain.SysAdvice; import com.mcwl.resource.domain.WorkFlowComment; import com.mcwl.resource.domain.WorkFlowCommentLike; import com.mcwl.resource.mapper.WorkFlowCommentLikeMapper; import com.mcwl.resource.mapper.WorkFlowCommentMapper; import com.mcwl.resource.service.WorkFlowCommentLikeService; +import com.mcwl.system.domain.enums.AdviceEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -47,6 +50,7 @@ public class WorkFlowCommentLikeServiceImpl extends ServiceImpl initPage(PageDomain pageDomain) { Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize()); if (StringUtils.isBlank(pageDomain.getOrderByColumn())) { diff --git a/mcwl-resource/src/main/resources/mapper/resource/ModelImageLikeMapper.xml b/mcwl-resource/src/main/resources/mapper/resource/ModelImageLikeMapper.xml index 8028202..143083b 100644 --- a/mcwl-resource/src/main/resources/mapper/resource/ModelImageLikeMapper.xml +++ b/mcwl-resource/src/main/resources/mapper/resource/ModelImageLikeMapper.xml @@ -32,7 +32,7 @@ update model_image_like set del_flag = #{delFlag} - where user_id = #{userId} and model_image_id = #{imageId} + where user_id = #{userId} and model_image_id = #{modelImageId} - -