Files
ruoyi-vue-pro/.claude/skills/usage/quick-start.md

594 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Skill 快速上手指南
> 本文档提供快速使用 Skill 文档的提示词模板,帮助开发者快速定位代码、理解业务、完成日常开发任务。
---
## 一、Skill 快速使用指南
### 什么是 Skill 文档
Skill 文档是从 ruoyi-vue-pro 项目代码中提取的结构化知识库,包含:
- **设计理念**:业务定位、设计原则、领域模型
- **架构设计**:分层架构、设计模式、模块通信
- **数据表设计**:实体关系、表结构、字段说明
- **代码规范**Controller/Service/DAL 层代码模式
- **扩展指南**:新增功能步骤、最佳实践
### 如何使用 Skill 文档
```
使用 Skill 文档,帮我 [任务描述]
参考 Skill 文档:
- skills/modules/[模块名]/skill-[模块名].yaml
```
**示例**
```
使用 Skill 文档,帮我在 system 模块添加一个"操作日志"功能。
参考 skills/modules/system/skill-system.yaml
```
---
## 二、一分钟提示词模板
### 基础模板
```
参考 Skill 文档 skills/modules/[模块]/skill-[模块].yaml帮我完成以下任务
[具体任务描述]
要求:
1. 遵循项目现有的代码规范
2. 使用统一响应格式 CommonResult
3. 添加必要的权限控制
```
### 快速填充指南
| 场景 | 模块路径 | 模块名 |
|------|---------|--------|
| 用户/角色/权限/菜单 | yudao-module-system | system |
| 文件/配置/任务/日志 | yudao-module-infra | infra |
| 支付/退款/钱包 | yudao-module-pay | pay |
| 会员/积分/等级/签到 | yudao-module-member | member |
| 商品/订单/促销 | yudao-module-mall | mall |
| 客户/线索/合同 | yudao-module-crm | crm |
| 采购/销售/库存 | yudao-module-erp | erp |
| 工作流/审批 | yudao-module-bpm | bpm |
| AI/大模型 | yudao-module-ai | ai |
| 物联网设备 | yudao-module-iot | iot |
| 微信公众号 | yudao-module-mp | mp |
| 报表 | yudao-module-report | report |
---
## 三、常见场景快速提示词
### 3.1 查找代码位置
```
参考 Skill 文档,帮我找到 [功能] 相关的代码位置:
- Controller 入口
- Service 实现
- Mapper 接口
- 数据表定义
模块:[模块名]
功能关键词:[关键词]
```
**示例**
```
参考 skills/modules/system/skill-system.yaml帮我找到用户登录相关的代码位置
- Controller 入口
- Service 实现
- 认证逻辑
```
---
### 3.2 理解业务逻辑
```
参考 Skill 文档 skills/modules/[模块]/skill-[模块].yaml帮我理解 [业务场景] 的完整流程:
1. 业务入口在哪里?
2. 核心业务逻辑在哪个 Service
3. 涉及哪些数据表?
4. 状态流转是怎样的?
```
**示例**
```
参考 skills/modules/mall/skill-mall.yaml帮我理解订单支付的完整流程
1. 支付入口在哪里?
2. 核心支付逻辑在哪个 Service
3. 支付回调如何处理?
4. 订单状态如何流转?
```
---
### 3.3 修复 Bug
```
参考 Skill 文档 skills/modules/[模块]/skill-[模块].yaml帮我分析和修复以下问题
问题描述:[Bug 描述]
错误信息:[错误日志或异常信息]
复现步骤:[如何复现]
请帮我:
1. 定位问题代码位置
2. 分析问题原因
3. 提供修复方案
4. 说明需要修改的文件
```
**示例**
```
参考 skills/modules/pay/skill-pay.yaml帮我分析和修复以下问题
问题描述:支付回调后订单状态未更新
错误信息:无异常,但订单一直是待支付状态
请帮我:
1. 定位回调处理代码
2. 分析状态更新逻辑
3. 检查事务是否正确
```
---
### 3.4 添加字段
```
参考 Skill 文档 skills/modules/[模块]/skill-[模块].yaml帮我在 [实体] 中添加新字段:
字段名:[字段名]
字段类型:[类型]
字段用途:[用途说明]
需要修改:
1. DO 实体类
2. 数据库表(提供 SQL
3. VO 类(请求/响应)
4. Controller如有需要
```
**示例**
```
参考 skills/modules/member/skill-member.yaml帮我在会员用户中添加新字段
字段名vipExpireTime
字段类型LocalDateTime
字段用途VIP 会员过期时间
需要修改:
1. MemberUserDO
2. member_user 表
3. 相关 VO 类
```
---
### 3.5 添加接口
```
参考 Skill 文档 skills/modules/[模块]/skill-[模块].yaml帮我添加一个新接口
接口名称:[接口名]
接口路径:[HTTP 方法和路径]
功能描述:[功能说明]
请求参数:[参数列表]
响应数据:[响应结构]
权限标识:[权限码]
请按照项目规范生成:
1. Controller 方法
2. Service 接口和实现
3. VO 类
```
**示例**
```
参考 skills/modules/system/skill-system.yaml帮我添加一个新接口
接口名称:获取当前用户信息
接口路径GET /system/user/current
功能描述:获取当前登录用户的详细信息
权限标识system:user:query
请按照项目规范生成完整代码。
```
---
### 3.6 添加权限
```
参考 Skill 文档 skills/modules/system/skill-system.yaml帮我添加一个新的权限
权限名称:[权限名]
权限标识:[权限码,格式:模块:功能:操作]
父菜单ID[父菜单 ID]
权限类型:[菜单/按钮]
请提供:
1. 菜单/按钮的 SQL 插入语句
2. Controller 中的 @PreAuthorize 注解示例
```
**示例**
```
参考 skills/modules/system/skill-system.yaml帮我添加一个新的权限
权限名称:导出用户
权限标识system:user:export
父菜单ID用户管理菜单 ID
权限类型:按钮
请提供:
1. 按钮的 SQL 插入语句
2. Controller 中的权限注解示例
```
---
## 四、Skill 文档快速导航
### 4.1 模块索引
| 模块 | 文档路径 | 核心功能 | 关键实体 |
|------|---------|---------|---------|
| **system** | skills/modules/system/skill-system.yaml | 用户、角色、权限、菜单、租户、字典 | AdminUserDO, RoleDO, MenuDO |
| **infra** | skills/modules/infra/skill-infra.yaml | 文件、配置、任务、日志、代码生成 | FileDO, JobDO, ConfigDO |
| **pay** | skills/modules/pay/skill-pay.yaml | 支付、退款、钱包、转账 | PayOrderDO, PayRefundDO, PayWalletDO |
| **member** | skills/modules/member/skill-member.yaml | 会员、积分、等级、签到、地址 | MemberUserDO, MemberLevelDO |
| **mall** | skills/modules/mall/skill-mall.yaml | 商品、订单、促销、统计 | ProductSpuDO, TradeOrderDO, CouponDO |
| **crm** | skills/modules/crm/skill-crm.yaml | 线索、客户、商机、合同、回款 | CrmCustomerDO, CrmContractDO |
| **erp** | skills/modules/erp/skill-erp.yaml | 采购、销售、库存、财务 | ErpPurchaseDO, ErpSaleDO |
| **bpm** | skills/modules/bpm/skill-bpm.yaml | 流程定义、流程实例、任务 | BpmProcessDefinitionDO |
| **ai** | skills/modules/ai/skill-ai.yaml | AI 模型、对话、绘图 | AiChatMessageDO, AiImageDO |
| **iot** | skills/modules/iot/skill-iot.yaml | 设备、产品、物模型 | IotDeviceDO, IotProductDO |
| **mp** | skills/modules/mp/skill-mp.yaml | 公众号、菜单、消息 | MpAccountDO, MpMessageDO |
| **report** | skills/modules/report/skill-report.yaml | 报表、数据源、图表 | ReportDataSourceDO |
### 4.2 错误码前缀速查
| 模块 | 错误码前缀 | 示例 |
|------|-----------|------|
| system | 1_002_XXX_XXX | 1_002_000_000 登录失败 |
| infra | 1_001_XXX_XXX | 1_001_000_000 文件不存在 |
| pay | 1_007_XXX_XXX | 1_007_002_000 支付订单不存在 |
| member | 1_004_XXX_XXX | 1_004_001_000 用户不存在 |
| product | 1_008_XXX_XXX | 1_008_005_000 商品不存在 |
| trade | 1_011_XXX_XXX | 1_011_000_011 订单不存在 |
| promotion | 1_013_XXX_XXX | 1_013_004_000 优惠券模板不存在 |
### 4.3 权限标识规范
```
格式:模块:功能:操作
示例:
- system:user:query # 查询用户
- system:user:create # 创建用户
- system:user:update # 更新用户
- system:user:delete # 删除用户
- system:user:export # 导出用户
```
---
## 五、常用代码片段
### 5.1 Controller 层
```java
@Tag(name = "管理后台 - [功能名]")
@RestController
@RequestMapping("/[模块]/[功能]")
@Validated
public class XxxController {
@Resource
private XxxService xxxService;
@PostMapping("/create")
@Operation(summary = "创建[功能]")
@PreAuthorize("@ss.hasPermission('[模块]:[功能]:create')")
public CommonResult<Long> createXxx(@Valid @RequestBody XxxSaveReqVO createReqVO) {
return success(xxxService.createXxx(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新[功能]")
@PreAuthorize("@ss.hasPermission('[模块]:[功能]:update')")
public CommonResult<Boolean> updateXxx(@Valid @RequestBody XxxSaveReqVO updateReqVO) {
xxxService.updateXxx(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除[功能]")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('[模块]:[功能]:delete')")
public CommonResult<Boolean> deleteXxx(@RequestParam("id") Long id) {
xxxService.deleteXxx(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得[功能]")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('[模块]:[功能]:query')")
public CommonResult<XxxRespVO> getXxx(@RequestParam("id") Long id) {
XxxDO xxx = xxxService.getXxx(id);
return success(BeanUtils.toBean(xxx, XxxRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得[功能]分页")
@PreAuthorize("@ss.hasPermission('[模块]:[功能]:query')")
public CommonResult<PageResult<XxxRespVO>> getXxxPage(@Valid XxxPageReqVO pageReqVO) {
PageResult<XxxDO> pageResult = xxxService.getXxxPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, XxxRespVO.class));
}
}
```
### 5.2 Service 层
```java
// 接口
public interface XxxService {
Long createXxx(@Valid XxxSaveReqVO createReqVO);
void updateXxx(@Valid XxxSaveReqVO updateReqVO);
void deleteXxx(Long id);
XxxDO getXxx(Long id);
PageResult<XxxDO> getXxxPage(XxxPageReqVO pageReqVO);
}
// 实现
@Service
@Validated
public class XxxServiceImpl implements XxxService {
@Resource
private XxxMapper xxxMapper;
@Override
public Long createXxx(XxxSaveReqVO createReqVO) {
XxxDO xxx = BeanUtils.toBean(createReqVO, XxxDO.class);
xxxMapper.insert(xxx);
return xxx.getId();
}
@Override
public void updateXxx(XxxSaveReqVO updateReqVO) {
// 校验存在
validateXxxExists(updateReqVO.getId());
// 更新
XxxDO updateObj = BeanUtils.toBean(updateReqVO, XxxDO.class);
xxxMapper.updateById(updateObj);
}
@Override
public void deleteXxx(Long id) {
// 校验存在
validateXxxExists(id);
// 删除
xxxMapper.deleteById(id);
}
private void validateXxxExists(Long id) {
if (xxxMapper.selectById(id) == null) {
throw exception(XXX_NOT_EXISTS);
}
}
@Override
public XxxDO getXxx(Long id) {
return xxxMapper.selectById(id);
}
@Override
public PageResult<XxxDO> getXxxPage(XxxPageReqVO pageReqVO) {
return xxxMapper.selectPage(pageReqVO);
}
}
```
### 5.3 Mapper 层
```java
@Mapper
public interface XxxMapper extends BaseMapperX<XxxDO> {
default PageResult<XxxDO> selectPage(XxxPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<XxxDO>()
.likeIfPresent(XxxDO::getName, reqVO.getName())
.eqIfPresent(XxxDO::getStatus, reqVO.getStatus())
.betweenIfPresent(XxxDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(XxxDO::getId));
}
default List<XxxDO> selectListByStatus(Integer status) {
return selectList(XxxDO::getStatus, status);
}
}
```
### 5.4 DO 实体类
```java
@TableName("[表名]")
@Data
@EqualsAndHashCode(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class XxxDO extends TenantBaseDO { // 或 BaseDO
/**
* 主键ID
*/
@TableId
private Long id;
/**
* 名称
*/
private String name;
/**
* 状态
*/
private Integer status;
// ... 其他字段
}
```
### 5.5 VO 类
```java
// 请求 VO新增/修改共用)
@Data
public class XxxSaveReqVO {
@Schema(description = "编号", example = "1")
private Long id; // 更新时必填
@Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试")
@NotBlank(message = "名称不能为空")
private String name;
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
@NotNull(message = "状态不能为空")
private Integer status;
}
// 分页请求 VO
@Data
@EqualsAndHashCode(callSuper = true)
public class XxxPageReqVO extends PageParam {
@Schema(description = "名称", example = "测试")
private String name;
@Schema(description = "状态", example = "0")
private Integer status;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}
// 响应 VO
@Data
public class XxxRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id;
@Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试")
private String name;
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
private Integer status;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
}
```
### 5.6 错误码定义
```java
// 在 ErrorCodeConstants.java 中添加
ErrorCode XXX_NOT_EXISTS = new ErrorCode(1_002_XXX_000, "[功能]不存在");
ErrorCode XXX_NAME_DUPLICATE = new ErrorCode(1_002_XXX_001, "已存在该名字的[功能]");
```
### 5.7 跨模块 API 调用
```java
// API 接口定义
public interface XxxApi {
CommonResult<XxxRespDTO> getXxx(Long id);
CommonResult<List<XxxRespDTO>> getXxxList(Collection<Long> ids);
}
// API 实现
@RestController
@FeignClient(name = ApiConstants.NAME)
public class XxxApiImpl implements XxxApi {
@Resource
private XxxService xxxService;
@Override
public CommonResult<XxxRespDTO> getXxx(Long id) {
XxxDO xxx = xxxService.getXxx(id);
return success(BeanUtils.toBean(xxx, XxxRespDTO.class));
}
}
// 调用方式
@Resource
private XxxApi xxxApi;
public void someMethod() {
XxxRespDTO xxx = xxxApi.getXxx(id).getCheckedData();
}
```
---
## 六、快速参考
### 6.1 分层架构速记
```
Controller (HTTP入口)
Service (业务逻辑)
Mapper (数据访问)
Database
```
### 6.2 常用注解速查
| 层级 | 常用注解 |
|------|---------|
| Controller | @RestController, @RequestMapping, @Tag, @Operation, @PreAuthorize |
| Service | @Service, @Validated, @Transactional |
| Mapper | @Mapper |
| DO | @TableName, @TableId, @Data |
| VO | @Data, @Schema, @NotBlank, @NotNull |
### 6.3 命名规范
| 类型 | 命名规则 | 示例 |
|------|---------|------|
| Controller | XxxController | UserController |
| Service接口 | XxxService | UserService |
| Service实现 | XxxServiceImpl | UserServiceImpl |
| Mapper | XxxMapper | UserMapper |
| DO | XxxDO | UserDO |
| 请求VO | XxxSaveReqVO / XxxPageReqVO | UserSaveReqVO |
| 响应VO | XxxRespVO | UserRespVO |
| API接口 | XxxApi | UserApi |
| 错误码 | XXX_NOT_EXISTS | USER_NOT_EXISTS |
---
**提示**:使用 Skill 文档时,直接复制对应的提示词模板,替换占位符即可快速获得准确的代码生成和问题解答。