diff --git a/yudao-module-map/yudao-module-map-api/src/main/java/cn/iocoder/yudao/module/map/enums/ErrorCodeConstants.java b/yudao-module-map/yudao-module-map-api/src/main/java/cn/iocoder/yudao/module/map/enums/ErrorCodeConstants.java index a174309d04..fe4ecfb6de 100644 --- a/yudao-module-map/yudao-module-map-api/src/main/java/cn/iocoder/yudao/module/map/enums/ErrorCodeConstants.java +++ b/yudao-module-map/yudao-module-map-api/src/main/java/cn/iocoder/yudao/module/map/enums/ErrorCodeConstants.java @@ -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基础信息不存在"); } diff --git a/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/KeywordSearchController.java b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/KeywordSearchController.java new file mode 100644 index 0000000000..fd82232abc --- /dev/null +++ b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/KeywordSearchController.java @@ -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 createKeywordSearch(@Valid @RequestBody KeywordSearchSaveReqVO createReqVO) { + return success(keywordSearchService.createKeywordSearch(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新搜索记录") + @PreAuthorize("@ss.hasPermission('map:keyword-search:update')") + public CommonResult 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 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 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> getKeywordSearchPage(@Valid KeywordSearchPageReqVO pageReqVO) { + PageResult 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 list = keywordSearchService.getKeywordSearchPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "搜索记录.xls", "数据", KeywordSearchRespVO.class, + BeanUtils.toBean(list, KeywordSearchRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/vo/KeywordSearchPageReqVO.java b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/vo/KeywordSearchPageReqVO.java new file mode 100644 index 0000000000..3ab6fc0a72 --- /dev/null +++ b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/vo/KeywordSearchPageReqVO.java @@ -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; + +} \ No newline at end of file diff --git a/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/vo/KeywordSearchRespVO.java b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/vo/KeywordSearchRespVO.java new file mode 100644 index 0000000000..c5ff8a28de --- /dev/null +++ b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/vo/KeywordSearchRespVO.java @@ -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; + +} \ No newline at end of file diff --git a/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/vo/KeywordSearchSaveReqVO.java b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/vo/KeywordSearchSaveReqVO.java new file mode 100644 index 0000000000..311da45348 --- /dev/null +++ b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/controller/admin/keywordsearch/vo/KeywordSearchSaveReqVO.java @@ -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; + +} \ No newline at end of file diff --git a/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/dal/dataobject/keywordsearch/KeywordSearchDO.java b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/dal/dataobject/keywordsearch/KeywordSearchDO.java new file mode 100644 index 0000000000..c53a2474f1 --- /dev/null +++ b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/dal/dataobject/keywordsearch/KeywordSearchDO.java @@ -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") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 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; + +} \ No newline at end of file diff --git a/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/dal/mysql/keywordsearch/KeywordSearchMapper.java b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/dal/mysql/keywordsearch/KeywordSearchMapper.java new file mode 100644 index 0000000000..81565b8867 --- /dev/null +++ b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/dal/mysql/keywordsearch/KeywordSearchMapper.java @@ -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 { + + default PageResult selectPage(KeywordSearchPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .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)); + } + +} \ No newline at end of file diff --git a/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/service/keywordsearch/KeywordSearchService.java b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/service/keywordsearch/KeywordSearchService.java new file mode 100644 index 0000000000..89a249330c --- /dev/null +++ b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/service/keywordsearch/KeywordSearchService.java @@ -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 getKeywordSearchPage(KeywordSearchPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/service/keywordsearch/KeywordSearchServiceImpl.java b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/service/keywordsearch/KeywordSearchServiceImpl.java new file mode 100644 index 0000000000..c3a22874a7 --- /dev/null +++ b/yudao-module-map/yudao-module-map-biz/src/main/java/cn/iocoder/yudao/module/map/service/keywordsearch/KeywordSearchServiceImpl.java @@ -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 getKeywordSearchPage(KeywordSearchPageReqVO pageReqVO) { + if (pageReqVO.getPageSize() == null) { + pageReqVO.setPageSize(25); + } + if (pageReqVO.getPageNum() == null) { + pageReqVO.setPageNum(1); + } + return keywordSearchMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file