浏览代码

[fix]
完善本次改版后的游记内容的数据表结构

chenchen 1 月之前
父节点
当前提交
92b84f6535
共有 12 个文件被更改,包括 601 次插入12 次删除
  1. 0 5
      application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/TourWebTravelNotesTopicController.java
  2. 179 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourTourismProjectTravelNotesWriteContentController.java
  3. 34 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourTourismProjectTravelNotesWriteContentMapper.java
  4. 8 7
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourFansMapper.xml
  5. 63 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourTourismProjectTravelNotesWriteContentMapper.xml
  6. 40 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourTourismProjectTravelNotesWriteContentDto.java
  7. 43 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourTourismProjectTravelNotesWriteContent.java
  8. 7 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourismProjectTravelNotesWrite.java
  9. 76 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourTourismProjectTravelNotesWriteContentService.java
  10. 106 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourTourismProjectTravelNotesWriteContentServiceImpl.java
  11. 36 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourTourismProjectTravelNotesWriteContentVo.java
  12. 9 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourismProjectTravelNotesWriteVo.java

+ 0 - 5
application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/TourWebTravelNotesTopicController.java

@@ -1,14 +1,11 @@
 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;
@@ -26,8 +23,6 @@ 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;

+ 179 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourTourismProjectTravelNotesWriteContentController.java

