feat(puzzle): 实现拼图自动填充规则引擎及相关功能

- 新增拼图填充规则管理Controller、DTO、Entity等核心类
- 实现条件评估策略模式,支持多种匹配规则
- 实现数据源解析策略模式,支持多种数据来源
- 新增拼图元素自动填充引擎,支持优先级匹配和动态填充
- 在SourceMapper中增加设备统计和查询相关方法
- 在PuzzleGenerateRequest中新增faceId字段用于触发自动填充
- 完善相关枚举类和工具类,提升系统可维护性和扩展性
This commit is contained in:
2025-11-19 11:10:23 +08:00
parent de421cf0d5
commit 778afaaa83
43 changed files with 4019 additions and 3 deletions

View File

@@ -0,0 +1,117 @@
package com.ycwl.basic.puzzle.controller;
import com.ycwl.basic.puzzle.dto.PuzzleFillRuleDTO;
import com.ycwl.basic.puzzle.dto.PuzzleFillRuleSaveRequest;
import com.ycwl.basic.puzzle.service.IPuzzleFillRuleService;
import com.ycwl.basic.utils.ApiResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 拼图填充规则管理Controller
*
* @author Claude
* @since 2025-01-19
*/
@Slf4j
@RestController
@RequestMapping("/api/puzzle/admin/fill-rule")
@RequiredArgsConstructor
public class PuzzleFillRuleController {
private final IPuzzleFillRuleService fillRuleService;
/**
* 创建填充规则
*
* @param request 保存请求(包含主规则+明细列表)
* @return 规则ID
*/
@PostMapping
public ApiResponse<Long> create(@RequestBody PuzzleFillRuleSaveRequest request) {
log.info("创建填充规则, ruleName={}, itemCount={}",
request.getRuleName(),
request.getItems() != null ? request.getItems().size() : 0);
Long ruleId = fillRuleService.create(request);
return ApiResponse.success(ruleId);
}
/**
* 更新填充规则
*
* @param id 规则ID
* @param request 保存请求
* @return 是否成功
*/
@PutMapping("/{id}")
public ApiResponse<Boolean> update(@PathVariable Long id,
@RequestBody PuzzleFillRuleSaveRequest request) {
log.info("更新填充规则, ruleId={}, ruleName={}", id, request.getRuleName());
request.setId(id);
Boolean success = fillRuleService.update(request);
return ApiResponse.success(success);
}
/**
* 删除填充规则
*
* @param id 规则ID
* @return 是否成功
*/
@DeleteMapping("/{id}")
public ApiResponse<Boolean> delete(@PathVariable Long id) {
log.info("删除填充规则, ruleId={}", id);
Boolean success = fillRuleService.delete(id);
return ApiResponse.success(success);
}
/**
* 查询单条规则(含明细)
*
* @param id 规则ID
* @return 规则DTO
*/
@GetMapping("/{id}")
public ApiResponse<PuzzleFillRuleDTO> getById(@PathVariable Long id) {
log.info("查询填充规则, ruleId={}", id);
PuzzleFillRuleDTO rule = fillRuleService.getById(id);
return ApiResponse.success(rule);
}
/**
* 查询模板的所有规则(含明细)
*
* @param templateId 模板ID
* @return 规则列表
*/
@GetMapping("/template/{templateId}")
public ApiResponse<List<PuzzleFillRuleDTO>> listByTemplateId(@PathVariable Long templateId) {
log.info("查询模板的所有填充规则, templateId={}", templateId);
List<PuzzleFillRuleDTO> rules = fillRuleService.listByTemplateId(templateId);
return ApiResponse.success(rules);
}
/**
* 启用/禁用规则
*
* @param id 规则ID
* @param enabled 是否启用(0-禁用 1-启用)
* @return 是否成功
*/
@PostMapping("/{id}/toggle")
public ApiResponse<Boolean> toggleEnabled(@PathVariable Long id,
@RequestParam Integer enabled) {
log.info("切换规则启用状态, ruleId={}, enabled={}", id, enabled);
Boolean success = fillRuleService.toggleEnabled(id, enabled);
return ApiResponse.success(success);
}
}