我们使用 Sa-Token 实现了用户认证和授权功能,并添加了自定义的 @CurrentUser 注解,方便在控制器方法中获取当前登录用户ID。
- Sa-Token 集成:实现了基于角色的访问控制,如
/api/admin/**路径需要 admin 角色 - @CurrentUser 注解:自定义注解,用于在控制器方法中自动注入当前登录用户ID
- CurrentUserMethodArgumentResolver:注解解析器,使用 Sa-Token 获取当前用户ID
详细文档请参考 认证与授权实现文档。
我们实现了SKU规格选择逻辑,允许商品有多个不同规格的SKU,每个SKU可以关联多个属性。主要包含以下功能:
- 属性管理:实现了商品属性的CRUD操作,支持按分类管理属性
- SKU属性关联:实现了SKU与属性的关联,支持为每个SKU设置不同的属性值
- SKU与属性组合DTO:创建了DTO类,用于前后端交互时同时传递SKU信息和属性信息
我们实现了多图片上传与管理功能,支持商品主图和详情图的上传和管理。主要包含以下功能:
- 文件存储服务:实现了本地文件存储服务,支持文件上传、下载、删除等操作
- 多文件上传:支持同时上传多个文件,并返回文件URL列表
- 商品图片管理:实现了商品图片的CRUD操作,支持按SPU和SKU管理图片
- 图片类型支持:支持区分主图和详情图,便于前端展示
我们实现了完整的购物车和订单系统,支持商品加入购物车、下单、支付、发货、确认收货等功能。
- 购物车功能:实现了购物车的添加、修改、删除、选择等功能
- 地址管理:实现了收货地址的增删改查和设置默认地址功能
- 订单流程:实现了订单创建、支付、发货、确认收货、取消等完整流程
- 订单管理:实现了管理员查看订单、发货、取消订单等功能
POST /api/auth/login- 用户登录POST /api/auth/logout- 用户注销GET /api/auth/info- 获取当前用户信息
POST /api/orders- 创建订单GET /api/orders- 获取用户订单列表GET /api/orders/{orderId}- 获取订单详情POST /api/orders/{orderId}/cancel- 取消订单POST /api/orders/{orderId}/pay- 支付订单POST /api/orders/{orderId}/confirm- 确认收货
GET /api/admin/orders- 获取所有订单列表GET /api/admin/orders/{orderId}- 获取订单详情POST /api/admin/orders/{orderId}/ship- 订单发货POST /api/admin/orders/{orderId}/cancel- 取消订单
GET /admin/attributes/category/{categoryId}- 获取分类属性列表POST /admin/attributes- 添加属性PUT /admin/attributes/{id}- 更新属性DELETE /admin/attributes/{id}- 删除属性
GET /admin/skus/spu/{spuId}- 获取SPU下的SKU列表GET /admin/skus/{id}- 获取SKU详情GET /admin/skus/{id}/attributes- 获取SKU及其属性POST /admin/skus- 添加SKUPOST /admin/skus/with-attributes- 添加SKU及其属性PUT /admin/skus/{id}- 更新SKUPUT /admin/skus/{id}/with-attributes- 更新SKU及其属性DELETE /admin/skus/{id}- 删除SKUPUT /admin/skus/{id}/status/{status}- 更新SKU状态
POST /local-files/upload/{directory}- 上传单个文件POST /local-files/upload-multiple/{directory}- 上传多个文件GET /local-files/{directory}/{filename}- 下载文件GET /local-files/image/{directory}/{filename}- 获取图片DELETE /local-files/{directory}/{filename}- 删除文件
POST /admin/product-images/upload/{type}- 上传商品图片POST /admin/product-images/upload-multiple/{type}- 批量上传商品图片POST /admin/product-images- 添加商品图片POST /admin/product-images/batch- 批量添加商品图片GET /admin/product-images/spu/{spuId}- 获取商品图片列表GET /admin/product-images/sku/{skuId}- 获取SKU图片列表DELETE /admin/product-images/{id}- 删除商品图片PUT /admin/product-images/{id}/sort/{sort}- 更新商品图片排序
在application.properties中添加以下配置:
# 文件上传配置
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
file.upload.root-dir=uploads@RestController
@RequestMapping("/api/orders")
public class OrderController {
private final OrderService orderService;
public OrderController(OrderService orderService) {
this.orderService = orderService;
}
/**
* 创建订单
* @param userId 当前用户ID
* @param orderCreateRequestDTO 订单创建请求
* @return 订单信息
*/
@PostMapping
public Result<OrderResponseDTO> createOrder(@CurrentUser Long userId,
@RequestBody @Valid OrderCreateRequestDTO orderCreateRequestDTO) {
OrderResponseDTO orderResponseDTO = orderService.createOrder(userId, orderCreateRequestDTO);
return Result.success(orderResponseDTO);
}
}POST /admin/skus/with-attributes
{
"sku": {
"spuId": 1,
"skuCode": "SKU001",
"name": "商品名称-红色-XL",
"specs": "颜色:红色;尺寸:XL",
"price": 199.00,
"originalPrice": 299.00,
"stock": 100,
"lowStock": 10,
"pic": "http://example.com/image.jpg",
"status": 1
},
"attributes": [
{
"attributeId": 1,
"attributeValue": "红色"
},
{
"attributeId": 2,
"attributeValue": "XL"
}
]
}POST /admin/product-images/upload/1
Content-Type: multipart/form-data
file: [文件内容]
POST /admin/product-images
{
"spuId": 1,
"url": "http://example.com/image.jpg",
"sort": 0,
"type": 1
}