Merge branch 'feature/community-center' into preview

# Conflicts:
#	mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/QuestionController.java
feature/resource
yang 2025-01-17 19:09:25 +08:00
commit 484c99504a
12 changed files with 306 additions and 5 deletions

View File

@ -17,6 +17,7 @@ import java.util.List;
@RestController @RestController
@RequestMapping("community") @RequestMapping("community")
@RequiredArgsConstructor @RequiredArgsConstructor
@Api(tags = "社区管理")
public class CommunityController { public class CommunityController {
private final CommunityService communityService; private final CommunityService communityService;

View File

@ -3,16 +3,20 @@ package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.utils.StringUtils; import com.mcwl.common.utils.StringUtils;
import com.mcwl.communityCenter.domain.Community;
import com.mcwl.communityCenter.service.InviteService; import com.mcwl.communityCenter.service.InviteService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
/** /**
* *

View File

@ -2,14 +2,22 @@ package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.page.PageDomain;
import com.mcwl.common.core.page.TableDataInfo; import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.dto.QuestionPageRes;
import com.mcwl.communityCenter.domain.dto.QuestionReplyDto;
import com.mcwl.communityCenter.domain.dto.QuestionRes; import com.mcwl.communityCenter.domain.dto.QuestionRes;
import com.mcwl.communityCenter.domain.vo.QuestionVo;
import com.mcwl.communityCenter.service.QuestionService; import com.mcwl.communityCenter.service.QuestionService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.Objects;
/** /**
* *
@ -27,6 +35,7 @@ public class QuestionController {
* *
*/ */
@PostMapping("addQuestion") @PostMapping("addQuestion")
@ApiOperation(value = "提问")
public AjaxResult addQuestion(@RequestBody QuestionRes questionRes) { public AjaxResult addQuestion(@RequestBody QuestionRes questionRes) {
questionService.addQuestion(questionRes); questionService.addQuestion(questionRes);
@ -37,13 +46,36 @@ public class QuestionController {
/** /**
* *
*/ */
@GetMapping("list") @GetMapping("listUnReplied")
public TableDataInfo getQuestionList(@NotNull(message = "社区不能为空") Long communityId) { public TableDataInfo listUnReplied(QuestionPageRes questionPageRes) {
return questionService.listUnReplied(questionPageRes);
}
/**
*
*/
@GetMapping("detail")
public AjaxResult getQuestionDetail(@NotNull(message = "id不能为空") Long id) {
QuestionVo questionVo = questionService.getDetail(id);
if (Objects.isNull(questionVo)) {
return AjaxResult.error("获取详情失败");
}
return AjaxResult.success(questionVo);
}
/**
*
*/
@PostMapping("reply")
public AjaxResult reply(QuestionReplyDto questionReplyDto) {
questionService.reply(questionReplyDto);
return AjaxResult.success();
// return questionService.getQuestionList(communityId);
return null;
} }

View File

@ -142,3 +142,5 @@ xss:
excludes: /system/notice excludes: /system/notice
# 匹配链接 # 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/* urlPatterns: /system/*,/monitor/*,/tool/*
knife4j:
enable: true

View File

@ -3,6 +3,8 @@ package com.mcwl.communityCenter.domain;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.mcwl.common.core.domain.BaseEntity; import com.mcwl.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -12,29 +14,35 @@ import lombok.EqualsAndHashCode;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName("cc_community") @TableName("cc_community")
@ApiModel(value = "社区")
public class Community extends BaseEntity { public class Community extends BaseEntity {
@TableId @TableId
@ApiModelProperty(value = "社区id")
private Long id; private Long id;
/** /**
* *
*/ */
@ApiModelProperty(value = "社区名称")
private String communityName; private String communityName;
/** /**
* *
*/ */
@ApiModelProperty(value = "社区类型")
private Integer type; private Integer type;
/** /**
* *
*/ */
@ApiModelProperty(value = "价格")
private Double price; private Double price;
/** /**
* *
*/ */
@ApiModelProperty(value = "有效期类型")
private Integer validityType; private Integer validityType;

View File

@ -11,6 +11,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.Date;
/** /**
* *
*/ */
@ -61,6 +63,11 @@ public class Question extends BaseEntity {
@ApiModelProperty(value = "答复内容") @ApiModelProperty(value = "答复内容")
private String reply; private String reply;
/**
*
*/
private Date replyTime;
/** /**
* *
*/ */

View File

@ -0,0 +1,16 @@
package com.mcwl.communityCenter.domain.dto;
import com.mcwl.common.core.page.PageDomain;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
@Data
@EqualsAndHashCode(callSuper = true)
public class QuestionPageRes extends PageDomain {
@NotNull(message = "社区不能为空")
private Long communityId;
}

View File

@ -0,0 +1,23 @@
package com.mcwl.communityCenter.domain.dto;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
public class QuestionReplyDto {
/**
* id
*/
@NotNull(message = "问题id不能为空")
private Long questionId;
/**
*
*/
@NotBlank(message = "回复内容不能为空")
private String content;
}

View File

@ -1,6 +1,8 @@
package com.mcwl.communityCenter.domain.dto; package com.mcwl.communityCenter.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
@ -10,39 +12,47 @@ import javax.validation.constraints.NotNull;
* *
*/ */
@Data @Data
@ApiModel("提问请求参数")
public class QuestionRes { public class QuestionRes {
/** /**
* id * id
*/ */
@NotNull(message = "租户不能为空") @NotNull(message = "租户不能为空")
@ApiModelProperty(value = "租户ID", hidden = true)
private Long tenantId; private Long tenantId;
/** /**
* id * id
*/ */
@NotNull(message = "社区不能为空") @NotNull(message = "社区不能为空")
@ApiModelProperty(value = "社区ID", required = true, position = 1)
private Long communityId; private Long communityId;
/** /**
* id * id
*/ */
@NotNull(message = "提问用户不能为空") @NotNull(message = "提问用户不能为空")
@ApiModelProperty(value = "提问用户id", required = true, position = 2)
private Long questionUserId; private Long questionUserId;
/** /**
* *
*/ */
@NotBlank(message = "提问内容不能为空") @NotBlank(message = "提问内容不能为空")
@ApiModelProperty(value = "提问内容", required = true, position = 3)
private String content; private String content;
/** /**
* *
*/ */
@ApiModelProperty(value = "提问图片", position = 4)
private String questionUrl; private String questionUrl;
/** /**
* 0 1 * 0 1
*/ */
//swagger给上默认值
@ApiModelProperty(value = "是否匿名", example = "0", allowableValues = "0,1", position = 5)
private Integer isAnonymous = 0; private Integer isAnonymous = 0;

View File

@ -0,0 +1,75 @@
package com.mcwl.communityCenter.domain.vo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Data
public class QuestionVo {
private Long id;
/**
* id
*/
private Long communityId;
/**
* id
*/
private Long questionUserId;
/**
*
*/
private String questionUserName;
/**
*
*/
private String questionUserAvatar;
/**
*
*/
private String content;
/**
*
*/
private String questionUrl;
/**
*
*/
private Date createTime;
/**
* id
*/
private Long replyUserId;
/**
*
*/
private String reply;
/**
*
*/
private Date replyTime;
/**
*
*/
private Integer isAnonymous;
}

View File

@ -1,9 +1,15 @@
package com.mcwl.communityCenter.service; package com.mcwl.communityCenter.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.Publish; import com.mcwl.communityCenter.domain.Publish;
import com.mcwl.communityCenter.domain.Question; import com.mcwl.communityCenter.domain.Question;
import com.mcwl.communityCenter.domain.dto.QuestionPageRes;
import com.mcwl.communityCenter.domain.dto.QuestionReplyDto;
import com.mcwl.communityCenter.domain.dto.QuestionRes; import com.mcwl.communityCenter.domain.dto.QuestionRes;
import com.mcwl.communityCenter.domain.vo.QuestionVo;
import javax.validation.constraints.NotNull;
public interface QuestionService extends IService<Question> { public interface QuestionService extends IService<Question> {
@ -14,6 +20,13 @@ public interface QuestionService extends IService<Question> {
void addQuestion(QuestionRes questionRes); void addQuestion(QuestionRes questionRes);
TableDataInfo listUnReplied(QuestionPageRes questionPageRes);
QuestionVo getDetail(@NotNull(message = "id不能为空") Long id);
/**
*
* @param questionReplyDto
*/
void reply(QuestionReplyDto questionReplyDto);
} }

View File

@ -1,23 +1,38 @@
package com.mcwl.communityCenter.service.impl; package com.mcwl.communityCenter.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.domain.entity.SysUser;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.common.utils.SecurityUtils; import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.common.utils.StringUtils;
import com.mcwl.communityCenter.constant.StatusConstant;
import com.mcwl.communityCenter.domain.CommunityAdvice; import com.mcwl.communityCenter.domain.CommunityAdvice;
import com.mcwl.communityCenter.domain.Invite; import com.mcwl.communityCenter.domain.Invite;
import com.mcwl.communityCenter.domain.Publish; import com.mcwl.communityCenter.domain.Publish;
import com.mcwl.communityCenter.domain.Question; import com.mcwl.communityCenter.domain.Question;
import com.mcwl.communityCenter.domain.dto.QuestionPageRes;
import com.mcwl.communityCenter.domain.dto.QuestionReplyDto;
import com.mcwl.communityCenter.domain.dto.QuestionRes; import com.mcwl.communityCenter.domain.dto.QuestionRes;
import com.mcwl.communityCenter.domain.vo.QuestionVo;
import com.mcwl.communityCenter.mapper.CommunityAdviceMapper; import com.mcwl.communityCenter.mapper.CommunityAdviceMapper;
import com.mcwl.communityCenter.mapper.PublishMapper; import com.mcwl.communityCenter.mapper.PublishMapper;
import com.mcwl.communityCenter.mapper.QuestionMapper; import com.mcwl.communityCenter.mapper.QuestionMapper;
import com.mcwl.communityCenter.service.InviteService; import com.mcwl.communityCenter.service.InviteService;
import com.mcwl.communityCenter.service.PublishService; import com.mcwl.communityCenter.service.PublishService;
import com.mcwl.communityCenter.service.QuestionService; import com.mcwl.communityCenter.service.QuestionService;
import com.mcwl.system.service.ISysUserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -28,8 +43,11 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
private final CommunityAdviceMapper communityAdviceMapper; private final CommunityAdviceMapper communityAdviceMapper;
private final ISysUserService sysUserService;
/** /**
* *
*
* @param questionRes * @param questionRes
*/ */
@Override @Override
@ -55,6 +73,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
Question question = new Question(); Question question = new Question();
BeanUtil.copyProperties(questionRes, question); BeanUtil.copyProperties(questionRes, question);
question.setStatus(StatusConstant.STATUS_UNREPLIED);
baseMapper.insert(question); baseMapper.insert(question);
@ -68,4 +87,95 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
} }
@Override
public TableDataInfo listUnReplied(QuestionPageRes questionPageRes) {
Page<Question> page = new Page<>(questionPageRes.getPageNum(), questionPageRes.getPageSize());
OrderItem orderItem = new OrderItem();
if (StringUtils.isBlank(questionPageRes.getOrderByColumn())) {
questionPageRes.setOrderByColumn("create_time");
}
orderItem.setColumn(questionPageRes.getOrderByColumn());
orderItem.setAsc(Objects.equals(questionPageRes.getIsAsc(), "asc"));
page.addOrder(orderItem);
LambdaQueryWrapper<Question> lqw = new LambdaQueryWrapper<>();
lqw.eq(Question::getCommunityId, questionPageRes.getCommunityId())
.eq(Question::getStatus, StatusConstant.STATUS_UNREPLIED);
baseMapper.selectPage(page, lqw);
// 获取分页数据
List<Question> questionList = page.getRecords();
// Question数据转为QuestionVo
List<QuestionVo> questionVoList = new ArrayList<>();
for (Question question : questionList) {
QuestionVo questionVo = new QuestionVo();
BeanUtil.copyProperties(question, questionVo);
Long questionUserId = question.getQuestionUserId();
SysUser sysUser = sysUserService.selectUserById(questionUserId);
questionVo.setQuestionUserName(sysUser.getUserName());
questionVo.setQuestionUserAvatar(sysUser.getAvatar());
questionVoList.add(questionVo);
}
// 封装分页信息
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setMsg("查询成功");
rspData.setRows(questionVoList);
rspData.setTotal(page.getTotal());
return rspData;
}
@Override
public QuestionVo getDetail(Long id) {
Question question = baseMapper.selectById(id);
if (Objects.isNull(question)) {
return null;
}
QuestionVo questionVo = new QuestionVo();
BeanUtil.copyProperties(question, questionVo);
Long questionUserId = question.getQuestionUserId();
SysUser sysUser = sysUserService.selectUserById(questionUserId);
questionVo.setQuestionUserName(sysUser.getUserName());
questionVo.setQuestionUserAvatar(sysUser.getAvatar());
return questionVo;
}
/**
*
*
* @param questionReplyDto
*/
@Override
public void reply(QuestionReplyDto questionReplyDto) {
Long questionId = questionReplyDto.getQuestionId();
LambdaQueryWrapper<Question> lqw = new LambdaQueryWrapper<>();
lqw.eq(Question::getId, questionId)
.eq(Question::getStatus, StatusConstant.STATUS_UNREPLIED);
// 查询问题信息
Question question = baseMapper.selectOne(lqw);
if (Objects.isNull(question)) {
return;
}
question.setContent(questionReplyDto.getContent());
question.setStatus(StatusConstant.STATUS_REPLIED);
question.setReplyTime(new Date());
baseMapper.updateById(question);
}
} }