diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java index 219092b..df6e322 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java @@ -8,7 +8,9 @@ import cn.iocoder.yudao.module.member.api.user.MemberUserApi; import cn.iocoder.yudao.module.promotion.controller.admin.circle.vo.CirclePageReqVO; import cn.iocoder.yudao.module.promotion.controller.admin.circle.vo.CircleRespVO; import cn.iocoder.yudao.module.promotion.controller.admin.circle.vo.CircleSaveReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.circlereview.vo.CircleReviewPageReqVO; import cn.iocoder.yudao.module.promotion.controller.admin.circlereview.vo.CircleReviewSaveReqVO; +import cn.iocoder.yudao.module.promotion.controller.app.circle.vo.AppCircleReviewRespVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.circle.CircleDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.circlelike.CircleLikeDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.circlereview.CircleReviewDO; @@ -157,4 +159,12 @@ public class AppCircleController { return success(true); } + @GetMapping("/getCircleReviewList") + @Operation(summary = "获得动态评论列表") + @PreAuthenticated + public CommonResult> getCircleReviewList(@Valid CircleReviewPageReqVO circleReviewPageReqVO) { + PageResult pageResult = circleReviewService.getAppCircleReviewPage(circleReviewPageReqVO); + return success(pageResult); + } + } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/vo/AppCircleReviewRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/vo/AppCircleReviewRespVO.java new file mode 100644 index 0000000..140b78f --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/vo/AppCircleReviewRespVO.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.promotion.controller.app.circle.vo; + +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 动态的评论 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AppCircleReviewRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12446") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "用户id", example = "10725") + @ExcelProperty("用户id") + private Long userId; + + @Schema(description = "动态id", example = "17391") + @ExcelProperty("动态id") + private Long circleId; + + @Schema(description = "评论类型", example = "2") + @ExcelProperty(value = "评论类型", converter = DictConvert.class) + @DictFormat("circle_review_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer type; + + @Schema(description = "评论内容") + @ExcelProperty("评论内容") + private String content; + + @Schema(description = "图片地址", example = "https://www.iocoder.cn") + @ExcelProperty("图片地址") + private String picUrl; + + @Schema(description = "点赞量", example = "10166") + @ExcelProperty("点赞量") + private Long likeCount; + + @Schema(description = "被回复的评论ID", example = "8913") + @ExcelProperty("被回复的评论ID") + private Long replyId; + + @Schema(description = "被回复的用户ID", example = "32646") + @ExcelProperty("被回复的用户ID") + private Long replyUserId; + + @Schema(description = "版本号") + @ExcelProperty("版本号") + private Integer version; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "子评论") + private List children; + + @Schema(description = "用户昵称") + private String nickname; + + @Schema(description = "用户头像") + private String avatar; + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/supportstaff/AppSupportStaffController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/supportstaff/AppSupportStaffController.java new file mode 100644 index 0000000..c06b691 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/supportstaff/AppSupportStaffController.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.promotion.controller.app.supportstaff; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; +import cn.iocoder.yudao.module.promotion.controller.admin.supportstaff.vo.SupportStaffPageReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.supportstaff.vo.SupportStaffRespVO; +import cn.iocoder.yudao.module.promotion.controller.admin.supportstaff.vo.SupportStaffSaveReqVO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.supportstaff.SupportStaffDO; +import cn.iocoder.yudao.module.promotion.service.supportstaff.SupportStaffService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +@Tag(name = "app - 客服人员") +@RestController +@RequestMapping("/promotion/support-staff") +@Validated +public class AppSupportStaffController { + + @Resource + private SupportStaffService supportStaffService; + @GetMapping("/updateLineStatus") + @PreAuthenticated + public CommonResult updateLineStatus (Integer lineStatus){ + SupportStaffDO supportStaffDO = supportStaffService.getSupportStaffByUserId(getLoginUserId()); + if (supportStaffDO != null){ + supportStaffService.updateLineStatus(String.valueOf(supportStaffDO.getId()), lineStatus); + } + return success(true); + } +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewService.java index 0ac6dbb..f222fb9 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.promotion.service.circlereview; import java.util.*; import javax.validation.*; import cn.iocoder.yudao.module.promotion.controller.admin.circlereview.vo.*; +import cn.iocoder.yudao.module.promotion.controller.app.circle.vo.AppCircleReviewRespVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.circlereview.CircleReviewDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -54,4 +55,5 @@ public interface CircleReviewService { */ PageResult getCircleReviewPage(CircleReviewPageReqVO pageReqVO); -} \ No newline at end of file + PageResult getAppCircleReviewPage(CircleReviewPageReqVO circleReviewPageReqVO); +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewServiceImpl.java index ac34c49..560cbf1 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewServiceImpl.java @@ -1,11 +1,18 @@ package cn.iocoder.yudao.module.promotion.service.circlereview; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; +import cn.iocoder.yudao.module.promotion.controller.app.circle.vo.AppCircleReviewRespVO; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; + import cn.iocoder.yudao.module.promotion.controller.admin.circlereview.vo.*; import cn.iocoder.yudao.module.promotion.dal.dataobject.circlereview.CircleReviewDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -15,6 +22,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.promotion.dal.mysql.circlereview.CircleReviewMapper; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.USER_NOT_EXISTS; import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; /** @@ -29,6 +37,9 @@ public class CircleReviewServiceImpl implements CircleReviewService { @Resource private CircleReviewMapper circleReviewMapper; + @Resource + private MemberUserApi memberUserApi; + @Override public Long createCircleReview(CircleReviewSaveReqVO createReqVO) { // 插入 @@ -76,4 +87,43 @@ public class CircleReviewServiceImpl implements CircleReviewService { return circleReviewMapper.selectPage(pageReqVO); } -} \ No newline at end of file + @Override + public PageResult getAppCircleReviewPage(CircleReviewPageReqVO circleReviewPageReqVO) { + circleReviewPageReqVO.setType(0); + PageResult page = circleReviewMapper.selectPage(circleReviewPageReqVO); + List list = page.getList(); + if (list.isEmpty()){ + return PageResult.empty(); + } + List result = list.stream().map(item -> { + AppCircleReviewRespVO appCircleReviewRespVO = new AppCircleReviewRespVO(); + BeanUtils.copyProperties(item, appCircleReviewRespVO); + MemberUserRespDTO member = memberUserApi.getUser(item.getUserId()); + if (member == null) { + throw exception(USER_NOT_EXISTS); + } + appCircleReviewRespVO.setNickname(member.getNickname()); + appCircleReviewRespVO.setAvatar(member.getAvatar()); + List children = circleReviewMapper.selectList("reply_id", item.getId()); + if (CollUtil.isNotEmpty(children)){ + List childs = children.stream().map(child -> { + AppCircleReviewRespVO appCircleReviewRespVOChild = new AppCircleReviewRespVO(); + BeanUtils.copyProperties(child, appCircleReviewRespVOChild); + + MemberUserRespDTO memberUserRespDTO = memberUserApi.getUser(child.getUserId()); + if (memberUserRespDTO == null) { + throw exception(USER_NOT_EXISTS); + } + appCircleReviewRespVOChild.setNickname(memberUserRespDTO.getNickname()); + appCircleReviewRespVOChild.setAvatar(memberUserRespDTO.getAvatar()); + return appCircleReviewRespVOChild; + }).collect(Collectors.toList()); + appCircleReviewRespVO.setChildren(childs); + } + return appCircleReviewRespVO; + }).collect(Collectors.toList()); + PageResult appPage = new PageResult<>(result, page.getTotal()); + return appPage; + } + +}