Skip to content

Commit 6a940e7

Browse files
committed
封装返回DTO作工具类,更好体现一个多,多对多
新增方法:根据订单id查询对应的商品(实现一对多和转换一对多DTO基础) 给所有的多对多,一对多套上关联DTO
1 parent 07bce2a commit 6a940e7

17 files changed

Lines changed: 376 additions & 43 deletions

File tree

.idea/copilot.data.migration.agent.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/copilot.data.migration.ask.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/copilot.data.migration.ask2agent.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/copilot.data.migration.edit.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/cors-fetch-demo.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ <h1>跨域请求示例🌵🌵🌵</h1>
2222
headers: { 'Content-Type': 'application/json' },
2323
credentials: 'include',
2424
body: JSON.stringify({
25-
userId: 8,//改完之后,后端和网页都要重新启动/刷新
25+
userId: 10,//改完之后,后端和网页都要重新启动/刷新
2626
password: '123456'
2727
})
2828
});
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package com.drawbluecup.convert;
2+
3+
import com.drawbluecup.dto.order.OrderRespDTOWithUserAndProducts;
4+
import com.drawbluecup.dto.product.ProductRespDTOWithout;
5+
import com.drawbluecup.dto.user.UserRespDTOWithOrderwithproduct;
6+
import com.drawbluecup.dto.user.UserRespDTOWithout;
7+
import com.drawbluecup.entity.Order;
8+
import com.drawbluecup.entity.Product;
9+
import com.drawbluecup.entity.User;
10+
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
14+
/**
15+
* 手动DTO转换工具类(全项目复用)
16+
* 核心:空值保护 + 逻辑统一 + 批量转换
17+
*/
18+
public class DTOConvertUtils {
19+
20+
// ==================== 1. 单个User → UserRespDTOWithout ====================
21+
public static UserRespDTOWithout convertUserToDTO(User user) {
22+
// 空值保护:避免空指针
23+
if (user == null) {
24+
return null;
25+
}
26+
UserRespDTOWithout userDTO = new UserRespDTOWithout();
27+
userDTO.setId(user.getId());
28+
userDTO.setName(user.getName());
29+
userDTO.setPhone(user.getPhone());
30+
userDTO.setCreateTime(user.getCreateTime());
31+
userDTO.setUpdateTime(user.getUpdateTime());
32+
return userDTO;
33+
}
34+
35+
// ==================== 2. 单个Product → ProductRespDTOWithout ====================
36+
public static ProductRespDTOWithout convertProductToDTO(Product product) {
37+
if (product == null) {
38+
return null;
39+
}
40+
ProductRespDTOWithout productDTO = new ProductRespDTOWithout();
41+
productDTO.setId(product.getId());
42+
productDTO.setName(product.getName());
43+
// 如需添加商品其他字段(如价格),只改这里一次即可
44+
// productDTO.setPrice(product.getPrice());
45+
return productDTO;
46+
}
47+
48+
// ==================== 3. Product列表 → ProductRespDTOWithout列表 ====================
49+
public static List<ProductRespDTOWithout> convertProductListToDTOList(List<Product> productList) {
50+
List<ProductRespDTOWithout> productDTOList = new ArrayList<>();
51+
// 空值保护:避免遍历null列表
52+
if (productList == null || productList.isEmpty()) {
53+
return productDTOList;
54+
}
55+
for (Product product : productList) {
56+
productDTOList.add(convertProductToDTO(product));
57+
}
58+
return productDTOList;
59+
}
60+
61+
// ==================== 4. 单个Order(一对多) → OrderRespDTOWithUserAndProducts(核心) ====================
62+
public static OrderRespDTOWithUserAndProducts convertOrderToDTO(Order order, User user) {
63+
if (order == null) {
64+
return null;
65+
}
66+
OrderRespDTOWithUserAndProducts orderDTO = new OrderRespDTOWithUserAndProducts();
67+
// 1. 订单基础字段
68+
orderDTO.setId(order.getId());
69+
orderDTO.setOrderNo(order.getOrderNo());
70+
orderDTO.setCreateTime(order.getCreateTime());
71+
// 2. 用户信息(复用用户转换方法)
72+
UserRespDTOWithout userDTO = convertUserToDTO(user);
73+
if (userDTO != null) {
74+
orderDTO.setUserId(userDTO.getId());
75+
orderDTO.setUser(userDTO);
76+
}
77+
// 3. 商品列表(复用商品列表转换方法)
78+
orderDTO.setProducts(convertProductListToDTOList(order.getProducts()));
79+
return orderDTO;
80+
}
81+
82+
// ==================== 5. Order列表 → OrderRespDTOWithUserAndProducts列表(批量转换) ====================
83+
public static List<OrderRespDTOWithUserAndProducts> convertOrderListToDTOList(List<Order> orderList,User user) {
84+
List<OrderRespDTOWithUserAndProducts> orderDTOList = new ArrayList<>();
85+
if (orderList == null || orderList.isEmpty()) {
86+
return orderDTOList;
87+
}
88+
// 注意:批量转换时,user需要外部查询后传入,这里先占位,接口中手动处理
89+
for (Order order : orderList) {
90+
orderDTOList.add(convertOrderToDTO(order, user));
91+
}
92+
return orderDTOList;
93+
}
94+
95+
96+
97+
}
98+

