|
@@ -8,6 +8,8 @@ import com.haha.entity.Order;
|
|
|
import com.haha.service.OrderService;
|
|
import com.haha.service.OrderService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.http.CacheControl;
|
|
|
|
|
+import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
@@ -15,6 +17,7 @@ import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
import java.time.LocalTime;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 订单管理控制器
|
|
* 订单管理控制器
|
|
@@ -23,10 +26,10 @@ import java.util.Map;
|
|
|
@RestController
|
|
@RestController
|
|
|
@RequestMapping("/order")
|
|
@RequestMapping("/order")
|
|
|
public class OrderController {
|
|
public class OrderController {
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private OrderService orderService;
|
|
private OrderService orderService;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 分页查询订单列表
|
|
* 分页查询订单列表
|
|
|
* @param params 查询参数
|
|
* @param params 查询参数
|
|
@@ -38,17 +41,17 @@ public class OrderController {
|
|
|
// 分页参数(处理空字符串)
|
|
// 分页参数(处理空字符串)
|
|
|
int page = 1;
|
|
int page = 1;
|
|
|
int pageSize = 10;
|
|
int pageSize = 10;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
Object pageObj = params.get("page");
|
|
Object pageObj = params.get("page");
|
|
|
if (pageObj != null && !pageObj.toString().isEmpty()) {
|
|
if (pageObj != null && !pageObj.toString().isEmpty()) {
|
|
|
page = Integer.parseInt(pageObj.toString());
|
|
page = Integer.parseInt(pageObj.toString());
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
Object pageSizeObj = params.get("pageSize");
|
|
Object pageSizeObj = params.get("pageSize");
|
|
|
if (pageSizeObj != null && !pageSizeObj.toString().isEmpty()) {
|
|
if (pageSizeObj != null && !pageSizeObj.toString().isEmpty()) {
|
|
|
pageSize = Integer.parseInt(pageSizeObj.toString());
|
|
pageSize = Integer.parseInt(pageSizeObj.toString());
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 查询条件
|
|
// 查询条件
|
|
|
String orderNo = (String) params.get("orderNo");
|
|
String orderNo = (String) params.get("orderNo");
|
|
|
String deviceId = (String) params.get("deviceId");
|
|
String deviceId = (String) params.get("deviceId");
|
|
@@ -60,14 +63,14 @@ public class OrderController {
|
|
|
}
|
|
}
|
|
|
String startDate = (String) params.get("startDate");
|
|
String startDate = (String) params.get("startDate");
|
|
|
String endDate = (String) params.get("endDate");
|
|
String endDate = (String) params.get("endDate");
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 构建查询条件
|
|
// 构建查询条件
|
|
|
LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
|
|
LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
|
|
|
wrapper.like(orderNo != null && !orderNo.isEmpty(), Order::getOrderNo, orderNo)
|
|
wrapper.like(orderNo != null && !orderNo.isEmpty(), Order::getOrderNo, orderNo)
|
|
|
.like(deviceId != null && !deviceId.isEmpty(), Order::getDeviceId, deviceId)
|
|
.like(deviceId != null && !deviceId.isEmpty(), Order::getDeviceId, deviceId)
|
|
|
.eq(payStatus != null && !payStatus.isEmpty(), Order::getPayStatus, payStatus)
|
|
.eq(payStatus != null && !payStatus.isEmpty(), Order::getPayStatus, payStatus)
|
|
|
.eq(status != null, Order::getStatus, status);
|
|
.eq(status != null, Order::getStatus, status);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 时间范围查询
|
|
// 时间范围查询
|
|
|
if (startDate != null && !startDate.isEmpty()) {
|
|
if (startDate != null && !startDate.isEmpty()) {
|
|
|
LocalDateTime startDateTime = LocalDate.parse(startDate).atStartOfDay();
|
|
LocalDateTime startDateTime = LocalDate.parse(startDate).atStartOfDay();
|
|
@@ -77,33 +80,33 @@ public class OrderController {
|
|
|
LocalDateTime endDateTime = LocalDate.parse(endDate).atTime(LocalTime.MAX);
|
|
LocalDateTime endDateTime = LocalDate.parse(endDate).atTime(LocalTime.MAX);
|
|
|
wrapper.le(Order::getCreateTime, endDateTime);
|
|
wrapper.le(Order::getCreateTime, endDateTime);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 按创建时间倒序
|
|
// 按创建时间倒序
|
|
|
wrapper.orderByDesc(Order::getCreateTime);
|
|
wrapper.orderByDesc(Order::getCreateTime);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 分页查询
|
|
// 分页查询
|
|
|
Page<Order> pageResult = new Page<>(page, pageSize);
|
|
Page<Order> pageResult = new Page<>(page, pageSize);
|
|
|
IPage<Order> orderPage = orderService.page(pageResult, wrapper);
|
|
IPage<Order> orderPage = orderService.page(pageResult, wrapper);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 填充标签字段
|
|
// 填充标签字段
|
|
|
for (Order order : orderPage.getRecords()) {
|
|
for (Order order : orderPage.getRecords()) {
|
|
|
fillOrderLabels(order);
|
|
fillOrderLabels(order);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
Map<String, Object> data = new HashMap<>();
|
|
Map<String, Object> data = new HashMap<>();
|
|
|
data.put("list", orderPage.getRecords());
|
|
data.put("list", orderPage.getRecords());
|
|
|
data.put("total", orderPage.getTotal());
|
|
data.put("total", orderPage.getTotal());
|
|
|
data.put("pageSize", orderPage.getSize());
|
|
data.put("pageSize", orderPage.getSize());
|
|
|
data.put("currentPage", orderPage.getCurrent());
|
|
data.put("currentPage", orderPage.getCurrent());
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
return Result.success("查询成功", data);
|
|
return Result.success("查询成功", data);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("查询订单列表失败: {}", e.getMessage(), e);
|
|
log.error("查询订单列表失败: {}", e.getMessage(), e);
|
|
|
return Result.error(500, "查询订单列表失败: " + e.getMessage());
|
|
return Result.error(500, "查询订单列表失败: " + e.getMessage());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 获取订单详情
|
|
* 获取订单详情
|
|
|
* @param id 订单ID
|
|
* @param id 订单ID
|
|
@@ -123,7 +126,7 @@ public class OrderController {
|
|
|
return Result.error(500, "查询订单详情失败: " + e.getMessage());
|
|
return Result.error(500, "查询订单详情失败: " + e.getMessage());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 获取订单统计数据
|
|
* 获取订单统计数据
|
|
|
* @return 统计数据
|
|
* @return 统计数据
|
|
@@ -132,39 +135,39 @@ public class OrderController {
|
|
|
public Result<Map<String, Object>> getStatistics() {
|
|
public Result<Map<String, Object>> getStatistics() {
|
|
|
try {
|
|
try {
|
|
|
Map<String, Object> statistics = new HashMap<>();
|
|
Map<String, Object> statistics = new HashMap<>();
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 总订单数
|
|
// 总订单数
|
|
|
long totalOrders = orderService.count();
|
|
long totalOrders = orderService.count();
|
|
|
statistics.put("totalOrders", totalOrders);
|
|
statistics.put("totalOrders", totalOrders);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 今日订单数
|
|
// 今日订单数
|
|
|
LocalDateTime todayStart = LocalDate.now().atStartOfDay();
|
|
LocalDateTime todayStart = LocalDate.now().atStartOfDay();
|
|
|
long todayOrders = orderService.lambdaQuery()
|
|
long todayOrders = orderService.lambdaQuery()
|
|
|
.ge(Order::getCreateTime, todayStart)
|
|
.ge(Order::getCreateTime, todayStart)
|
|
|
.count();
|
|
.count();
|
|
|
statistics.put("todayOrders", todayOrders);
|
|
statistics.put("todayOrders", todayOrders);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 各状态订单数
|
|
// 各状态订单数
|
|
|
long unpaidOrders = orderService.lambdaQuery()
|
|
long unpaidOrders = orderService.lambdaQuery()
|
|
|
.eq(Order::getPayStatus, Order.PAY_STATUS_未支付)
|
|
.eq(Order::getPayStatus, Order.PAY_STATUS_未支付)
|
|
|
.count();
|
|
.count();
|
|
|
statistics.put("unpaidOrders", unpaidOrders);
|
|
statistics.put("unpaidOrders", unpaidOrders);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
long completedOrders = orderService.lambdaQuery()
|
|
long completedOrders = orderService.lambdaQuery()
|
|
|
.eq(Order::getStatus, Order.ORDER_STATUS_已完成)
|
|
.eq(Order::getStatus, Order.ORDER_STATUS_已完成)
|
|
|
.count();
|
|
.count();
|
|
|
statistics.put("completedOrders", completedOrders);
|
|
statistics.put("completedOrders", completedOrders);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
long cancelledOrders = orderService.lambdaQuery()
|
|
long cancelledOrders = orderService.lambdaQuery()
|
|
|
.eq(Order::getStatus, Order.ORDER_STATUS_已取消)
|
|
.eq(Order::getStatus, Order.ORDER_STATUS_已取消)
|
|
|
.count();
|
|
.count();
|
|
|
statistics.put("cancelledOrders", cancelledOrders);
|
|
statistics.put("cancelledOrders", cancelledOrders);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
long refundOrders = orderService.lambdaQuery()
|
|
long refundOrders = orderService.lambdaQuery()
|
|
|
.eq(Order::getPayStatus, Order.PAY_STATUS_已退款)
|
|
.eq(Order::getPayStatus, Order.PAY_STATUS_已退款)
|
|
|
.count();
|
|
.count();
|
|
|
statistics.put("refundOrders", refundOrders);
|
|
statistics.put("refundOrders", refundOrders);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 总销售额(已完成订单)
|
|
// 总销售额(已完成订单)
|
|
|
Double totalAmount = orderService.lambdaQuery()
|
|
Double totalAmount = orderService.lambdaQuery()
|
|
|
.eq(Order::getStatus, Order.ORDER_STATUS_已完成)
|
|
.eq(Order::getStatus, Order.ORDER_STATUS_已完成)
|
|
@@ -174,7 +177,7 @@ public class OrderController {
|
|
|
.mapToDouble(Order::getTotalAmount)
|
|
.mapToDouble(Order::getTotalAmount)
|
|
|
.sum();
|
|
.sum();
|
|
|
statistics.put("totalAmount", String.format("%.2f", totalAmount));
|
|
statistics.put("totalAmount", String.format("%.2f", totalAmount));
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 今日销售额
|
|
// 今日销售额
|
|
|
Double todayAmount = orderService.lambdaQuery()
|
|
Double todayAmount = orderService.lambdaQuery()
|
|
|
.ge(Order::getCreateTime, todayStart)
|
|
.ge(Order::getCreateTime, todayStart)
|
|
@@ -185,19 +188,19 @@ public class OrderController {
|
|
|
.mapToDouble(Order::getTotalAmount)
|
|
.mapToDouble(Order::getTotalAmount)
|
|
|
.sum();
|
|
.sum();
|
|
|
statistics.put("todayAmount", String.format("%.2f", todayAmount));
|
|
statistics.put("todayAmount", String.format("%.2f", todayAmount));
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 平均订单金额
|
|
// 平均订单金额
|
|
|
double averageAmount = completedOrders > 0 ? totalAmount / completedOrders : 0;
|
|
double averageAmount = completedOrders > 0 ? totalAmount / completedOrders : 0;
|
|
|
statistics.put("averageAmount", String.format("%.2f", averageAmount));
|
|
statistics.put("averageAmount", String.format("%.2f", averageAmount));
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
return Result.success("查询成功", statistics);
|
|
return Result.success("查询成功", statistics);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("查询订单统计失败: {}", e.getMessage(), e);
|
|
log.error("查询订单统计失败: {}", e.getMessage(), e);
|
|
|
return Result.error(500, "查询订单统计失败: " + e.getMessage());
|
|
return Result.error(500, "查询订单统计失败: " + e.getMessage());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 订单退款
|
|
* 订单退款
|
|
|
* @param id 订单ID
|
|
* @param id 订单ID
|
|
@@ -211,30 +214,30 @@ public class OrderController {
|
|
|
if (order == null) {
|
|
if (order == null) {
|
|
|
return Result.error(404, "订单不存在");
|
|
return Result.error(404, "订单不存在");
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 检查订单状态
|
|
// 检查订单状态
|
|
|
if (!Order.PAY_STATUS_已支付.equals(order.getPayStatus())) {
|
|
if (!Order.PAY_STATUS_已支付.equals(order.getPayStatus())) {
|
|
|
return Result.error(400, "只有已支付的订单才能退款");
|
|
return Result.error(400, "只有已支付的订单才能退款");
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
String reason = (String) params.get("reason");
|
|
String reason = (String) params.get("reason");
|
|
|
log.info("订单退款: orderId={}, orderNo={}, reason={}", id, order.getOrderNo(), reason);
|
|
log.info("订单退款: orderId={}, orderNo={}, reason={}", id, order.getOrderNo(), reason);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 更新支付状态为已退款
|
|
// 更新支付状态为已退款
|
|
|
boolean success = orderService.updatePayStatus(order.getOrderNo(), Order.PAY_STATUS_已退款);
|
|
boolean success = orderService.updatePayStatus(order.getOrderNo(), Order.PAY_STATUS_已退款);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
if (success) {
|
|
if (success) {
|
|
|
return Result.success("退款成功", null);
|
|
return Result.success("退款成功", null);
|
|
|
} else {
|
|
} else {
|
|
|
return Result.error(500, "退款失败");
|
|
return Result.error(500, "退款失败");
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("订单退款失败: orderId={}, error={}", id, e.getMessage(), e);
|
|
log.error("订单退款失败: orderId={}, error={}", id, e.getMessage(), e);
|
|
|
return Result.error(500, "退款失败: " + e.getMessage());
|
|
return Result.error(500, "退款失败: " + e.getMessage());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 填充订单标签字段
|
|
* 填充订单标签字段
|
|
|
* @param order 订单对象
|
|
* @param order 订单对象
|
|
@@ -254,7 +257,7 @@ public class OrderController {
|
|
|
default:
|
|
default:
|
|
|
order.setPayStatusLabel("未知");
|
|
order.setPayStatusLabel("未知");
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 填充订单状态标签
|
|
// 填充订单状态标签
|
|
|
switch (order.getStatus()) {
|
|
switch (order.getStatus()) {
|
|
|
case Order.ORDER_STATUS_已取消:
|
|
case Order.ORDER_STATUS_已取消:
|