Sfoglia il codice sorgente

[fix]
增加通过话题查询游记列表的接口

chenchen 1 mese fa
parent
commit
a629a870b2

+ 115 - 62
application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/TourWebTravelNotesTopicController.java

@@ -1,62 +1,115 @@
-//package com.tourism.webadmin.app.website.controller;
-//
-//import cn.dev33.satoken.annotation.SaIgnore;
-//import com.tourism.common.core.annotation.DisableDataFilter;
-//import com.tourism.common.core.object.ResponseResult;
-//import com.tourism.common.core.object.TokenData;
-//import com.tourism.webadmin.app.website.dto.TourTravelNotesTopicByNameDto;
-//import com.tourism.webadmin.app.website.dto.TourTravelNotesTopicListByNameDto;
-//import com.tourism.webadmin.app.website.dto.TourVisaSearchDto;
-//import com.tourism.webadmin.app.website.vo.TourTravelNotesTopicSearchVo;
-//import com.tourism.webadmin.back.model.TourUserLikeTopic;
-//import com.tourism.webadmin.back.service.TourUserLikeTopicService;
-//import io.swagger.v3.oas.annotations.tags.Tag;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.validation.annotation.Validated;
-//import org.springframework.web.bind.annotation.GetMapping;
-//import org.springframework.web.bind.annotation.RequestMapping;
-//import org.springframework.web.bind.annotation.RestController;
-//
-///**
-// * @author 陈
-// * @date 2024年1月24日 9:00:00
-// */
-//@Tag(name = "游记话题")
-//@Slf4j
-//@RestController
-//@RequestMapping("/website/tourism/travelNotesTopic")
-//@DisableDataFilter
-//public class TourWebTravelNotesTopicController {
-//
-//
-//    @Autowired
-//    private TourUserLikeTopicService tourUserLikeTopicService;
-//
-//
-//    /**
-//     * 分页条件查询游记话题,默认根据最热进行排序
-//     * @param tourTravelNotesTopicListByNameDto
-//     * @return
-//     */
-//    @GetMapping("/list")
-//    public ResponseResult<TourTravelNotesTopicSearchVo> listPage(@Validated TourTravelNotesTopicListByNameDto tourTravelNotesTopicListByNameDto) {
-//
-//        TourTravelNotesTopicSearchVo tourTravelNotesTopicSearchVo = new TourTravelNotesTopicSearchVo();
-//
-//        //根据话题名称查询本人是否收藏
-//        TourUserLikeTopic tourUserLikeTopic = new TourUserLikeTopic();
-//        tourUserLikeTopic.setTourTravelNotesTopicName(tourTravelNotesTopicListByNameDto.getName());
-//        tourUserLikeTopic.setTourUserId(TokenData.takeFromRequest().getUserId());
-//        if(tourUserLikeTopicService.existByFilter(tourUserLikeTopic)){
-//            tourTravelNotesTopicSearchVo.setIsCollect(1);
-//        }else {
-//            tourTravelNotesTopicSearchVo.setIsCollect(0);
-//        }
-//        //根据话题名称查询浏览量
-//
-//        //根据话题名称查询讨论量
-//        //根据话题名称查询帖子数量
-//        //根据话题名称查询游记列表
-//    }
-//}
+package com.tourism.webadmin.app.website.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.github.pagehelper.page.PageMethod;
+import com.tourism.common.core.annotation.DisableDataFilter;
+import com.tourism.common.core.object.ResponseResult;
+import com.tourism.common.core.object.TokenData;
+import com.tourism.common.core.util.MyModelUtil;
+import com.tourism.webadmin.app.website.dto.TourTravelNotesTopicByNameDto;
+import com.tourism.webadmin.app.website.dto.TourTravelNotesTopicListByNameDto;
+import com.tourism.webadmin.app.website.dto.TourVisaSearchDto;
+import com.tourism.webadmin.app.website.vo.TourTravelNotesTopicNotesSearchVo;
+import com.tourism.webadmin.app.website.vo.TourTravelNotesTopicSearchVo;
+import com.tourism.webadmin.back.model.TourUser;
+import com.tourism.webadmin.back.model.TourUserLikeTopic;
+import com.tourism.webadmin.back.model.TourismProjectTravelNotesWrite;
+import com.tourism.webadmin.back.service.TourTravelNotesTopicService;
+import com.tourism.webadmin.back.service.TourUserLikeTopicService;
+import com.tourism.webadmin.back.service.TourUserService;
+import com.tourism.webadmin.back.vo.TourUserVo;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author 陈
+ * @date 2024年1月24日 9:00:00
+ */
+@Tag(name = "游记话题")
+@Slf4j
+@RestController
+@RequestMapping("/website/tourism/travelNotesTopic")
+@DisableDataFilter
+public class TourWebTravelNotesTopicController {
+
+
+    @Autowired
+    private TourUserLikeTopicService tourUserLikeTopicService;
+    @Autowired
+    private TourTravelNotesTopicService tourTravelNotesTopicService;
+    @Autowired
+    private TourUserService tourUserService;
+
+    /**
+     * 分页条件查询游记话题,默认根据最热进行排序
+     * @param tourTravelNotesTopicListByNameDto
+     * @return
+     */
+    @GetMapping("/list")
+    public ResponseResult<TourTravelNotesTopicSearchVo> listPage(@Validated TourTravelNotesTopicListByNameDto tourTravelNotesTopicListByNameDto) {
+
+        TourTravelNotesTopicSearchVo tourTravelNotesTopicSearchVo = new TourTravelNotesTopicSearchVo();
+
+        //根据话题名称查询本人是否收藏
+        TourUserLikeTopic tourUserLikeTopic = new TourUserLikeTopic();
+        tourUserLikeTopic.setTourTravelNotesTopicName(tourTravelNotesTopicListByNameDto.getTopicName());
+        tourUserLikeTopic.setTourUserId(TokenData.takeFromRequest().getUserId());
+        if(tourUserLikeTopicService.existByFilter(tourUserLikeTopic)){
+            tourTravelNotesTopicSearchVo.setIsCollect(1);
+        }else {
+            tourTravelNotesTopicSearchVo.setIsCollect(0);
+        }
+        //根据话题名称查询浏览量
+        Integer viewCountTopicByName = tourTravelNotesTopicService.getViewCountTopicByName(tourTravelNotesTopicListByNameDto.getTopicName(),tourTravelNotesTopicListByNameDto.getTitleName());
+        tourTravelNotesTopicSearchVo.setViewCount(viewCountTopicByName);
+        //根据话题名称查询讨论量
+        Integer commentCountTopicByName = tourTravelNotesTopicService.getCommentCountTopicByName(tourTravelNotesTopicListByNameDto.getTopicName(),tourTravelNotesTopicListByNameDto.getTitleName());
+        tourTravelNotesTopicSearchVo.setCommentCount(commentCountTopicByName);
+        //根据话题名称查询帖子数量
+        Integer countTravelNotesByName = tourTravelNotesTopicService.getCountTravelNotesByName(tourTravelNotesTopicListByNameDto.getTopicName(),tourTravelNotesTopicListByNameDto.getTitleName());
+        tourTravelNotesTopicSearchVo.setTravelNotesCount(countTravelNotesByName);
+        //根据话题名称查询游记列表
+
+        PageMethod.startPage(tourTravelNotesTopicListByNameDto.getPageNum(), tourTravelNotesTopicListByNameDto.getPageSize(), true);
+        List<TourismProjectTravelNotesWrite> travelNotesByTopicName = 
+                tourTravelNotesTopicService.getTravelNotesByTopicName(tourTravelNotesTopicListByNameDto.getTopicName(),tourTravelNotesTopicListByNameDto.getOrderBy());
+
+        if(CollectionUtils.isNotEmpty(travelNotesByTopicName)) {
+            List<TourTravelNotesTopicNotesSearchVo> tourTravelNotesTopicNotesSearchVoList =
+                    MyModelUtil.copyCollectionTo(travelNotesByTopicName, TourTravelNotesTopicNotesSearchVo.class);
+
+            //赋值每个游记的创作者昵称和创作者头像
+            List<String> userIdList =
+                    tourTravelNotesTopicNotesSearchVoList.stream().map(TourTravelNotesTopicNotesSearchVo::getCreateUserId).collect(Collectors.toList());
+
+            List<TourUser> tourUserList = tourUserService.getInList("userId", new HashSet<>(userIdList));
+
+            List<TourUserVo> tourUserVoList = MyModelUtil.copyCollectionTo(tourUserList, TourUserVo.class);
+            // 按照 userId 分组
+            Map<String, List<TourUserVo>> userIdGroupedMap = tourUserVoList.stream().collect(Collectors.groupingBy(TourUserVo::getUserId));
+
+            tourTravelNotesTopicNotesSearchVoList.stream().forEach(item->{
+                List<TourUserVo> tourUsers = userIdGroupedMap.get(item.getCreateUserId());
+                item.setCreatedShowName(tourUsers.get(0).getShowName());
+                item.setCreatedHeadImageUrl(tourUsers.get(0).getHeadImageUrl());
+            });
+            tourTravelNotesTopicSearchVo.setTourTravelNotesTopicNotesSearchVoList(tourTravelNotesTopicNotesSearchVoList);
+        }
+
+        return ResponseResult.success(tourTravelNotesTopicSearchVo);
+    }
+
+
+}