drawbluecup-common/src/main/java/com/drawbluecup/dto/order/OrderRespDTO.java

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.drawbluecup.dto.order;
2+
3+
4+
import com.drawbluecup.dto.product.ProductRespDTOWithout;
5+
import com.drawbluecup.dto.user.UserRespDTOWithout;
6+
import com.drawbluecup.entity.Product;
7+
import com.drawbluecup.entity.User;
8+
import io.swagger.v3.oas.annotations.media.Schema;
9+
import lombok.Data;
10+
11+
import java.time.LocalDateTime;
12+
import java.util.List;
13+
14+
15+
@Data
16+
@Schema(name = "OrderRespDTOWithUserAndProducts", description = "订单信息出参(一对多)")// Swagger注解:文档里说明这个DTO的作用
17+
18+
public class OrderRespDTOWithUserAndProducts {
19+
20+
@Schema(description = "订单主键id")
21+
private Integer id;
22+
@Schema(description = "订单编号")
23+
private String orderNo;
24+
@Schema(description = "订单创建时间")
25+
private LocalDateTime createTime;
26+
27+
@Schema(description = "所属用户id")
28+
private Integer userId;
29+
@Schema(description = "所属用户")
30+
private UserRespDTOWithout user;
31+
32+
@Schema(description = "包含商品")
33+
private List<ProductRespDTOWithout> products;
34+
35+
36+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.drawbluecup.dto.product;
2+
3+
import com.drawbluecup.convert.DTOConvertUtils;
4+
import com.drawbluecup.dto.order.OrderRespDTOWithUserAndProducts;
5+
import com.drawbluecup.entity.Order;
6+
import io.swagger.v3.oas.annotations.media.Schema;
7+
import lombok.Data;
8+
9+
import java.util.List;
10+
@Data
11+
public class ProductRespDTOWithOrders {
12+
13+
@Schema(description = "商品主键ID")// 文档里标注字段说明
14+
private Integer id; // 前端需要看的id
15+
16+
@Schema(description = "商品名称")
17+
private String name; // 前端需要看的name
18+
19+
@Schema(description = "拥有订单")
20+
private List<OrderRespDTOWithUserAndProducts> Orders ; // 前端需要看的name
21+
}

drawbluecup-common/src/main/java/com/drawbluecup/dto/product/ProductRespDTOWithout.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
* 商品出参DTO:只包含前端需要展示的字段(比如id+name)
99
*/
1010
@Data
11-
@Schema(name = "ProductRespDTO", description = "商品信息出参")// Swagger注解:文档里说明这个DTO的作用
11+
@Schema(name = "ProductRespDTOWithout", description = "商品信息出参")// Swagger注解:文档里说明这个DTO的作用
1212

1313
public class ProductRespDTOWithout {
1414

15-
@Schema(description = "商品ID")// 文档里标注字段说明
15+
@Schema(description = "商品主键ID")// 文档里标注字段说明
1616
private Integer id; // 前端需要看的id
1717

1818
@Schema(description = "商品名称")

0 commit comments

Comments
 (0)