GuideOrderController.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package com.zxyj.controller.guide;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import com.zxyj.common.Result;
  5. import com.zxyj.entity.PackageOrder;
  6. import com.zxyj.mapper.PackageOrderMapper;
  7. import io.swagger.v3.oas.annotations.Operation;
  8. import io.swagger.v3.oas.annotations.tags.Tag;
  9. import org.springframework.web.bind.annotation.*;
  10. import javax.annotation.Resource;
  11. import java.math.BigDecimal;
  12. import java.util.HashMap;
  13. import java.util.Map;
  14. @Tag(name = "成长规划师订单", description = "成长规划师订单与佣金接口")
  15. @RestController
  16. @RequestMapping("/api/guide/orders")
  17. public class GuideOrderController {
  18. @Resource
  19. private PackageOrderMapper packageOrderMapper;
  20. @PostMapping("/list")
  21. @Operation(summary = "获取订单列表")
  22. public Result<Map<String, Object>> getOrders(@RequestAttribute("userId") Long guideId,
  23. @RequestBody(required = false) Map<String, Object> params) {
  24. Integer page = (params != null && params.get("page") != null) ? Integer.valueOf(params.get("page").toString()) : 1;
  25. Integer size = (params != null && params.get("size") != null) ? Integer.valueOf(params.get("size").toString()) : 10;
  26. String status = (params != null && params.get("status") != null) ? params.get("status").toString() : null;
  27. LambdaQueryWrapper<PackageOrder> wrapper = new LambdaQueryWrapper<>();
  28. wrapper.eq(PackageOrder::getGuideId, guideId);
  29. if (status != null && !status.isEmpty()) {
  30. wrapper.eq(PackageOrder::getStatus, status);
  31. }
  32. wrapper.orderByDesc(PackageOrder::getCreatedAt);
  33. Page<PackageOrder> pagination = new Page<>(page, size);
  34. Page<PackageOrder> result = packageOrderMapper.selectPage(pagination, wrapper);
  35. Map<String, Object> response = new HashMap<>();
  36. response.put("records", result.getRecords());
  37. response.put("total", result.getTotal());
  38. response.put("pages", result.getPages());
  39. response.put("current", result.getCurrent());
  40. return Result.success(response);
  41. }
  42. @PostMapping("/stats")
  43. @Operation(summary = "获取订单统计")
  44. public Result<Map<String, Object>> getOrderStats(@RequestAttribute("userId") Long guideId) {
  45. LambdaQueryWrapper<PackageOrder> wrapper = new LambdaQueryWrapper<>();
  46. wrapper.eq(PackageOrder::getGuideId, guideId);
  47. Long totalOrders = packageOrderMapper.selectCount(wrapper);
  48. Long paidOrders = packageOrderMapper.selectCount(new LambdaQueryWrapper<PackageOrder>()
  49. .eq(PackageOrder::getGuideId, guideId)
  50. .eq(PackageOrder::getStatus, "paid"));
  51. BigDecimal totalRevenue = packageOrderMapper.selectList(new LambdaQueryWrapper<PackageOrder>()
  52. .eq(PackageOrder::getGuideId, guideId)
  53. .eq(PackageOrder::getStatus, "paid"))
  54. .stream()
  55. .map(PackageOrder::getPrice)
  56. .reduce(BigDecimal.ZERO, BigDecimal::add);
  57. Map<String, Object> stats = new HashMap<>();
  58. stats.put("totalOrders", totalOrders);
  59. stats.put("paidOrders", paidOrders);
  60. stats.put("totalRevenue", totalRevenue);
  61. stats.put("pendingOrders", totalOrders - paidOrders);
  62. return Result.success(stats);
  63. }
  64. @PostMapping("/detail")
  65. @Operation(summary = "获取订单详情")
  66. public Result<PackageOrder> getOrderDetail(@RequestAttribute("userId") Long guideId,
  67. @RequestBody Map<String, Object> params) {
  68. if (params == null || params.get("id") == null) {
  69. return Result.error("缺少订单ID");
  70. }
  71. Long id = Long.valueOf(params.get("id").toString());
  72. PackageOrder order = packageOrderMapper.selectById(id);
  73. if (order == null) {
  74. return Result.error("订单不存在");
  75. }
  76. if (!order.getGuideId().equals(guideId)) {
  77. return Result.error("无权查看");
  78. }
  79. return Result.success(order);
  80. }
  81. }