package com.zxyj.controller; import com.zxyj.common.Result; import com.zxyj.dto.ApplyPackageDTO; import com.zxyj.entity.TaskPlanInstance; import com.zxyj.entity.TaskPlanItem; import com.zxyj.entity.TaskTemplatePackage; import com.zxyj.entity.TaskTemplateItem; import com.zxyj.service.TaskPlanService; import com.zxyj.service.TaskTemplatePackageService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; @Tag(name = "套餐市场", description = "家长浏览、购买、应用套餐等接口") @RestController @RequestMapping("/api/market") public class MarketController { @Autowired private TaskTemplatePackageService packageService; @Autowired private TaskPlanService planService; /** * 获取公开套餐列表 (市场) */ @Operation(summary = "获取公开套餐列表") @PostMapping("/packages") public Result> getPublicPackages(@RequestBody(required = false) Map params) { String category = params != null && params.get("category") != null ? params.get("category").toString() : null; List packages = packageService.getPublicPackages(category); return Result.success(packages); } /** * 获取套餐详情 */ @Operation(summary = "获取套餐详情") @PostMapping("/packages/{id}") public Result getPackageDetail(@PathVariable Long id) { TaskTemplatePackage pkg = packageService.getPackageById(id); return Result.success(pkg); } /** * 获取套餐的任务项列表 */ @Operation(summary = "获取套餐任务项列表") @PostMapping("/packages/{id}/items") public Result> getPackageItems(@PathVariable Long id) { List items = packageService.getPackageItems(id); return Result.success(items); } /** * 通过分享码获取套餐 */ @Operation(summary = "通过分享码获取套餐") @PostMapping("/share/{code}") public Result getPackageByShareCode(@PathVariable String code) { TaskTemplatePackage pkg = packageService.getPackageByShareCode(code); if (pkg == null) { return Result.error("分享码无效"); } return Result.success(pkg); } /** * 购买并应用套餐 */ @Operation(summary = "购买并应用套餐") @PostMapping("/packages/{id}/purchase") public Result purchasePackage( @PathVariable Long id, @RequestBody ApplyPackageDTO dto, @RequestAttribute("userId") Long userId, @RequestAttribute("familyId") Long familyId) { dto.setPackageId(id); TaskPlanInstance instance = planService.applyPackage(dto, familyId); return Result.success(instance); } /** * 获取我的任务计划列表 */ @Operation(summary = "获取我的任务计划") @PostMapping("/plans") public Result> getMyPlans(@RequestAttribute("familyId") Long familyId) { List plans = planService.getFamilyPlans(familyId); return Result.success(plans); } /** * 获取计划详情 */ @Operation(summary = "获取计划详情") @PostMapping("/plans/{id}") public Result getPlanDetail(@PathVariable Long id) { TaskPlanInstance plan = planService.getPlanById(id); return Result.success(plan); } /** * 获取计划的任务项 */ @Operation(summary = "获取计划任务项") @PostMapping("/plans/{id}/items") public Result> getPlanItems(@PathVariable Long id) { List items = planService.getPlanItems(id); return Result.success(items); } /** * 取消计划 */ @Operation(summary = "取消计划") @PostMapping("/plans/{id}/cancel") public Result cancelPlan(@PathVariable Long id) { boolean success = planService.cancelPlan(id); return Result.success(success); } }