diff --git a/demo/frontend/src/api/orders.js b/demo/frontend/src/api/orders.js index d40f3c5..9923a89 100644 --- a/demo/frontend/src/api/orders.js +++ b/demo/frontend/src/api/orders.js @@ -52,14 +52,12 @@ export const getOrderStats = () => { return api.get('/orders/stats') } +// 批量删除订单 +export const deleteOrders = (orderIds) => { + return api.delete('/orders/batch', { data: orderIds }) +} - - - - - - - - - - +// 删除单个订单 +export const deleteOrder = (id) => { + return api.delete(`/orders/${id}`) +} \ No newline at end of file diff --git a/demo/frontend/src/views/Orders.vue b/demo/frontend/src/views/Orders.vue index 8718ff2..3bb5cfe 100644 --- a/demo/frontend/src/views/Orders.vue +++ b/demo/frontend/src/views/Orders.vue @@ -1,270 +1,302 @@ - - + \ No newline at end of file diff --git a/demo/src/main/java/com/example/demo/controller/OrderApiController.java b/demo/src/main/java/com/example/demo/controller/OrderApiController.java index 85f3877..2e81573 100644 --- a/demo/src/main/java/com/example/demo/controller/OrderApiController.java +++ b/demo/src/main/java/com/example/demo/controller/OrderApiController.java @@ -385,6 +385,69 @@ public class OrderApiController { } } + /** + * 删除订单 + */ + @DeleteMapping("/{id}") + public ResponseEntity> deleteOrder(@PathVariable Long id, + Authentication authentication) { + try { + User user = (User) authentication.getPrincipal(); + Order order = orderService.findById(id) + .orElseThrow(() -> new RuntimeException("订单不存在")); + + // 检查权限 + if (!user.getRole().equals("ROLE_ADMIN") && !order.getUser().getId().equals(user.getId())) { + return ResponseEntity.badRequest() + .body(createErrorResponse("无权限删除此订单")); + } + + orderService.deleteOrder(id); + + Map response = new HashMap<>(); + response.put("success", true); + response.put("message", "订单删除成功"); + + return ResponseEntity.ok(response); + + } catch (Exception e) { + logger.error("删除订单失败:", e); + return ResponseEntity.badRequest() + .body(createErrorResponse("删除订单失败:" + e.getMessage())); + } + } + + /** + * 批量删除订单 + */ + @DeleteMapping("/batch") + public ResponseEntity> deleteOrders(@RequestBody List orderIds, + Authentication authentication) { + try { + User user = (User) authentication.getPrincipal(); + + // 只有管理员可以批量删除 + if (!user.getRole().equals("ROLE_ADMIN")) { + return ResponseEntity.badRequest() + .body(createErrorResponse("无权限批量删除订单")); + } + + int deletedCount = orderService.deleteOrdersByIds(orderIds); + + Map response = new HashMap<>(); + response.put("success", true); + response.put("message", "批量删除成功,共删除 " + deletedCount + " 个订单"); + response.put("deletedCount", deletedCount); + + return ResponseEntity.ok(response); + + } catch (Exception e) { + logger.error("批量删除订单失败:", e); + return ResponseEntity.badRequest() + .body(createErrorResponse("批量删除订单失败:" + e.getMessage())); + } + } + private Map createErrorResponse(String message) { Map response = new HashMap<>(); response.put("success", false); diff --git a/demo/src/main/java/com/example/demo/service/OrderService.java b/demo/src/main/java/com/example/demo/service/OrderService.java index b5482ae..dc1bddb 100644 --- a/demo/src/main/java/com/example/demo/service/OrderService.java +++ b/demo/src/main/java/com/example/demo/service/OrderService.java @@ -489,6 +489,40 @@ public class OrderService { return stats; } + /** + * 批量删除订单 + */ + public int deleteOrdersByIds(List orderIds) { + try { + int deletedCount = 0; + + for (Long orderId : orderIds) { + try { + Order order = orderRepository.findById(orderId) + .orElseThrow(() -> new RuntimeException("订单不存在:" + orderId)); + + // 只有已取消或已退款的订单才能删除 + if (order.getStatus() == OrderStatus.CANCELLED || order.getStatus() == OrderStatus.REFUNDED) { + orderRepository.delete(order); + deletedCount++; + logger.info("订单删除成功,订单号:{}", order.getOrderNumber()); + } else { + logger.warn("订单状态不允许删除,订单号:{},状态:{}", order.getOrderNumber(), order.getStatus()); + } + } catch (Exception e) { + logger.warn("删除订单失败,订单ID:{}", orderId, e); + } + } + + logger.info("批量删除订单完成,成功删除:{},总数:{}", deletedCount, orderIds.size()); + return deletedCount; + + } catch (Exception e) { + logger.error("批量删除订单失败:", e); + throw new RuntimeException("批量删除订单失败:" + e.getMessage()); + } + } + /** * 获取用户订单统计 */