feat: tool模块基础crud

This commit is contained in:
2026-01-28 19:50:22 +08:00
parent d7e48dda08
commit 4ab79d3afa
29 changed files with 1150 additions and 101 deletions

View File

@@ -0,0 +1,123 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
*
* 1.请不要删除和修改根目录下的LICENSE文件。
* 2.请不要删除和修改Snowy源码头部的版权声明。
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作。
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
package org.nl.tool.mock.modular.mockconfig.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.nl.common.annotation.CommonLog;
import org.nl.common.pojo.CommonResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.nl.tool.mock.modular.mockconfig.entity.MockConfig;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigAddParam;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigEditParam;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigIdParam;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigPageParam;
import org.nl.tool.mock.modular.mockconfig.service.MockConfigService;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import java.util.List;
/**
* Mock配置表控制器
*
* @author liyongde
* @date 2026/01/28 17:50
*/
@Tag(name = "Mock配置表控制器")
@RestController
@Validated
public class MockConfigController {
@Resource
private MockConfigService mockConfigService;
/**
* 获取Mock配置表分页
*
* @author liyongde
* @date 2026/01/28 17:50
*/
@Operation(summary = "获取Mock配置表分页")
@SaCheckPermission("/mock/mockconfig/page")
@GetMapping("/mock/mockconfig/page")
public CommonResult<Page<MockConfig>> page(MockConfigPageParam mockConfigPageParam) {
return CommonResult.data(mockConfigService.page(mockConfigPageParam));
}
/**
* 添加Mock配置表
*
* @author liyongde
* @date 2026/01/28 17:50
*/
@Operation(summary = "添加Mock配置表")
@CommonLog("添加Mock配置表")
@SaCheckPermission("/mock/mockconfig/add")
@PostMapping("/mock/mockconfig/add")
public CommonResult<String> add(@RequestBody @Valid MockConfigAddParam mockConfigAddParam) {
mockConfigService.add(mockConfigAddParam);
return CommonResult.ok();
}
/**
* 编辑Mock配置表
*
* @author liyongde
* @date 2026/01/28 17:50
*/
@Operation(summary = "编辑Mock配置表")
@CommonLog("编辑Mock配置表")
@SaCheckPermission("/mock/mockconfig/edit")
@PostMapping("/mock/mockconfig/edit")
public CommonResult<String> edit(@RequestBody @Valid MockConfigEditParam mockConfigEditParam) {
mockConfigService.edit(mockConfigEditParam);
return CommonResult.ok();
}
/**
* 删除Mock配置表
*
* @author liyongde
* @date 2026/01/28 17:50
*/
@Operation(summary = "删除Mock配置表")
@CommonLog("删除Mock配置表")
@SaCheckPermission("/mock/mockconfig/delete")
@PostMapping("/mock/mockconfig/delete")
public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
List<MockConfigIdParam> mockConfigIdParamList) {
mockConfigService.delete(mockConfigIdParamList);
return CommonResult.ok();
}
/**
* 获取Mock配置表详情
*
* @author liyongde
* @date 2026/01/28 17:50
*/
@Operation(summary = "获取Mock配置表详情")
@SaCheckPermission("/mock/mockconfig/detail")
@GetMapping("/mock/mockconfig/detail")
public CommonResult<MockConfig> detail(@Valid MockConfigIdParam mockConfigIdParam) {
return CommonResult.data(mockConfigService.detail(mockConfigIdParam));
}
}

View File

@@ -0,0 +1,63 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
*
* 1.请不要删除和修改根目录下的LICENSE文件。
* 2.请不要删除和修改Snowy源码头部的版权声明。
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作。
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
package org.nl.tool.mock.modular.mockconfig.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
/**
* Mock配置表实体
*
* @author liyongde
* @date 2026/01/28 17:50
**/
@Getter
@Setter
@TableName("tool_mock_config")
public class MockConfig {
/** 主键ID */
@TableId
@Schema(description = "主键ID")
private String id;
/** 接口路径,如:/api/user/info */
@Schema(description = "接口路径,如:/api/user/info")
private String apiPath;
/** 请求方法GET, POST, PUT, DELETE */
@Schema(description = "请求方法GET, POST, PUT, DELETE")
private String apiMethod;
/** 返回的JSON数据 */
@Schema(description = "返回的JSON数据")
private String responseJson;
/** 是否启用true-启用false-禁用 */
@Schema(description = "是否启用true-启用false-禁用")
private Boolean isEnabled;
/** 创建时间 */
@Schema(description = "创建时间")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/** 更新时间 */
@Schema(description = "更新时间")
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
}

View File

@@ -0,0 +1,34 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
*
* 1.请不要删除和修改根目录下的LICENSE文件。
* 2.请不要删除和修改Snowy源码头部的版权声明。
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作。
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
package org.nl.tool.mock.modular.mockconfig.enums;
import lombok.Getter;
/**
* Mock配置表枚举
*
* @author liyongde
* @date 2026/01/28 17:50
**/
@Getter
public enum MockConfigEnum {
/** 测试 */
TEST("TEST");
private final String value;
MockConfigEnum(String value) {
this.value = value;
}
}