+ 7 - 1
application-webadmin/src/main/java/com/tourism/webadmin/app/website/dto/TourTravelNotesTopicListByNameDto.java

@@ -27,7 +27,7 @@ public class TourTravelNotesTopicListByNameDto {
      */
     @Schema(description = "名称。")
     @NotNull(message = "话题名称不能为空,请提供有效的 name 参数")
-    private String name;
+    private String topicName;
 
     /**
      * 排序。不传值或者传0的话,按最热排序;传1的话,则按照最新排序
@@ -35,5 +35,11 @@ public class TourTravelNotesTopicListByNameDto {
     @Schema(description = "排序。")
     private String orderBy;
 
+    /**
+     * 标题名称。模糊查询
+     */
+    @Schema(description = "标题名称。模糊查询")
+    private String titleName;
+
 
 }

+ 4 - 4
application-webadmin/src/main/java/com/tourism/webadmin/app/website/vo/TourTravelNotesTopicNotesSearchVo.java

@@ -17,12 +17,12 @@ public class TourTravelNotesTopicNotesSearchVo {
      * 游记id。
      */
     @Schema(description = "游记id")
-    private String isCollect;
+    private String id;
 
     /**
-     * 是否原创。
+     * 是否原创(0:非原创;1:原创)。
      */
-    @Schema(description = "是否原创")
+    @Schema(description = "是否原创(0:非原创;1:原创)。")
     private Integer isOriginal;
 
     /**
@@ -41,7 +41,7 @@ public class TourTravelNotesTopicNotesSearchVo {
      * 创作者id。
      */
     @Schema(description = "创作者id")
-    private String createdId;
+    private String createUserId;
 
     /**
      * 创作者昵称。

+ 3 - 3
application-webadmin/src/main/java/com/tourism/webadmin/app/website/vo/TourTravelNotesTopicSearchVo.java

@@ -31,19 +31,19 @@ public class TourTravelNotesTopicSearchVo {
      * 话题浏览量。
      */
     @Schema(description = "话题浏览量")
-    private String viewCount;
+    private Integer viewCount;
 
     /**
      * 话题讨论量。
      */
     @Schema(description = "话题讨论量")
-    private String commentCount;
+    private Integer commentCount;
 
     /**
      * 话题帖子数量。
      */
     @Schema(description = "话题帖子数量")
-    private String travelNotesCount;
+    private Integer travelNotesCount;
 
     /**
      * 游记列表

+ 28 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourTravelNotesTopicMapper.java

@@ -2,6 +2,7 @@ package com.tourism.webadmin.back.dao;
 
 import com.tourism.common.core.base.dao.BaseDaoMapper;
 import com.tourism.webadmin.back.model.TourTravelNotesTopic;
+import com.tourism.webadmin.back.model.TourismProjectTravelNotesWrite;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.*;
@@ -31,4 +32,31 @@ public interface TourTravelNotesTopicMapper extends BaseDaoMapper<TourTravelNote
     List<TourTravelNotesTopic> getTourTravelNotesTopicList(
             @Param("tourTravelNotesTopicFilter") TourTravelNotesTopic tourTravelNotesTopicFilter, @Param("orderBy") String orderBy);
 
+    /**
+     * 根据游记话题名称查询话题浏览量
+     *
+     * @return 查询结果集。
+     */
+    Integer getViewCountTopicByName(String name,String titleName);
+
+    /**
+     * 根据游记话题名称查询话题浏览量
+     *
+     * @return 查询结果集。
+     */
+    Integer getCommentCountTopicByName(String name,String titleName);
+
+    /**
+     * 根据游记话题名称查询游记的数量
+     *
+     * @return 查询结果集。
+     */
+    Integer getCountTravelNotesByName(String name,String titleName);
+
+    /**
+     * 根据游记话题名称查询关联的游记id
+     *
+     * @return 查询结果集。
+     */
+    List<TourismProjectTravelNotesWrite> getTravelNotesByTopicName(String name,String orderBy);
 }