@@ -0,0 +1,179 @@
+package com.tourism.webadmin.back.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.tourism.common.log.annotation.OperationLog;
+import com.tourism.common.log.model.constant.SysOperationLogType;
+import com.github.pagehelper.page.PageMethod;
+import com.tourism.webadmin.back.vo.*;
+import com.tourism.webadmin.back.dto.*;
+import com.tourism.webadmin.back.model.*;
+import com.tourism.webadmin.back.service.*;
+import com.tourism.common.core.object.*;
+import com.tourism.common.core.util.*;
+import com.tourism.common.core.constant.*;
+import com.tourism.common.core.annotation.MyRequestBody;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+/**
+ * 游记内容表操作控制器类。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Tag(name = "游记内容表管理接口")
+@Slf4j
+@RestController
+@RequestMapping("/admin/app/tourTourismProjectTravelNotesWriteContent")
+public class TourTourismProjectTravelNotesWriteContentController {
+
+    @Autowired
+    private TourTourismProjectTravelNotesWriteContentService tourTourismProjectTravelNotesWriteContentService;
+
+    /**
+     * 新增游记内容表数据。
+     *
+     * @param tourTourismProjectTravelNotesWriteContentDto 新增对象。
+     * @return 应答结果对象,包含新增对象主键Id。
+     */
+    @ApiOperationSupport(ignoreParameters = {"tourTourismProjectTravelNotesWriteContentDto.id"})
+    @SaCheckPermission("tourTourismProjectTravelNotesWriteContent.add")
+    @OperationLog(type = SysOperationLogType.ADD)
+    @PostMapping("/add")
+    public ResponseResult<Long> add(@MyRequestBody TourTourismProjectTravelNotesWriteContentDto tourTourismProjectTravelNotesWriteContentDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourTourismProjectTravelNotesWriteContentDto, false);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent = MyModelUtil.copyTo(tourTourismProjectTravelNotesWriteContentDto, TourTourismProjectTravelNotesWriteContent.class);
+        tourTourismProjectTravelNotesWriteContent = tourTourismProjectTravelNotesWriteContentService.saveNew(tourTourismProjectTravelNotesWriteContent);
+        return ResponseResult.success(tourTourismProjectTravelNotesWriteContent.getId());
+    }
+
+    /**
+     * 更新游记内容表数据。
+     *
+     * @param tourTourismProjectTravelNotesWriteContentDto 更新对象。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourTourismProjectTravelNotesWriteContent.update")
+    @OperationLog(type = SysOperationLogType.UPDATE)
+    @PostMapping("/update")
+    public ResponseResult<Void> update(@MyRequestBody TourTourismProjectTravelNotesWriteContentDto tourTourismProjectTravelNotesWriteContentDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourTourismProjectTravelNotesWriteContentDto, true);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent = MyModelUtil.copyTo(tourTourismProjectTravelNotesWriteContentDto, TourTourismProjectTravelNotesWriteContent.class);
+        TourTourismProjectTravelNotesWriteContent originalTourTourismProjectTravelNotesWriteContent = tourTourismProjectTravelNotesWriteContentService.getById(tourTourismProjectTravelNotesWriteContent.getId());
+        if (originalTourTourismProjectTravelNotesWriteContent == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        if (!tourTourismProjectTravelNotesWriteContentService.update(tourTourismProjectTravelNotesWriteContent, originalTourTourismProjectTravelNotesWriteContent)) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        return ResponseResult.success();
+    }
+
+    /**
+     * 删除游记内容表数据。
+     *
+     * @param id 删除对象主键Id。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourTourismProjectTravelNotesWriteContent.delete")
+    @OperationLog(type = SysOperationLogType.DELETE)
+    @PostMapping("/delete")
+    public ResponseResult<Void> delete(@MyRequestBody Long id) {
+        if (MyCommonUtil.existBlankArgument(id)) {
+            return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
+        }
+        return this.doDelete(id);
+    }
+
+    /**
+     * 批量删除游记内容表数据。
+     *
+     * @param idList 待删除对象的主键Id列表。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourTourismProjectTravelNotesWriteContent.delete")
+    @OperationLog(type = SysOperationLogType.DELETE_BATCH)
+    @PostMapping("/deleteBatch")
+    public ResponseResult<Void> deleteBatch(@MyRequestBody List<Long> idList) {
+        if (MyCommonUtil.existBlankArgument(idList)) {
+            return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
+        }
+        for (Long id : idList) {
+            ResponseResult<Void> responseResult = this.doDelete(id);
+            if (!responseResult.isSuccess()) {
+                return responseResult;
+            }
+        }
+        return ResponseResult.success();
+    }
+
+    /**
+     * 列出符合过滤条件的游记内容表列表。
+     *
+     * @param tourTourismProjectTravelNotesWriteContentDtoFilter 过滤对象。
+     * @param orderParam 排序参数。
+     * @param pageParam 分页参数。
+     * @return 应答结果对象,包含查询结果集。
+     */
+    @SaCheckPermission("tourTourismProjectTravelNotesWriteContent.view")
+    @PostMapping("/list")
+    public ResponseResult<MyPageData<TourTourismProjectTravelNotesWriteContentVo>> list(
+            @MyRequestBody TourTourismProjectTravelNotesWriteContentDto tourTourismProjectTravelNotesWriteContentDtoFilter,
+            @MyRequestBody MyOrderParam orderParam,
+            @MyRequestBody MyPageParam pageParam) {
+        if (pageParam != null) {
+            PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize(), pageParam.getCount());
+        }
+        TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContentFilter = MyModelUtil.copyTo(tourTourismProjectTravelNotesWriteContentDtoFilter, TourTourismProjectTravelNotesWriteContent.class);
+        String orderBy = MyOrderParam.buildOrderBy(orderParam, TourTourismProjectTravelNotesWriteContent.class);
+        List<TourTourismProjectTravelNotesWriteContent> tourTourismProjectTravelNotesWriteContentList =
+                tourTourismProjectTravelNotesWriteContentService.getTourTourismProjectTravelNotesWriteContentListWithRelation(tourTourismProjectTravelNotesWriteContentFilter, orderBy);
+        return ResponseResult.success(MyPageUtil.makeResponseData(tourTourismProjectTravelNotesWriteContentList, TourTourismProjectTravelNotesWriteContentVo.class));
+    }
+
+    /**
+     * 查看指定游记内容表对象详情。
+     *
+     * @param id 指定对象主键Id。
+     * @return 应答结果对象,包含对象详情。
+     */
+    @SaCheckPermission("tourTourismProjectTravelNotesWriteContent.view")
+    @GetMapping("/view")
+    public ResponseResult<TourTourismProjectTravelNotesWriteContentVo> view(@RequestParam Long id) {
+        TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent = tourTourismProjectTravelNotesWriteContentService.getByIdWithRelation(id, MyRelationParam.full());
+        if (tourTourismProjectTravelNotesWriteContent == null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        TourTourismProjectTravelNotesWriteContentVo tourTourismProjectTravelNotesWriteContentVo = MyModelUtil.copyTo(tourTourismProjectTravelNotesWriteContent, TourTourismProjectTravelNotesWriteContentVo.class);
+        return ResponseResult.success(tourTourismProjectTravelNotesWriteContentVo);
+    }
+
+    private ResponseResult<Void> doDelete(Long id) {
+        String errorMessage;
+        // 验证关联Id的数据合法性
+        TourTourismProjectTravelNotesWriteContent originalTourTourismProjectTravelNotesWriteContent = tourTourismProjectTravelNotesWriteContentService.getById(id);
+        if (originalTourTourismProjectTravelNotesWriteContent == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        if (!tourTourismProjectTravelNotesWriteContentService.remove(id)) {
+            errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        return ResponseResult.success();
+    }
+}

+ 34 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourTourismProjectTravelNotesWriteContentMapper.java

@@ -0,0 +1,34 @@
+package com.tourism.webadmin.back.dao;
+
+import com.tourism.common.core.base.dao.BaseDaoMapper;
+import com.tourism.webadmin.back.model.TourTourismProjectTravelNotesWriteContent;
+import com.tourism.webadmin.back.model.TourismTravelNotesContentWrite;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 发布游记的文本框数据操作访问接口。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+public interface TourTourismProjectTravelNotesWriteContentMapper extends BaseDaoMapper<TourTourismProjectTravelNotesWriteContent> {
+
+    /**
+     * 批量插入对象列表。
+     *
+     * @param tourTourismProjectTravelNotesWriteContentList 新增对象列表。
+     */
+    void insertList(List<TourTourismProjectTravelNotesWriteContent> tourTourismProjectTravelNotesWriteContentList);
+
+    /**
+     * 获取过滤后的对象列表。
+     *
+     * @param tourTourismProjectTravelNotesWriteContentFilter 主表过滤对象。
+     * @param orderBy 排序字符串,order by从句的参数。
+     * @return 对象列表。
+     */
+    List<TourTourismProjectTravelNotesWriteContent> getTourTourismProjectTravelNotesWriteContentList(
+            @Param("tourTourismProjectTravelNotesWriteContentFilter") TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContentFilter, @Param("orderBy") String orderBy);
+}

+ 8 - 7
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourFansMapper.xml

@@ -65,13 +65,14 @@
         SELECT user.user_id, user.show_name, user.head_image_url
         FROM tour_user AS user
         WHERE user.user_id IN (
-        SELECT DISTINCT tf1.attention_id
-        FROM tour_fans tf1
-        INNER JOIN tour_fans tf2 ON tf1.create_user_id = tf2.attention_id
-        WHERE tf1.create_user_id = #{userId}
-        AND tf2.attention_id = #{userId}
-        AND tf1.delete_flag = 1
-        AND tf2.delete_flag = 1
+        SELECT f1.attention_id AS mutual_follow_user_id
+        FROM tour_fans f1
+        JOIN tour_fans f2
+        ON f1.attention_id = f2.create_user_id
+        AND f1.create_user_id = f2.attention_id
+        WHERE f1.create_user_id = #{userId}
+        AND f1.delete_flag = 1
+        AND f2.delete_flag = 1
         )
         <if test="name != null and name != ''">
             AND user.show_name LIKE CONCAT('%', #{name}, '%')

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

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tourism.webadmin.back.dao.TourTourismProjectTravelNotesWriteContentMapper">
+    <resultMap id="BaseResultMap" type="com.tourism.webadmin.back.model.TourTourismProjectTravelNotesWriteContent">
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="association_id" jdbcType="BIGINT" property="associationId"/>
+        <result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="data_state" jdbcType="TINYINT" property="dataState"/>
+        <result column="content" jdbcType="LONGVARCHAR" property="content"/>
+    </resultMap>
+
+    <insert id="insertList">
+        INSERT INTO tour_tourism_project_travel_notes_writer_content
+            (id,
+            association_id,
+            create_user_id,
+            create_time,
+            update_user_id,
+            update_time,
+            data_state,
+            content)
+        VALUES
+        <foreach collection="list" index="index" item="item" separator="," >
+            (#{item.id},
+            #{item.associationId},
+            #{item.createUserId},
+            #{item.createTime},
+            #{item.updateUserId},
+            #{item.updateTime},
+            #{item.dataState},
+            #{item.content})
+        </foreach>
+    </insert>
+
+    <!-- 如果有逻辑删除字段过滤,请写到这里 -->
+    <sql id="filterRef">
+        <!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
+        <include refid="com.tourism.webadmin.back.dao.TourTourismProjectTravelNotesWriteContentMapper.inputFilterRef"/>
+        AND tour_tourism_project_travel_notes_writer_content.data_state = ${@com.tourism.common.core.constant.GlobalDeletedFlag@NORMAL}
+    </sql>
+
+    <!-- 这里仅包含调用接口输入的主表过滤条件 -->
+    <sql id="inputFilterRef">
+        <if test="tourTourismProjectTravelNotesWriteContentFilter != null">
+            <if test="tourTourismProjectTravelNotesWriteContentFilter.associationId != null">
+                AND tour_tourism_project_travel_notes_writer_content.association_id = #{tourTourismProjectTravelNotesWriteContentFilter.associationId}
+            </if>
+        </if>
+    </sql>
+
+    <select id="getTourTourismProjectTravelNotesWriteContentList" resultMap="BaseResultMap" parameterType="com.tourism.webadmin.back.model.TourTourismProjectTravelNotesWriteContent">
+        SELECT * FROM tour_tourism_project_travel_notes_writer_content
+        <where>
+            <include refid="filterRef"/>
+        </where>
+        <if test="orderBy != null and orderBy != ''">
+            ORDER BY ${orderBy}
+        </if>
+    </select>
+</mapper>

+ 40 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourTourismProjectTravelNotesWriteContentDto.java

@@ -0,0 +1,40 @@
+package com.tourism.webadmin.back.dto;
+
+import com.tourism.common.core.validator.UpdateGroup;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import jakarta.validation.constraints.*;
+
+/**
+ * 游记内容表Dto对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Schema(description = "游记内容表Dto对象")
+@Data
+public class TourTourismProjectTravelNotesWriteContentDto {
+
+    /**
+     * 主键id。
+     */
+    @Schema(description = "主键id。", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "数据验证失败,主键id不能为空!", groups = {UpdateGroup.class})
+    private Long id;
+
+    /**
+     * 关联表id。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "关联表id。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "数据验证失败,关联表id不能为空!", groups = {UpdateGroup.class})
+    private Long associationId;
+
+    /**
+     * 内容。
+     */
+    @Schema(description = "内容。")
+    private String content;
+}

+ 43 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourTourismProjectTravelNotesWriteContent.java

@@ -0,0 +1,43 @@
+package com.tourism.webadmin.back.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.tourism.common.core.base.model.BaseModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 游记内容表实体对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "tour_tourism_project_travel_notes_writer_content")
+public class TourTourismProjectTravelNotesWriteContent extends BaseModel {
+
+    /**
+     * 主键id。
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 关联表id。
+     */
+    @TableField(value = "association_id")
+    private Long associationId;
+
+    /**
+     * 逻辑删除标记字段(1: 正常 -1: 已删除)。
+     */
+    @TableLogic
+    @TableField(value = "data_state")
+    private Integer dataState;
+
+    /**
+     * 内容。
+     */
+    @TableField(value = "content")
+    private String content;
+}

+ 7 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourismProjectTravelNotesWrite.java

@@ -296,4 +296,11 @@ public class TourismProjectTravelNotesWrite extends BaseModel {
      */
     @TableField(exist = false)
     private String tourTravelNotesTopicRelationName;
+
+    @RelationOneToOne(
+            masterIdField = "id",
+            slaveModelClass = TourTourismProjectTravelNotesWriteContent.class,
+            slaveIdField = "associationId")
+    @TableField(exist = false)
+    private TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent;
 }

+ 76 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourTourismProjectTravelNotesWriteContentService.java

@@ -0,0 +1,76 @@
+package com.tourism.webadmin.back.service;
+
+import com.tourism.webadmin.back.model.*;
+import com.tourism.common.core.base.service.IBaseService;
+
+import java.util.*;
+
+/**
+ * 游记内容表数据操作服务接口。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+public interface TourTourismProjectTravelNotesWriteContentService extends IBaseService<TourTourismProjectTravelNotesWriteContent, Long> {
+
+    /**
+     * 保存新增对象。
+     *
+     * @param tourTourismProjectTravelNotesWriteContent 新增对象。
+     * @return 返回新增对象。
+     */
+    TourTourismProjectTravelNotesWriteContent saveNew(TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent);
+
+    /**
+     * 利用数据库的insertList语法,批量插入对象列表。
+     *
+     * @param tourTourismProjectTravelNotesWriteContentList 新增对象列表。
+     */
+    void saveNewBatch(List<TourTourismProjectTravelNotesWriteContent> tourTourismProjectTravelNotesWriteContentList);
+
+    /**
+     * 更新数据对象。
+     *
+     * @param tourTourismProjectTravelNotesWriteContent         更新的对象。
+     * @param originalTourTourismProjectTravelNotesWriteContent 原有数据对象。
+     * @return 成功返回true,否则false。
+     */
+    boolean update(TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent, TourTourismProjectTravelNotesWriteContent originalTourTourismProjectTravelNotesWriteContent);
+
+    /**
+     * 删除指定数据。
+     *
+     * @param id 主键Id。
+     * @return 成功返回true,否则false。
+     */
+    boolean remove(Long id);
+
+    /**
+     * 当前服务的支持表为从表,根据主表的关联Id,删除一对多的从表数据。
+     *
+     * @param associationId 从表关联字段。
+     * @return 删除数量。
+     */
+    int removeByAssociationId(Long associationId);
+
+    /**
+     * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
+     * 如果需要同时获取关联数据,请移步(getTourTourismProjectTravelNotesWriteContentListWithRelation)方法。
+     *
+     * @param filter  过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourTourismProjectTravelNotesWriteContent> getTourTourismProjectTravelNotesWriteContentList(TourTourismProjectTravelNotesWriteContent filter, String orderBy);
+
+    /**
+     * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
+     * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
+     * 如果仅仅需要获取主表数据,请移步(getTourTourismProjectTravelNotesWriteContentList),以便获取更好的查询性能。
+     *
+     * @param filter 主表过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourTourismProjectTravelNotesWriteContent> getTourTourismProjectTravelNotesWriteContentListWithRelation(TourTourismProjectTravelNotesWriteContent filter, String orderBy);
+}

+ 106 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourTourismProjectTravelNotesWriteContentServiceImpl.java

@@ -0,0 +1,106 @@
+package com.tourism.webadmin.back.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.*;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.tourism.webadmin.back.service.*;
+import com.tourism.webadmin.back.dao.*;
+import com.tourism.webadmin.back.model.*;
+import com.tourism.webadmin.config.DataSourceType;
+import com.tourism.common.core.annotation.MyDataSource;
+import com.tourism.common.core.base.dao.BaseDaoMapper;
+import com.tourism.common.core.constant.GlobalDeletedFlag;
+import com.tourism.common.core.object.MyRelationParam;
+import com.tourism.common.core.base.service.BaseService;
+import com.tourism.common.core.util.MyModelUtil;
+import com.github.pagehelper.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 游记内容表数据操作服务类。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Slf4j
+@Service("tourTourismProjectTravelNotesWriteContentService")
+public class TourTourismProjectTravelNotesWriteContentServiceImpl extends BaseService<TourTourismProjectTravelNotesWriteContent, Long> implements TourTourismProjectTravelNotesWriteContentService {
+
+    @Autowired
+    private TourTourismProjectTravelNotesWriteContentMapper tourTourismProjectTravelNotesWriteContentMapper;
+
+    /**
+     * 返回当前Service的主表Mapper对象。
+     *
+     * @return 主表Mapper对象。
+     */
+    @Override
+    protected BaseDaoMapper<TourTourismProjectTravelNotesWriteContent> mapper() {
+        return tourTourismProjectTravelNotesWriteContentMapper;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public TourTourismProjectTravelNotesWriteContent saveNew(TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent) {
+        tourTourismProjectTravelNotesWriteContentMapper.insert(this.buildDefaultValue(tourTourismProjectTravelNotesWriteContent));
+        return tourTourismProjectTravelNotesWriteContent;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void saveNewBatch(List<TourTourismProjectTravelNotesWriteContent> tourTourismProjectTravelNotesWriteContentList) {
+        if (CollUtil.isNotEmpty(tourTourismProjectTravelNotesWriteContentList)) {
+            tourTourismProjectTravelNotesWriteContentList.forEach(this::buildDefaultValue);
+            tourTourismProjectTravelNotesWriteContentMapper.insertList(tourTourismProjectTravelNotesWriteContentList);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean update(TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent, TourTourismProjectTravelNotesWriteContent originalTourTourismProjectTravelNotesWriteContent) {
+        MyModelUtil.fillCommonsForUpdate(tourTourismProjectTravelNotesWriteContent, originalTourTourismProjectTravelNotesWriteContent);
+        // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
+        UpdateWrapper<TourTourismProjectTravelNotesWriteContent> uw = this.createUpdateQueryForNullValue(tourTourismProjectTravelNotesWriteContent, tourTourismProjectTravelNotesWriteContent.getId());
+        return tourTourismProjectTravelNotesWriteContentMapper.update(tourTourismProjectTravelNotesWriteContent, uw) == 1;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean remove(Long id) {
+        return tourTourismProjectTravelNotesWriteContentMapper.deleteById(id) == 1;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public int removeByAssociationId(Long associationId) {
+        TourTourismProjectTravelNotesWriteContent deletedObject = new TourTourismProjectTravelNotesWriteContent();
+        deletedObject.setAssociationId(associationId);
+        return tourTourismProjectTravelNotesWriteContentMapper.delete(new QueryWrapper<>(deletedObject));
+    }
+
+    @Override
+    public List<TourTourismProjectTravelNotesWriteContent> getTourTourismProjectTravelNotesWriteContentList(TourTourismProjectTravelNotesWriteContent filter, String orderBy) {
+        return tourTourismProjectTravelNotesWriteContentMapper.getTourTourismProjectTravelNotesWriteContentList(filter, orderBy);
+    }
+
+    @Override
+    public List<TourTourismProjectTravelNotesWriteContent> getTourTourismProjectTravelNotesWriteContentListWithRelation(TourTourismProjectTravelNotesWriteContent filter, String orderBy) {
+        List<TourTourismProjectTravelNotesWriteContent> resultList = tourTourismProjectTravelNotesWriteContentMapper.getTourTourismProjectTravelNotesWriteContentList(filter, orderBy);
+        // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
+        // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
+        int batchSize = resultList instanceof Page ? 0 : 1000;
+        this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
+        return resultList;
+    }
+
+    private TourTourismProjectTravelNotesWriteContent buildDefaultValue(TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent) {
+        MyModelUtil.fillCommonsForInsert(tourTourismProjectTravelNotesWriteContent);
+        tourTourismProjectTravelNotesWriteContent.setDataState(GlobalDeletedFlag.NORMAL);
+        return tourTourismProjectTravelNotesWriteContent;
+    }
+}

+ 36 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourTourismProjectTravelNotesWriteContentVo.java

@@ -0,0 +1,36 @@
+package com.tourism.webadmin.back.vo;
+
+import com.tourism.common.core.base.vo.BaseVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 游记内容表VO视图对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Schema(description = "游记内容表VO视图对象")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TourTourismProjectTravelNotesWriteContentVo extends BaseVo {
+
+    /**
+     * 主键id。
+     */
+    @Schema(description = "主键id")
+    private Long id;
+
+    /**
+     * 关联表id。
+     */
+    @Schema(description = "关联表id")
+    private Long associationId;
+
+    /**
+     * 内容。
+     */
+    @Schema(description = "内容")
+    private String content;
+}

+ 9 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourismProjectTravelNotesWriteVo.java

@@ -1,8 +1,11 @@
 package com.tourism.webadmin.back.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.tourism.common.core.annotation.RelationOneToOne;
 import com.tourism.common.core.base.vo.BaseVo;
 import com.tourism.webadmin.back.dto.TourTravelNotesMentionUserDto;
 import com.tourism.webadmin.back.model.TourImGroup;
+import com.tourism.webadmin.back.model.TourTourismProjectTravelNotesWriteContent;
 import com.tourism.webadmin.back.model.TourTravelNotesTopicRelation;
 import com.tourism.webadmin.back.model.TourismTravelNotesContentWrite;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -276,4 +279,10 @@ public class TourismProjectTravelNotesWriteVo extends BaseVo {
      */
     @Schema(description = "游记内容提及的用户信息。")
     private List<TourTravelNotesMentionUserVo> mentions;
+
+    /**
+     * id 的一对一关联数据对象,数据对应类型为TourTourismProjectTravelNotesWriteContentVo。
+     */
+    @Schema(description = "id 的一对一关联数据对象,数据对应类型为TourTourismProjectTravelNotesWriteContentVo")
+    private Map<String, Object> tourTourismProjectTravelNotesWriteContent;
 }