AssessmentOrderController.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package com.etotem.cfc.controller.assessment;
  2. import com.etotem.cfc.common.Result;
  3. import com.etotem.cfc.entity.AssessmentOrder;
  4. import com.etotem.cfc.entity.AssessmentAppointment;
  5. import com.etotem.cfc.service.AssessmentOrderService;
  6. import com.etotem.cfc.service.AssessmentAppointmentService;
  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.util.*;
  12. import java.util.stream.Collectors;
  13. @Tag(name = "评估订单", description = "评估订单与支付")
  14. @RestController
  15. @RequestMapping("/api/assessment/order")
  16. public class AssessmentOrderController {
  17. @Resource
  18. private AssessmentOrderService orderService;
  19. @Resource
  20. private AssessmentAppointmentService appointmentService;
  21. @Resource
  22. private com.etotem.cfc.mapper.FamilyMapper familyMapper;
  23. @Operation(summary = "创建评估订单")
  24. @PostMapping("/create")
  25. public Result<Map<String, Object>> createOrder(
  26. @RequestAttribute("userId") Long userId,
  27. @RequestBody Map<String, Object> body) {
  28. Long familyId = Long.valueOf(body.get("familyId").toString());
  29. Long childId = body.get("childId") != null ? Long.valueOf(body.get("childId").toString()) : null;
  30. Long guideId = null;
  31. if (body.get("guideId") != null) {
  32. guideId = Long.valueOf(body.get("guideId").toString());
  33. }
  34. // 未指定规划师时,尝试使用家庭绑定的规划师
  35. if (guideId == null) {
  36. com.etotem.cfc.entity.Family family = familyMapper.selectById(familyId);
  37. if (family != null && family.getTeacherId() != null) {
  38. guideId = family.getTeacherId();
  39. }
  40. }
  41. Long packageId = Long.valueOf(body.get("packageId").toString());
  42. String guideName = body.get("guideName") != null ? body.get("guideName").toString() : null;
  43. String packageName = body.get("packageName") != null ? body.get("packageName").toString() : null;
  44. Long totalPrice = body.get("totalPrice") != null ? Long.valueOf(body.get("totalPrice").toString()) : 0L;
  45. Long discountAmount = body.get("discountAmount") != null ? Long.valueOf(body.get("discountAmount").toString()) : 0L;
  46. AssessmentOrder order = orderService.createOrder(
  47. familyId, userId, childId, guideId, packageId,
  48. guideName, packageName, totalPrice, discountAmount);
  49. Map<String, Object> result = new HashMap<>();
  50. result.put("orderNo", order.getOrderNo());
  51. result.put("actualPrice", order.getActualPrice());
  52. result.put("status", order.getStatus());
  53. return Result.success(result);
  54. }
  55. @Operation(summary = "获取订单详情")
  56. @PostMapping("/detail")
  57. public Result<AssessmentOrder> getOrderDetail(
  58. @RequestAttribute("userId") Long userId,
  59. @RequestBody Map<String, Object> body) {
  60. String orderNo = body.get("orderNo") != null ? body.get("orderNo").toString() : null;
  61. if (orderNo == null) return Result.error("订单号不能为空");
  62. AssessmentOrder order = orderService.getByOrderNo(orderNo);
  63. if (order == null) return Result.error("订单不存在");
  64. if (!order.getUserId().equals(userId)) return Result.error("无权查看");
  65. return Result.success(order);
  66. }
  67. @Operation(summary = "我的订单列表")
  68. @PostMapping("/my-orders")
  69. public Result<List<AssessmentOrder>> getMyOrders(@RequestAttribute("userId") Long userId) {
  70. List<AssessmentOrder> orders = orderService.getByUserId(userId);
  71. return Result.success(orders);
  72. }
  73. @Operation(summary = "支付订单")
  74. @PostMapping("/pay")
  75. public Result<Map<String, Object>> payOrder(
  76. @RequestAttribute("userId") Long userId,
  77. @RequestBody Map<String, Object> body) {
  78. String orderNo = body.get("orderNo") != null ? body.get("orderNo").toString() : null;
  79. String payType = body.get("payType") != null ? body.get("payType").toString() : "wechat";
  80. if (orderNo == null) return Result.error("订单号不能为空");
  81. boolean success = orderService.payOrder(orderNo, payType);
  82. if (!success) return Result.error("支付失败");
  83. // 支付成功后确认预约
  84. AssessmentOrder order = orderService.getByOrderNo(orderNo);
  85. if (order != null && order.getChildId() != null) {
  86. appointmentService.confirmAppointmentByOrder(order);
  87. }
  88. Map<String, Object> result = new HashMap<>();
  89. result.put("orderNo", orderNo);
  90. result.put("payTime", new Date());
  91. result.put("status", "paid");
  92. return Result.success(result);
  93. }
  94. @Operation(summary = "取消订单")
  95. @PostMapping("/cancel")
  96. public Result<Boolean> cancelOrder(
  97. @RequestAttribute("userId") Long userId,
  98. @RequestBody Map<String, Object> body) {
  99. String orderNo = body.get("orderNo") != null ? body.get("orderNo").toString() : null;
  100. if (orderNo == null) return Result.error("订单号不能为空");
  101. AssessmentOrder order = orderService.getByOrderNo(orderNo);
  102. if (order == null) return Result.error("订单不存在");
  103. if (!order.getUserId().equals(userId)) return Result.error("无权操作");
  104. boolean success = orderService.cancelOrder(orderNo);
  105. if (!success) return Result.error("取消失败,仅待支付订单可取消");
  106. return Result.success(true);
  107. }
  108. @Operation(summary = "退款订单")
  109. @PostMapping("/refund")
  110. public Result<Boolean> refundOrder(
  111. @RequestAttribute("userId") Long userId,
  112. @RequestBody Map<String, Object> body) {
  113. String orderNo = body.get("orderNo") != null ? body.get("orderNo").toString() : null;
  114. if (orderNo == null) return Result.error("订单号不能为空");
  115. AssessmentOrder order = orderService.getByOrderNo(orderNo);
  116. if (order == null) return Result.error("订单不存在");
  117. if (!order.getUserId().equals(userId)) return Result.error("无权操作");
  118. boolean success = orderService.refundOrder(orderNo);
  119. if (!success) return Result.error("退款失败,仅已支付订单可退款");
  120. return Result.success(true);
  121. }
  122. }