feat(community): 发布收藏

master
yang 2025-04-16 13:46:13 +08:00
parent 70d3d32bc5
commit 906a56c431
19 changed files with 279 additions and 62 deletions

View File

@ -6,10 +6,7 @@ import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.PageDomain;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.Community;
import com.mcwl.communityCenter.domain.dto.CommunityListPageRes;
import com.mcwl.communityCenter.domain.dto.CommunityRes;
import com.mcwl.communityCenter.domain.dto.JoinCommunityListPageRes;
import com.mcwl.communityCenter.domain.dto.JoinCommunityRes;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.service.CommunityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
@ -85,37 +82,32 @@ public class CommunityController {
*/
@ApiOperation(value = "退出社区")
@PostMapping("quit")
public R<Object> quitCommunity(@ApiParam(value = "租户id", required = true)
@NotNull(message = "租户id不能为空")
@Valid
Long tenantId,
@ApiParam(value = "社区id", required = true)
@NotNull(message = "社区id不能为空")
@Valid
Long communityId) {
public R<Object> quitCommunity(@RequestBody @Valid QuitCommunityRes quitCommunityRes) {
Long tenantId = quitCommunityRes.getTenantId();
Long communityId = quitCommunityRes.getCommunityId();
return communityService.quitCommunity(tenantId, communityId);
}
/**
*
*
* @param id id
* @return
*/
@ApiOperation(value = "删除社区")
@GetMapping("delete")
public R<Object> deleteCommunity(@NotNull(message = "id不能为空")
@ApiParam(value = "id", required = true)
@Valid
Long id) {
Community community = communityService.getById(id);
if (Objects.isNull(community)) {
return R.fail(HttpStatus.SHOW_ERROR_MSG, "该社区不存在");
}
communityService.removeById(id);
return R.ok();
}
//
// /**
// * 删除社区
// *
// * @param id 社区id
// * @return 删除结果
// */
// @ApiOperation(value = "删除社区")
// @GetMapping("delete")
// public R<Object> deleteCommunity(@NotNull(message = "id不能为空")
// @ApiParam(value = "id", required = true)
// @Valid
// Long id) {
// Community community = communityService.getById(id);
// if (Objects.isNull(community)) {
// return R.fail(HttpStatus.SHOW_ERROR_MSG, "该社区不存在");
// }
// communityService.removeById(id);
// return R.ok();
// }
/**
*

View File

@ -5,9 +5,7 @@ import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.dto.PublishDetailRes;
import com.mcwl.communityCenter.domain.dto.PublishPageRes;
import com.mcwl.communityCenter.domain.dto.PublishRes;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.domain.vo.PublishVo;
import com.mcwl.communityCenter.service.PublishService;
import io.swagger.annotations.Api;
@ -106,4 +104,14 @@ public class PublishController {
return R.ok();
}
/**
* /
*/
@ApiOperation(value = "收藏/取消收藏")
@PostMapping("collect")
public R<Object> collectPublish(@RequestBody @Valid PublishCollectRes publishCollectRes) {
publishService.collectPublish(publishCollectRes);
return R.ok();
}
}

View File

@ -0,0 +1,36 @@
package com.mcwl.communityCenter.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* /
*/
@Data
@ApiModel(value = "收藏/取消收藏请求参数")
public class PublishCollectRes {
/**
* id
*/
@ApiModelProperty(value = "用户id", required = true)
@NotNull(message = "用户id不能为空")
private Long tenantId;
/**
* id
*/
@ApiModelProperty(value = "社区id", required = true)
@NotNull(message = "社区id不能为空")
private Long communityId;
/**
* id
*/
@ApiModelProperty(value = "发布id", required = true)
@NotNull(message = "发布id不能为空")
private Long publishId;
}

View File

@ -8,6 +8,9 @@ import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
*
*/
@Data
@ApiModel(value = "发布详情请求参数")
public class PublishDetailRes {

View File

@ -0,0 +1,29 @@
package com.mcwl.communityCenter.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 退
*/
@Data
@ApiModel(value = "退出社区请求参数")
public class QuitCommunityRes {
@ApiModelProperty(value = "租户id", required = true)
@NotNull(message = "租户id不能为空")
private Long tenantId;
@ApiModelProperty(value = "社区id", required = true)
@NotNull(message = "社区id不能为空")
private Long communityId;
}

View File

@ -21,20 +21,36 @@ public class CustomTenantHandler implements TenantLineHandler {
* .
*/
static {
// 通知表
tables.add("cc_advice");
// 发布评论表
tables.add("cc_comment");
// 评论点赞表
tables.add("cc_comment_like");
// 社区表
tables.add("cc_community");
// 社区文件表
tables.add("cc_community_file");
// 社区文件下载记录表
tables.add("cc_community_file_log");
// 社区用户表
tables.add("cc_community_user");
// 收益明细
tables.add("cc_income_info");
// 邀请表
tables.add("cc_invite");
// 发布表
tables.add("cc_publish");
// 收藏表
tables.add("cc_publish_collect");
// 发布点赞表
tables.add("cc_publish_like");
// 提问表
tables.add("cc_question");
// 提问评论表
tables.add("cc_question_comment");
// 社区用户表
tables.add("cc_community_user");
// 输出表名
log.info("多租户表:{}", tables);

View File

@ -21,5 +21,7 @@ public interface CommunityFileLogMapper extends BaseMapper<CommunityFileLog> {
Long communityFileId);
@InterceptorIgnore(tenantLine = "true")
Integer getDownloadCount(Long tenantId, Long communityId, Long communityFileId);
Integer getDownloadCount(@Param("tenantId") Long tenantId,
@Param("communityId") Long communityId,
@Param("communityFileId") Long communityFileId);
}

View File

@ -57,8 +57,10 @@ public interface CommunityMapper extends BaseMapper<Community> {
String searchContent);
@InterceptorIgnore(tenantLine = "true")
void quitCommunity(Long tenantId, Long communityId, Long userId);
void quitCommunity(@Param("tenantId") Long tenantId,
@Param("communityId") Long communityId,
@Param("userId") Long userId);
@InterceptorIgnore(tenantLine = "true")
void deleteCommunity(Long tenantId, Long communityId);
void deleteCommunity(@Param("tenantId") Long tenantId, @Param("communityId") Long communityId);
}

View File

@ -23,7 +23,7 @@ public interface CommunityUserMapper extends BaseMapper<CommunityUser> {
@Param("userId") Long userId);
@InterceptorIgnore(tenantLine = "true")
Integer getJoinNum(Long tenantId, Long communityId);
Integer getJoinNum(@Param("tenantId") Long tenantId, @Param("communityId") Long communityId);
@InterceptorIgnore(tenantLine = "true")
int isJoinCommunity(@Param("tenantId")

View File

@ -38,5 +38,7 @@ public interface InviteMapper extends BaseMapper<Invite> {
* @return
*/
@InterceptorIgnore(tenantLine = "true")
Invite selectByTenantIdAndCommunityIdAndInviteeUserId(Long tenantId, Long communityId, Long inviteeUserId);
Invite selectByTenantIdAndCommunityIdAndInviteeUserId(@Param("tenantId") Long tenantId,
@Param("communityId") Long communityId,
@Param("inviteeUserId") Long inviteeUserId);
}

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mcwl.communityCenter.domain.Publish;
import com.mcwl.communityCenter.domain.PublishCollect;
import com.mcwl.communityCenter.domain.dto.MyPublishCollectPageRes;
import com.mcwl.communityCenter.domain.dto.PublishCollectRes;
import com.mcwl.communityCenter.domain.dto.PublishPageRes;
import com.mcwl.communityCenter.domain.vo.PublishVo;
import org.apache.ibatis.annotations.Mapper;
@ -21,4 +22,14 @@ public interface PublishCollectMapper extends BaseMapper<PublishCollect> {
List<PublishVo> myCollectList(Page<PublishCollect> page,
@Param("myPublishCollectPageRes") MyPublishCollectPageRes myPublishCollectPageRes,
@Param("userId") Long userId);
@InterceptorIgnore(tenantLine = "true")
void savePublishCollect(@Param("publishCollect") PublishCollect publishCollect);
@InterceptorIgnore(tenantLine = "true")
PublishCollect getPublishCollect(@Param("publishCollect") PublishCollectRes publishCollectRes,
@Param("userId") Long userId);
@InterceptorIgnore(tenantLine = "true")
void updatePublishCollect(@Param("publishCollect") PublishCollect publishCollect);
}

View File

@ -5,10 +5,7 @@ import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.Publish;
import com.mcwl.communityCenter.domain.PublishCollect;
import com.mcwl.communityCenter.domain.dto.MyPublishCollectPageRes;
import com.mcwl.communityCenter.domain.dto.PublishDetailRes;
import com.mcwl.communityCenter.domain.dto.PublishPageRes;
import com.mcwl.communityCenter.domain.dto.PublishRes;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.domain.vo.PublishVo;
import javax.validation.Valid;
@ -17,4 +14,11 @@ public interface PublishCollectService extends IService<PublishCollect> {
TableDataInfo myCollectList(@Valid MyPublishCollectPageRes myPublishCollectPageRes);
void savePublishCollect(PublishCollect publishCollect);
PublishCollect getPublishCollect(PublishCollectRes publishCollectRes, Long userId);
void updatePublishCollect(PublishCollect publishCollect);
}

View File

@ -7,10 +7,7 @@ import com.mcwl.common.core.page.PageDomain;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.Community;
import com.mcwl.communityCenter.domain.Publish;
import com.mcwl.communityCenter.domain.dto.MyPublishPageRes;
import com.mcwl.communityCenter.domain.dto.PublishDetailRes;
import com.mcwl.communityCenter.domain.dto.PublishPageRes;
import com.mcwl.communityCenter.domain.dto.PublishRes;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.domain.vo.PublishVo;
import javax.validation.Valid;
@ -38,4 +35,6 @@ public interface PublishService extends IService<Publish> {
TableDataInfo publishList(PublishPageRes publishPageRes);
TableDataInfo myPublishList(MyPublishPageRes myPublishPageRes);
void collectPublish(@Valid PublishCollectRes publishCollectRes);
}

View File

@ -188,9 +188,27 @@ public class CommunityServiceImpl extends ServiceImpl<CommunityMapper, Community
@Override
@Transactional(rollbackFor = Exception.class)
public R<Object> quitCommunity(Long tenantId, Long communityId) {
Long userId = SecurityUtils.getUserId();
Community community = baseMapper.getByTenantIdAndCommunityId(tenantId, communityId);
if (Objects.isNull(community)) {
return R.fail(HttpStatus.SHOW_ERROR_MSG, "社区不存在");
}
CommunityUser communityUser = communityUserMapper.selectCommunityUser(tenantId, communityId, userId);
if (Objects.isNull(communityUser)) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"您不是该社区成员");
}
Integer communityJoinNum = communityUserMapper.getJoinNum(tenantId, communityId);
baseMapper.quitCommunity(tenantId, communityId, SecurityUtils.getUserId());
if (communityUser.getUserType() == 2 && communityJoinNum > 1) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"社区还有成员,无法退出");
}
baseMapper.quitCommunity(tenantId, communityId, userId);
if (communityJoinNum == 1) {
baseMapper.deleteCommunity(tenantId, communityId);

View File

@ -48,6 +48,21 @@ public class PublishCollectServiceImpl extends ServiceImpl<PublishCollectMapper,
return rspData;
}
@Override
public void savePublishCollect(PublishCollect publishCollect) {
baseMapper.savePublishCollect(publishCollect);
}
@Override
public PublishCollect getPublishCollect(PublishCollectRes publishCollectRes, Long userId) {
return baseMapper.getPublishCollect(publishCollectRes, userId);
}
@Override
public void updatePublishCollect(PublishCollect publishCollect) {
baseMapper.updatePublishCollect(publishCollect);
}
private Page<PublishCollect> initPage(PageDomain pageDomain) {
Page<PublishCollect> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
page.addOrder(new OrderItem("create_time", false));

View File

@ -12,23 +12,22 @@ import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.domain.entity.SysUser;
import com.mcwl.common.core.page.PageDomain;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.common.exception.BusinessException;
import com.mcwl.common.exception.ServiceException;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.common.utils.StringUtils;
import com.mcwl.communityCenter.domain.Community;
import com.mcwl.communityCenter.domain.CommunityUser;
import com.mcwl.communityCenter.domain.Publish;
import com.mcwl.communityCenter.domain.Question;
import com.mcwl.communityCenter.domain.dto.MyPublishPageRes;
import com.mcwl.communityCenter.domain.dto.PublishDetailRes;
import com.mcwl.communityCenter.domain.dto.PublishPageRes;
import com.mcwl.communityCenter.domain.dto.PublishRes;
import com.mcwl.communityCenter.constant.AdviceConstant;
import com.mcwl.communityCenter.domain.*;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.domain.vo.PublishVo;
import com.mcwl.communityCenter.mapper.*;
import com.mcwl.communityCenter.service.PublishCollectService;
import com.mcwl.communityCenter.service.PublishService;
import com.mcwl.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import nonapi.io.github.classgraph.concurrency.AutoCloseableExecutorService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.concurrent.ThreadPoolExecutor;
@ -45,6 +44,12 @@ public class PublishServiceImpl extends ServiceImpl<PublishMapper, Publish> impl
private final CommunityUserMapper communityUserMapper;
private final PublishCollectService publishCollectService;
private final PublishMapper publishMapper;
private final CommunityAdviceMapper communityAdviceMapper;
@Override
public PublishVo getDetail(PublishDetailRes publishDetailRes) {
@ -75,18 +80,18 @@ public class PublishServiceImpl extends ServiceImpl<PublishMapper, Publish> impl
Community community = communityMapper.getByTenantIdAndCommunityId(publishRes.getTenantId(), publishRes.getCommunityId());
if (Objects.isNull(community)) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"用户社区未创建");
return R.fail(HttpStatus.SHOW_ERROR_MSG, "用户社区未创建");
}
CommunityUser communityUser = communityUserMapper.selectCommunityUser(publishRes.getTenantId(), publishRes.getCommunityId(), userId);
if (Objects.isNull(communityUser)) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"您不是该社区成员");
return R.fail(HttpStatus.SHOW_ERROR_MSG, "您不是该社区成员");
}
if ("1".equals(communityUser.getIsBlank())) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"您已被拉黑");
return R.fail(HttpStatus.SHOW_ERROR_MSG, "您已被拉黑");
}
Publish publish = new Publish();
@ -222,6 +227,58 @@ public class PublishServiceImpl extends ServiceImpl<PublishMapper, Publish> impl
return tableDataInfo;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void collectPublish(PublishCollectRes publishCollectRes) {
Long tenantId = publishCollectRes.getTenantId();
Long communityId = publishCollectRes.getCommunityId();
Long publishId = publishCollectRes.getPublishId();
Long userId = SecurityUtils.getUserId();
Publish publish = publishMapper.selectByIdAndTenantIdAndCommunityId(publishId, tenantId, communityId);
if (Objects.isNull(publish)) {
throw new ServiceException("该内容不存在", HttpStatus.SHOW_ERROR_MSG);
}
PublishCollect publishCollect = publishCollectService.getPublishCollect(publishCollectRes, userId);
if (Objects.isNull(publishCollect)) {
publishCollect = new PublishCollect();
publishCollect.setTenantId(tenantId);
publishCollect.setCommunityId(communityId);
publishCollect.setPublishId(publishId);
publishCollect.setUserId(userId);
publishCollectService.savePublishCollect(publishCollect);
this.addCollectAdvice(publish);
return;
}
if (publishCollect.getDelFlag().equals("0")) {
publishCollect.setDelFlag("2");
} else {
publishCollect.setDelFlag("0");
}
publishCollectService.updatePublishCollect(publishCollect);
this.addCollectAdvice(publish);
}
private void addCollectAdvice(Publish publish) {
CommunityAdvice communityAdvice = new CommunityAdvice();
communityAdvice.setTenantId(publish.getTenantId());
communityAdvice.setCommunityId(publish.getCommunityId());
communityAdvice.setSendUserId(SecurityUtils.getUserId());
communityAdvice.setAdviceType(AdviceConstant.COMMUNITY_NOTICE);
communityAdvice.setUserId(publish.getUserId());
communityAdvice.setContent(StringUtils.format("{}收藏了你发布的{}",
SecurityUtils.getLoginUser().getUser().getNickName(), publish.getContent()));
communityAdviceMapper.insert(communityAdvice);
}
private Page<Publish> initPage(PageDomain pageDomain) {
Page<Publish> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
page.addOrder(new OrderItem("create_time", false));

View File

@ -86,7 +86,9 @@
and (community_name like concat('%', #{searchContent}, '%')
or `description` like concat('%', #{searchContent}, '%'))
</if>
and del_flag = '0'
</where>
</select>
<select id="getMyJoinCommunity" resultType="com.mcwl.communityCenter.domain.Community">
select c.id,

View File

@ -3,6 +3,18 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mcwl.communityCenter.mapper.PublishCollectMapper">
<insert id="savePublishCollect">
insert into cc_publish_collect(tenant_id, community_id, publish_id, user_id)
values (#{publishCollect.tenantId}, #{publishCollect.communityId}, #{publishCollect.publishId}, #{userId})
</insert>
<update id="updatePublishCollect">
update cc_publish_collect
set del_flag = #{publishCollect.delFlag}
where tenant_id = #{publishCollect.tenantId}
and community_id = #{publishCollect.communityId}
and publish_id = #{publishCollect.publishId}
and user_id = #{publishCollect.userId}
</update>
<select id="myCollectList" resultType="com.mcwl.communityCenter.domain.vo.PublishVo">
select p.*, IF(pc.id is not null, 1, 0) as is_collect
@ -17,4 +29,12 @@
and pc.del_flag = '0'
</where>
</select>
<select id="getPublishCollect" resultType="com.mcwl.communityCenter.domain.PublishCollect">
select *
from cc_publish_collect
where tenant_id = #{publishCollectRes.tenantId}
and community_id = #{publishCollectRes.communityId}
and publish_id = #{publishCollectRes.publishId}
and user_id = #{userId}
</select>
</mapper>

View File

@ -166,6 +166,7 @@ public class SecurityConfig {
"/personalCenter/likeModel",
"/personalCenter/likeWorkFlow",
"/personalCenter/likeImage",
"/community/list",
"/api/ucenter/wx/**"
).permitAll()
// 静态资源,可匿名访问