View File

@@ -0,0 +1,25 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
*
* 1.请不要删除和修改根目录下的LICENSE文件。
* 2.请不要删除和修改Snowy源码头部的版权声明。
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作。
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
package org.nl.tool.mock.modular.mockconfig.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.tool.mock.modular.mockconfig.entity.MockConfig;
/**
* Mock配置表Mapper接口
*
* @author liyongde
* @date 2026/01/28 17:50
**/
public interface MockConfigMapper extends BaseMapper<MockConfig> {
}

View File

@@ -0,0 +1,5 @@
<?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="org.nl.tool.mock.modular.mockconfig.mapper.MockConfigMapper">
</mapper>

View File

@@ -0,0 +1,50 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
*
* 1.请不要删除和修改根目录下的LICENSE文件。
* 2.请不要删除和修改Snowy源码头部的版权声明。
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作。
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
package org.nl.tool.mock.modular.mockconfig.param;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
/**
* Mock配置表添加参数
*
* @author liyongde
* @date 2026/01/28 17:50
**/
@Getter
@Setter
public class MockConfigAddParam {
/** 接口路径,如:/api/user/info */
@Schema(description = "接口路径,如:/api/user/info")
private String apiPath;
/** 请求方法GET, POST, PUT, DELETE */
@Schema(description = "请求方法GET, POST, PUT, DELETE")
private String apiMethod;
/** 返回的JSON数据 */
@Schema(description = "返回的JSON数据")
private String responseJson;
/** 是否启用true-启用false-禁用 */
@Schema(description = "是否启用true-启用false-禁用")
private Boolean isEnabled;
}

View File

@@ -0,0 +1,55 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
*
* 1.请不要删除和修改根目录下的LICENSE文件。
* 2.请不要删除和修改Snowy源码头部的版权声明。
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作。
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
package org.nl.tool.mock.modular.mockconfig.param;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
/**
* Mock配置表编辑参数
*
* @author liyongde
* @date 2026/01/28 17:50
**/
@Getter
@Setter
public class MockConfigEditParam {
/** 主键ID */
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "id不能为空")
private String id;
/** 接口路径,如:/api/user/info */
@Schema(description = "接口路径,如:/api/user/info")
private String apiPath;
/** 请求方法GET, POST, PUT, DELETE */
@Schema(description = "请求方法GET, POST, PUT, DELETE")
private String apiMethod;
/** 返回的JSON数据 */
@Schema(description = "返回的JSON数据")
private String responseJson;
/** 是否启用true-启用false-禁用 */
@Schema(description = "是否启用true-启用false-禁用")
private Boolean isEnabled;
}

View File

@@ -0,0 +1,35 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
*
* 1.请不要删除和修改根目录下的LICENSE文件。
* 2.请不要删除和修改Snowy源码头部的版权声明。
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作。
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
package org.nl.tool.mock.modular.mockconfig.param;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import jakarta.validation.constraints.NotBlank;
/**
* Mock配置表Id参数
*
* @author liyongde
* @date 2026/01/28 17:50
**/
@Getter
@Setter
public class MockConfigIdParam {
/** 主键ID */
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "id不能为空")
private String id;
}

View File

@@ -0,0 +1,63 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
*
* 1.请不要删除和修改根目录下的LICENSE文件。
* 2.请不要删除和修改Snowy源码头部的版权声明。
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作。
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
package org.nl.tool.mock.modular.mockconfig.param;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
/**
* Mock配置表查询参数
*
* @author liyongde
* @date 2026/01/28 17:50
**/
@Getter
@Setter
public class MockConfigPageParam {
/** 当前页 */
@Schema(description = "当前页码")
private Integer current;
/** 每页条数 */
@Schema(description = "每页条数")
private Integer size;
/** 排序字段 */
@Schema(description = "排序字段字段驼峰名称userName")
private String sortField;
/** 排序方式 */
@Schema(description = "排序方式升序ASCEND降序DESCEND")
private String sortOrder;
/** 关键词 */
@Schema(description = "关键词")
private String searchKey;
/** 接口路径,如:/api/user/info */
@Schema(description = "接口路径,如:/api/user/info")
private String apiPath;
/** 请求方法GET, POST, PUT, DELETE */
@Schema(description = "请求方法GET, POST, PUT, DELETE")
private String apiMethod;
/** 是否启用true-启用false-禁用 */
@Schema(description = "是否启用true-启用false-禁用")
private Boolean isEnabled;
}

View File

