package xiaozhi.modules.parent.controller; import java.util.List; import java.util.Map; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import xiaozhi.common.utils.Result; import xiaozhi.modules.parent.catalog.IdiomLessonCatalog; import xiaozhi.modules.parent.catalog.ParentCatalog; import xiaozhi.modules.parent.dto.ParentDeviceStatusDTO; import xiaozhi.modules.parent.dto.ParentHistoryDetailDTO; import xiaozhi.modules.parent.dto.ParentHistoryListDTO; import xiaozhi.modules.parent.dto.ParentTaskDTO; import xiaozhi.modules.parent.dto.ParentTaskListDTO; import xiaozhi.modules.parent.dto.ParentTaskSaveDTO; import xiaozhi.modules.parent.service.ParentHistoryService; import xiaozhi.modules.parent.service.ParentTaskService; import xiaozhi.modules.security.user.SecurityUser; @Tag(name = "家长任务下发") @RestController @RequestMapping("/user") @RequiredArgsConstructor public class ParentTaskController { private final ParentTaskService parentTaskService; private final ParentHistoryService parentHistoryService; @GetMapping("/scenes") @Operation(summary = "场景列表(parent-scenes.json,热加载)") @RequiresPermissions("sys:role:normal") public Result>> scenes() { return new Result>>().ok(ParentCatalog.scenes()); } @GetMapping("/idiom-catalog") @Operation(summary = "成语课文清单(级别/分类/故事,增删改 idiom-lessons.json)") @RequiresPermissions("sys:role:normal") public Result> idiomCatalog() { return new Result>().ok(IdiomLessonCatalog.asApiMap()); } @GetMapping("/lessons") @Operation(summary = "课文目录") @RequiresPermissions("sys:role:normal") public Result>> lessons(@RequestParam("scene") String scene) { return new Result>>().ok(ParentCatalog.lessons(scene)); } @GetMapping("/language-pairs") @Operation(summary = "语言对") @RequiresPermissions("sys:role:normal") public Result>> languagePairs() { return new Result>>().ok(ParentCatalog.languagePairs()); } @GetMapping("/parent-device/status") @Operation(summary = "查询设备是否在线(家长 MQTT 状态)") @RequiresPermissions("sys:role:normal") public Result deviceStatus( @RequestParam("macAddress") String macAddress, @RequestParam("agentId") String agentId) { return new Result().ok( parentTaskService.deviceStatus(SecurityUser.getUserId(), macAddress, agentId)); } @GetMapping("/parent-task") @Operation(summary = "任务列表") @RequiresPermissions("sys:role:normal") public Result list( @RequestParam("macAddress") String macAddress, @RequestParam("agentId") String agentId, @RequestParam(value = "runMode", required = false) String runMode) { return new Result().ok( parentTaskService.list(SecurityUser.getUserId(), macAddress, agentId, runMode)); } @GetMapping("/parent-task/{id}") @Operation(summary = "任务详情") @RequiresPermissions("sys:role:normal") public Result get(@PathVariable("id") String id) { return new Result().ok(parentTaskService.get(SecurityUser.getUserId(), id)); } @PostMapping("/parent-task") @Operation(summary = "创建任务:立即开始或存为计划") @RequiresPermissions("sys:role:normal") public Result create(@RequestBody ParentTaskSaveDTO body) { return new Result().ok(parentTaskService.create(SecurityUser.getUserId(), body)); } @PutMapping("/parent-task/{id}") @Operation(summary = "更新计划") @RequiresPermissions("sys:role:normal") public Result update(@PathVariable("id") String id, @RequestBody ParentTaskSaveDTO body) { return new Result().ok(parentTaskService.update(SecurityUser.getUserId(), id, body)); } @DeleteMapping("/parent-task/{id}") @Operation(summary = "删除任务") @RequiresPermissions("sys:role:normal") public Result delete(@PathVariable("id") String id) { parentTaskService.delete(SecurityUser.getUserId(), id); return new Result().ok(Boolean.TRUE); } @PostMapping("/parent-task/{id}/run") @Operation(summary = "按已有任务定义立即执行(不改周期表)") @RequiresPermissions("sys:role:normal") public Result runNow(@PathVariable("id") String id) { return new Result().ok(parentTaskService.runNow(SecurityUser.getUserId(), id)); } @PostMapping("/parent-task/{id}/stop") @Operation(summary = "结束正在执行的任务,设备回到对话") @RequiresPermissions("sys:role:normal") public Result stop(@PathVariable("id") String id) { return new Result().ok(parentTaskService.stop(SecurityUser.getUserId(), id)); } @GetMapping("/parent-history") @Operation(summary = "家长执行记录列表(无分数)") @RequiresPermissions("sys:role:normal") public Result historyList( @RequestParam("macAddress") String macAddress, @RequestParam("agentId") String agentId, @RequestParam(value = "limit", required = false) Integer limit) { return new Result().ok( parentHistoryService.list(SecurityUser.getUserId(), macAddress, agentId, limit)); } @GetMapping("/parent-history/{id}") @Operation(summary = "家长执行记录详情(跟读句文本/录音,泛听完成态,对话类聊天)") @RequiresPermissions("sys:role:normal") public Result historyDetail( @PathVariable("id") String id, @RequestParam("macAddress") String macAddress, @RequestParam("agentId") String agentId) { return new Result().ok( parentHistoryService.get(SecurityUser.getUserId(), macAddress, agentId, id)); } }