+ 68 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourTravelNotesTopicMapper.xml

@@ -74,4 +74,72 @@
         </if>
     </select>
 
+    <select id="getViewCountTopicByName" resultType="Integer" parameterType="String">
+        SELECT
+            SUM(ttn.page_view_count) AS total_page_views
+        FROM
+            tour_travel_notes_topic_relation ttnr
+                JOIN
+            tour_tourism_project_travel_notes_writer ttn
+            ON
+                ttnr.travel_notes_id = ttn.id
+        WHERE
+            ttnr.topic_name = #{name} and ttn.data_state = 1
+        <if test="titleName != null and titleName !=''">
+            and ttn.project_title LIKE CONCAT('%', #{titleName}, '%');
+        </if>
+    </select>
+
+    <select id="getCommentCountTopicByName" resultType="Integer" parameterType="String">
+        SELECT
+            COUNT(tnc.id) AS total_comment_count
+        FROM
+            tour_travel_notes_topic_relation ttnr
+                JOIN
+            tour_tourism_project_travel_notes_writer ttn
+            ON ttnr.travel_notes_id = ttn.id
+                LEFT JOIN
+            tour_travel_notes_comment tnc
+            ON ttn.id = tnc.travel_note_id
+        WHERE
+            ttnr.topic_name = #{name} and ttn.data_state = 1
+        <if test="titleName != null and titleName !=''">
+            and ttn.project_title LIKE CONCAT('%', #{titleName}, '%');
+        </if>
+    </select>
+
+    <select id="getCountTravelNotesByName" resultType="Integer" parameterType="String">
+        SELECT
+            COUNT(DISTINCT ttnr.travel_notes_id) AS travel_note_count
+        FROM
+            tour_travel_notes_topic_relation ttnr
+        left join tour_tourism_project_travel_notes_writer ttn on ttnr.travel_notes_id = ttn.id
+        WHERE
+            ttnr.topic_name = #{name} and ttn.data_state = 1
+        <if test="titleName != null and titleName !=''">
+            and ttn.project_title LIKE CONCAT('%', #{titleName}, '%');
+        </if>
+    </select>
+
+    <select id="getTravelNotesByTopicName" resultType="TourismProjectTravelNotesWrite" parameterType="String">
+        SELECT
+            DISTINCT tttw.*
+        FROM
+            tour_tourism_project_travel_notes_writer tttw
+                JOIN
+            tour_travel_notes_topic_relation ttnr
+            ON
+                tttw.id = ttnr.travel_notes_id
+        WHERE
+            ttnr.topic_name = #{name}
+          AND tttw.state = 3
+          AND tttw.unmount_state = 1
+          AND tttw.data_state = 1
+        <if test="orderBy == null or orderBy == 0">
+            ORDER BY tttw.hot_value DESC
+        </if>
+        <if test="orderBy == 1">
+            ORDER BY tttw.create_time DESC
+        </if>
+    </select>
 </mapper>

+ 28 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourTravelNotesTopicService.java

@@ -65,4 +65,32 @@ public interface TourTravelNotesTopicService extends IBaseService<TourTravelNote
      * @return 查询结果集。
      */
     List<TourTravelNotesTopic> getTourTravelNotesTopicListWithRelation(TourTravelNotesTopic filter, String orderBy);
+
+    /**
+     * 根据游记话题名称查询话题浏览量
+     *
+     * @return 查询结果集。
+     */
+    Integer getViewCountTopicByName(String name,String titleName);
+
+    /**
+     * 根据游记话题名称查询话题评论数
+     *
+     * @return 查询结果集。
+     */
+    Integer getCommentCountTopicByName(String name,String titleName);
+
+    /**
+     * 根据话题名称查询游记数量
+     *
+     * @return 查询结果集。
+     */
+    Integer getCountTravelNotesByName(String name,String titleName);
+
+    /**
+     * 根据游记话题名称查询关联的游记id
+     *
+     * @return 查询结果集。
+     */
+    List<TourismProjectTravelNotesWrite> getTravelNotesByTopicName(String name,String orderBy);
 }

+ 40 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourTravelNotesTopicServiceImpl.java

@@ -98,4 +98,44 @@ public class TourTravelNotesTopicServiceImpl extends BaseService<TourTravelNotes
         tourTravelNotesTopic.setDataState(GlobalDeletedFlag.NORMAL);
         return tourTravelNotesTopic;
     }
+
+    /**
+     * 根据游记话题名称查询话题浏览量
+     *
+     * @return 查询结果集。
+     */
+    @Override
+    public Integer getViewCountTopicByName(String name,String titleName){
+        return tourTravelNotesTopicMapper.getViewCountTopicByName(name,titleName);
+    }
+
+    /**
+     * 根据游记话题名称查询话题浏览量
+     *
+     * @return 查询结果集。
+     */
+    @Override
+    public Integer getCommentCountTopicByName(String name,String titleName){
+        return tourTravelNotesTopicMapper.getCommentCountTopicByName(name,titleName);
+    }
+
+    /**
+     * 根据游记话题名称查询话题浏览量
+     *
+     * @return 查询结果集。
+     */
+    @Override
+    public Integer getCountTravelNotesByName(String name,String titleName){
+        return tourTravelNotesTopicMapper.getCountTravelNotesByName(name,titleName);
+    }
+
+    /**
+     * 根据游记话题名称查询关联的游记id
+     *
+     * @return 查询结果集。
+     */
+    @Override
+    public List<TourismProjectTravelNotesWrite> getTravelNotesByTopicName(String name,String orderBy){
+        return tourTravelNotesTopicMapper.getTravelNotesByTopicName(name,orderBy);
+    }
 }