@@ -0,0 +1,80 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
*
* 1.请不要删除和修改根目录下的LICENSE文件。
* 2.请不要删除和修改Snowy源码头部的版权声明。
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作。
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
package org.nl.tool.mock.modular.mockconfig.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.tool.mock.modular.mockconfig.entity.MockConfig;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigAddParam;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigEditParam;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigIdParam;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigPageParam;
import java.util.List;
/**
* Mock配置表Service接口
*
* @author liyongde
* @date 2026/01/28 17:50
**/
public interface MockConfigService extends IService<MockConfig> {
/**
* 获取Mock配置表分页
*
* @author liyongde
* @date 2026/01/28 17:50
*/
Page<MockConfig> page(MockConfigPageParam mockConfigPageParam);
/**
* 添加Mock配置表
*
* @author liyongde
* @date 2026/01/28 17:50
*/
void add(MockConfigAddParam mockConfigAddParam);
/**
* 编辑Mock配置表
*
* @author liyongde
* @date 2026/01/28 17:50
*/
void edit(MockConfigEditParam mockConfigEditParam);
/**
* 删除Mock配置表
*
* @author liyongde
* @date 2026/01/28 17:50
*/
void delete(List<MockConfigIdParam> mockConfigIdParamList);
/**
* 获取Mock配置表详情
*
* @author liyongde
* @date 2026/01/28 17:50
*/
MockConfig detail(MockConfigIdParam mockConfigIdParam);
/**
* 获取Mock配置表详情
*
* @author liyongde
* @date 2026/01/28 17:50
**/
MockConfig queryEntity(String id);
}

View File

@@ -0,0 +1,103 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
*
* 1.请不要删除和修改根目录下的LICENSE文件。
* 2.请不要删除和修改Snowy源码头部的版权声明。
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作。
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
package org.nl.tool.mock.modular.mockconfig.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollStreamUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.nl.common.enums.CommonSortOrderEnum;
import org.nl.common.exception.CommonException;
import org.nl.common.page.CommonPageRequest;
import org.nl.tool.mock.modular.mockconfig.entity.MockConfig;
import org.nl.tool.mock.modular.mockconfig.mapper.MockConfigMapper;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigAddParam;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigEditParam;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigIdParam;
import org.nl.tool.mock.modular.mockconfig.param.MockConfigPageParam;
import org.nl.tool.mock.modular.mockconfig.service.MockConfigService;
import java.util.List;
/**
* Mock配置表Service接口实现类
*
* @author liyongde
* @date 2026/01/28 17:50
**/
@Service
public class MockConfigServiceImpl extends ServiceImpl<MockConfigMapper, MockConfig> implements MockConfigService {
@Override
public Page<MockConfig> page(MockConfigPageParam mockConfigPageParam) {
QueryWrapper<MockConfig> queryWrapper = new QueryWrapper<MockConfig>().checkSqlInjection();
if(ObjectUtil.isNotEmpty(mockConfigPageParam.getApiPath())) {
queryWrapper.lambda().eq(MockConfig::getApiPath, mockConfigPageParam.getApiPath());
}
if(ObjectUtil.isNotEmpty(mockConfigPageParam.getApiMethod())) {
queryWrapper.lambda().eq(MockConfig::getApiMethod, mockConfigPageParam.getApiMethod());
}
if(ObjectUtil.isNotEmpty(mockConfigPageParam.getIsEnabled())) {
queryWrapper.lambda().eq(MockConfig::getIsEnabled, mockConfigPageParam.getIsEnabled());
}
if(ObjectUtil.isAllNotEmpty(mockConfigPageParam.getSortField(), mockConfigPageParam.getSortOrder())) {
CommonSortOrderEnum.validate(mockConfigPageParam.getSortOrder());
queryWrapper.orderBy(true, mockConfigPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
StrUtil.toUnderlineCase(mockConfigPageParam.getSortField()));
} else {
queryWrapper.lambda().orderByAsc(MockConfig::getId);
}
return this.page(CommonPageRequest.defaultPage(), queryWrapper);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void add(MockConfigAddParam mockConfigAddParam) {
MockConfig mockConfig = BeanUtil.toBean(mockConfigAddParam, MockConfig.class);
this.save(mockConfig);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void edit(MockConfigEditParam mockConfigEditParam) {
MockConfig mockConfig = this.queryEntity(mockConfigEditParam.getId());
BeanUtil.copyProperties(mockConfigEditParam, mockConfig);
this.updateById(mockConfig);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void delete(List<MockConfigIdParam> mockConfigIdParamList) {
// 执行删除
this.removeByIds(CollStreamUtil.toList(mockConfigIdParamList, MockConfigIdParam::getId));
}
@Override
public MockConfig detail(MockConfigIdParam mockConfigIdParam) {
return this.queryEntity(mockConfigIdParam.getId());
}
@Override
public MockConfig queryEntity(String id) {
MockConfig mockConfig = this.getById(id);
if(ObjectUtil.isEmpty(mockConfig)) {
throw new CommonException("Mock配置表不存在id值为{}", id);
}
return mockConfig;
}
}