单独添加关键词查询记录页面后台相关数据文件

This commit is contained in:
仙风道骨小半仙儿 2025-03-25 23:02:13 +08:00
parent 46cdafd779
commit 51d2ad3243
9 changed files with 512 additions and 1 deletions

View File

@ -4,7 +4,7 @@ public interface ErrorCodeConstants {
// ========== 高德关键字搜索记录 1-050-000-000 ==========
// ========== 高德关键字搜索记录 TODO 补充编号 ==========
ErrorCode KEYWORD_SEARCH_NOT_EXISTS = new ErrorCode(1_050_001_000, "高德关键字搜索记录不存在");
ErrorCode KEYWORD_SEARCH_NOT_EXISTS = new ErrorCode(1_050_001_000, "搜索记录不存在");
ErrorCode POIS_NOT_EXISTS = new ErrorCode(1_050_002_000, "高德POI基础信息不存在");
}

View File

@ -0,0 +1,95 @@
package cn.iocoder.yudao.module.map.controller.admin.keywordsearch;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.*;
import jakarta.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.map.controller.admin.keywordsearch.vo.*;
import cn.iocoder.yudao.module.map.dal.dataobject.keywordsearch.KeywordSearchDO;
import cn.iocoder.yudao.module.map.service.keywordsearch.KeywordSearchService;
@Tag(name = "管理后台 - 搜索记录")
@RestController
@RequestMapping("/map/keyword-search")
@Validated
public class KeywordSearchController {
@Resource
private KeywordSearchService keywordSearchService;
@PostMapping("/create")
@Operation(summary = "创建搜索记录")
@PreAuthorize("@ss.hasPermission('map:keyword-search:create')")
public CommonResult<Long> createKeywordSearch(@Valid @RequestBody KeywordSearchSaveReqVO createReqVO) {
return success(keywordSearchService.createKeywordSearch(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新搜索记录")
@PreAuthorize("@ss.hasPermission('map:keyword-search:update')")
public CommonResult<Boolean> updateKeywordSearch(@Valid @RequestBody KeywordSearchSaveReqVO updateReqVO) {
keywordSearchService.updateKeywordSearch(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除搜索记录")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('map:keyword-search:delete')")
public CommonResult<Boolean> deleteKeywordSearch(@RequestParam("id") Long id) {
keywordSearchService.deleteKeywordSearch(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得搜索记录")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('map:keyword-search:query')")
public CommonResult<KeywordSearchRespVO> getKeywordSearch(@RequestParam("id") Long id) {
KeywordSearchDO keywordSearch = keywordSearchService.getKeywordSearch(id);
return success(BeanUtils.toBean(keywordSearch, KeywordSearchRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得搜索记录分页")
@PreAuthorize("@ss.hasPermission('map:keyword-search:query')")
public CommonResult<PageResult<KeywordSearchRespVO>> getKeywordSearchPage(@Valid KeywordSearchPageReqVO pageReqVO) {
PageResult<KeywordSearchDO> pageResult = keywordSearchService.getKeywordSearchPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, KeywordSearchRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出搜索记录 Excel")
@PreAuthorize("@ss.hasPermission('map:keyword-search:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportKeywordSearchExcel(@Valid KeywordSearchPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<KeywordSearchDO> list = keywordSearchService.getKeywordSearchPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "搜索记录.xls", "数据", KeywordSearchRespVO.class,
BeanUtils.toBean(list, KeywordSearchRespVO.class));
}
}

View File

@ -0,0 +1,54 @@
package cn.iocoder.yudao.module.map.controller.admin.keywordsearch.vo;
import lombok.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 搜索记录分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class KeywordSearchPageReqVO extends PageParam {
@Schema(description = "描述", example = "描述")
private String description;
@Schema(description = "状态1成功0失败", example = "1")
private String status;
@Schema(description = "状态描述")
private String info;
@Schema(description = "错误码")
private String infocode;
@Schema(description = "返回POI数量", example = "9210")
private Integer count;
@Schema(description = "搜索关键字")
private String keywords;
@Schema(description = "地点类型key二选一对应分类表,|分隔)", example = "120000")
private String types;
@Schema(description = "搜索区域")
private String region;
@Schema(description = "城市限制0否1是", example = "0")
private Boolean cityLimit;
@Schema(description = "每页大小25", example = "25")
private Integer pageSize;
@Schema(description = "页码1-100", example = "1")
private Integer pageNum;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,66 @@
package cn.iocoder.yudao.module.map.controller.admin.keywordsearch.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 搜索记录 Response VO")
@Data
@ExcelIgnoreUnannotated
public class KeywordSearchRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4769")
@ExcelProperty("编号")
private Long id;
@Schema(description = "描述", example = "描述")
@ExcelProperty("描述")
private String description;
@Schema(description = "状态1成功0失败", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("状态1成功0失败")
private String status;
@Schema(description = "状态描述", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("状态描述")
private String info;
@Schema(description = "错误码", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("错误码")
private String infocode;
@Schema(description = "返回POI数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "9210")
@ExcelProperty("返回POI数量")
private Integer count;
@Schema(description = "搜索关键字", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("搜索关键字")
private String keywords;
@Schema(description = "地点类型key二选一对应分类表,|分隔)", requiredMode = Schema.RequiredMode.REQUIRED, example = "120000")
@ExcelProperty("地点类型key二选一对应分类表,|分隔)")
private String types;
@Schema(description = "搜索区域", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("搜索区域")
private String region;
@Schema(description = "城市限制0否1是", example = "0")
@ExcelProperty("城市限制0否1是")
private Boolean cityLimit;
@Schema(description = "每页大小25", example = "25")
@ExcelProperty("每页大小25")
private Integer pageSize;
@Schema(description = "页码1-100", example = "1")
@ExcelProperty("页码1-100")
private Integer pageNum;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,54 @@
package cn.iocoder.yudao.module.map.controller.admin.keywordsearch.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import jakarta.validation.constraints.*;
@Schema(description = "管理后台 - 搜索记录新增/修改 Request VO")
@Data
public class KeywordSearchSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4769")
private Long id;
@Schema(description = "描述", example = "描述")
private String description;
@Schema(description = "状态1成功0失败", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotEmpty(message = "状态1成功0失败不能为空")
private String status;
@Schema(description = "状态描述", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "状态描述不能为空")
private String info;
@Schema(description = "错误码", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "错误码不能为空")
private String infocode;
@Schema(description = "返回POI数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "9210")
@NotNull(message = "返回POI数量不能为空")
private Integer count;
@Schema(description = "搜索关键字", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "搜索关键字不能为空")
private String keywords;
@Schema(description = "地点类型key二选一对应分类表,|分隔)", requiredMode = Schema.RequiredMode.REQUIRED, example = "120000")
@NotEmpty(message = "地点类型key二选一对应分类表,|分隔)不能为空")
private String types;
@Schema(description = "搜索区域", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "搜索区域不能为空")
private String region;
@Schema(description = "城市限制0否1是", example = "0")
private Boolean cityLimit;
@Schema(description = "每页大小25", example = "25")
private Integer pageSize;
@Schema(description = "页码1-100", example = "1")
private Integer pageNum;
}

View File

@ -0,0 +1,73 @@
package cn.iocoder.yudao.module.map.dal.dataobject.keywordsearch;
import lombok.*;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 搜索记录 DO
*
* @author AN
*/
@TableName("map_keyword_search")
@KeySequence("map_keyword_search_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class KeywordSearchDO extends BaseDO {
/**
* 编号
*/
@TableId
private Long id;
/**
* 描述
*/
private String description;
/**
* 状态1成功0失败
*/
private String status;
/**
* 状态描述
*/
private String info;
/**
* 错误码
*/
private String infocode;
/**
* 返回POI数量
*/
private Integer count;
/**
* 搜索关键字
*/
private String keywords;
/**
* 地点类型key二选一对应分类表,|分隔
*/
private String types;
/**
* 搜索区域
*/
private String region;
/**
* 城市限制0否1是
*/
private Boolean cityLimit;
/**
* 每页大小25
*/
private Integer pageSize;
/**
* 页码1-100
*/
private Integer pageNum;
}

View File

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.map.dal.mysql.keywordsearch;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.map.dal.dataobject.keywordsearch.KeywordSearchDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.map.controller.admin.keywordsearch.vo.*;
/**
* 搜索记录 Mapper
*
* @author AN
*/
@Mapper
public interface KeywordSearchMapper extends BaseMapperX<KeywordSearchDO> {
default PageResult<KeywordSearchDO> selectPage(KeywordSearchPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<KeywordSearchDO>()
.eqIfPresent(KeywordSearchDO::getDescription, reqVO.getDescription())
.eqIfPresent(KeywordSearchDO::getStatus, reqVO.getStatus())
.eqIfPresent(KeywordSearchDO::getInfo, reqVO.getInfo())
.eqIfPresent(KeywordSearchDO::getInfocode, reqVO.getInfocode())
.eqIfPresent(KeywordSearchDO::getCount, reqVO.getCount())
.eqIfPresent(KeywordSearchDO::getKeywords, reqVO.getKeywords())
.eqIfPresent(KeywordSearchDO::getTypes, reqVO.getTypes())
.eqIfPresent(KeywordSearchDO::getRegion, reqVO.getRegion())
.eqIfPresent(KeywordSearchDO::getCityLimit, reqVO.getCityLimit())
.eqIfPresent(KeywordSearchDO::getPageSize, reqVO.getPageSize())
.eqIfPresent(KeywordSearchDO::getPageNum, reqVO.getPageNum())
.betweenIfPresent(KeywordSearchDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(KeywordSearchDO::getId));
}
}

View File

@ -0,0 +1,53 @@
package cn.iocoder.yudao.module.map.service.keywordsearch;
import jakarta.validation.*;
import cn.iocoder.yudao.module.map.controller.admin.keywordsearch.vo.*;
import cn.iocoder.yudao.module.map.dal.dataobject.keywordsearch.KeywordSearchDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
/**
* 搜索记录 Service 接口
*
* @author AN
*/
public interface KeywordSearchService {
/**
* 创建搜索记录
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createKeywordSearch(@Valid KeywordSearchSaveReqVO createReqVO);
/**
* 更新搜索记录
*
* @param updateReqVO 更新信息
*/
void updateKeywordSearch(@Valid KeywordSearchSaveReqVO updateReqVO);
/**
* 删除搜索记录
*
* @param id 编号
*/
void deleteKeywordSearch(Long id);
/**
* 获得搜索记录
*
* @param id 编号
* @return 搜索记录
*/
KeywordSearchDO getKeywordSearch(Long id);
/**
* 获得搜索记录分页
*
* @param pageReqVO 分页查询
* @return 搜索记录分页
*/
PageResult<KeywordSearchDO> getKeywordSearchPage(KeywordSearchPageReqVO pageReqVO);
}

View File

@ -0,0 +1,80 @@
package cn.iocoder.yudao.module.map.service.keywordsearch;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.module.map.controller.admin.keywordsearch.vo.*;
import cn.iocoder.yudao.module.map.dal.dataobject.keywordsearch.KeywordSearchDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.map.dal.mysql.keywordsearch.KeywordSearchMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.map.enums.ErrorCodeConstants.*;
/**
* 搜索记录 Service 实现类
*
* @author AN
*/
@Service
@Validated
public class KeywordSearchServiceImpl implements KeywordSearchService {
@Resource
private KeywordSearchMapper keywordSearchMapper;
@Override
public Long createKeywordSearch(KeywordSearchSaveReqVO createReqVO) {
// 插入
KeywordSearchDO keywordSearch = BeanUtils.toBean(createReqVO, KeywordSearchDO.class);
keywordSearchMapper.insert(keywordSearch);
// 返回
return keywordSearch.getId();
}
@Override
public void updateKeywordSearch(KeywordSearchSaveReqVO updateReqVO) {
// 校验存在
validateKeywordSearchExists(updateReqVO.getId());
// 更新
KeywordSearchDO updateObj = BeanUtils.toBean(updateReqVO, KeywordSearchDO.class);
keywordSearchMapper.updateById(updateObj);
}
@Override
public void deleteKeywordSearch(Long id) {
// 校验存在
validateKeywordSearchExists(id);
// 删除
keywordSearchMapper.deleteById(id);
}
private void validateKeywordSearchExists(Long id) {
if (keywordSearchMapper.selectById(id) == null) {
throw exception(KEYWORD_SEARCH_NOT_EXISTS);
}
}
@Override
public KeywordSearchDO getKeywordSearch(Long id) {
return keywordSearchMapper.selectById(id);
}
@Override
public PageResult<KeywordSearchDO> getKeywordSearchPage(KeywordSearchPageReqVO pageReqVO) {
if (pageReqVO.getPageSize() == null) {
pageReqVO.setPageSize(25);
}
if (pageReqVO.getPageNum() == null) {
pageReqVO.setPageNum(1);
}
return keywordSearchMapper.selectPage(pageReqVO);
}
}