package com.zxyj.controller.guide; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zxyj.common.Result; import com.zxyj.entity.PackageOrder; import com.zxyj.mapper.PackageOrderMapper; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; @Tag(name = "成长规划师订单", description = "成长规划师订单与佣金接口") @RestController @RequestMapping("/api/guide/orders") public class GuideOrderController { @Resource private PackageOrderMapper packageOrderMapper; @PostMapping("/list") @Operation(summary = "获取订单列表") public Result> getOrders(@RequestAttribute("userId") Long guideId, @RequestBody(required = false) Map params) { Integer page = (params != null && params.get("page") != null) ? Integer.valueOf(params.get("page").toString()) : 1; Integer size = (params != null && params.get("size") != null) ? Integer.valueOf(params.get("size").toString()) : 10; String status = (params != null && params.get("status") != null) ? params.get("status").toString() : null; LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(PackageOrder::getGuideId, guideId); if (status != null && !status.isEmpty()) { wrapper.eq(PackageOrder::getStatus, status); } wrapper.orderByDesc(PackageOrder::getCreatedAt); Page pagination = new Page<>(page, size); Page result = packageOrderMapper.selectPage(pagination, wrapper); Map response = new HashMap<>(); response.put("records", result.getRecords()); response.put("total", result.getTotal()); response.put("pages", result.getPages()); response.put("current", result.getCurrent()); return Result.success(response); } @PostMapping("/stats") @Operation(summary = "获取订单统计") public Result> getOrderStats(@RequestAttribute("userId") Long guideId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(PackageOrder::getGuideId, guideId); Long totalOrders = packageOrderMapper.selectCount(wrapper); Long paidOrders = packageOrderMapper.selectCount(new LambdaQueryWrapper() .eq(PackageOrder::getGuideId, guideId) .eq(PackageOrder::getStatus, "paid")); BigDecimal totalRevenue = packageOrderMapper.selectList(new LambdaQueryWrapper() .eq(PackageOrder::getGuideId, guideId) .eq(PackageOrder::getStatus, "paid")) .stream() .map(PackageOrder::getPrice) .reduce(BigDecimal.ZERO, BigDecimal::add); Map stats = new HashMap<>(); stats.put("totalOrders", totalOrders); stats.put("paidOrders", paidOrders); stats.put("totalRevenue", totalRevenue); stats.put("pendingOrders", totalOrders - paidOrders); return Result.success(stats); } @PostMapping("/detail") @Operation(summary = "获取订单详情") public Result getOrderDetail(@RequestAttribute("userId") Long guideId, @RequestBody Map params) { if (params == null || params.get("id") == null) { return Result.error("缺少订单ID"); } Long id = Long.valueOf(params.get("id").toString()); PackageOrder order = packageOrderMapper.selectById(id); if (order == null) { return Result.error("订单不存在"); } if (!order.getGuideId().equals(guideId)) { return Result.error("无权查看"); } return Result.success(order); } }