From 502f07919493b60b98f23475340fab019beb8e87 Mon Sep 17 00:00:00 2001 From: chen-xin-zhi <3588068430@qq.com> Date: Tue, 24 Jun 2025 16:15:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BA=86=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../annotation/EnumValueValidator.java | 4 +- .../controller/course/CourseController.java | 6 +- .../course/CourseOrderController.java | 53 +++---- .../exception/GlobalExceptionHandler.java | 20 ++- .../model/dto/course/CourseQueryRequest.java | 2 - .../CourseChapterAddRequest.java | 4 +- .../CourseChapterQueryRequest.java | 6 +- .../CourseChapterUpdateRequest.java | 4 +- .../courseOrder/CourseOrderAddRequest.java | 133 ++++++++---------- .../courseOrder/CourseOrderQueryRequest.java | 71 +--------- .../courseOrder/CourseOrderUpdateRequest.java | 79 +---------- .../model/dto/project/ProjectAddRequest.java | 1 + .../promotion/model/entity/CourseChapter.java | 5 +- .../promotion/model/entity/CourseOrder.java | 14 +- .../model/enums/OrderStatusEnum.java | 59 ++++++++ .../vo/courseChapter/CourseChapterVO.java | 4 +- .../model/vo/courseOrder/CourseOrderVO.java | 30 ++-- .../service/course/CourseOrderService.java | 7 + .../course/impl/CourseOrderServiceImpl.java | 12 ++ .../junit/ProjectServiceImplTest.java | 3 +- 20 files changed, 237 insertions(+), 280 deletions(-) create mode 100644 src/main/java/com/greenorange/promotion/model/enums/OrderStatusEnum.java diff --git a/src/main/java/com/greenorange/promotion/annotation/EnumValueValidator.java b/src/main/java/com/greenorange/promotion/annotation/EnumValueValidator.java index 2c74b47..3e53d54 100644 --- a/src/main/java/com/greenorange/promotion/annotation/EnumValueValidator.java +++ b/src/main/java/com/greenorange/promotion/annotation/EnumValueValidator.java @@ -2,6 +2,8 @@ package com.greenorange.promotion.annotation; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; +import org.apache.commons.lang3.StringUtils; + import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -23,6 +25,6 @@ public class EnumValueValidator implements ConstraintValidator miniGenerateQrcode(@Valid @RequestBody CourseQrcodeAddRequest courseQrcodeAddRequest) throws Exception { String videoView = wechatGetQrcodeService.getWxCourseQrCode(courseQrcodeAddRequest); return ResultUtils.success(videoView); diff --git a/src/main/java/com/greenorange/promotion/controller/course/CourseOrderController.java b/src/main/java/com/greenorange/promotion/controller/course/CourseOrderController.java index 51d942f..a153fee 100644 --- a/src/main/java/com/greenorange/promotion/controller/course/CourseOrderController.java +++ b/src/main/java/com/greenorange/promotion/controller/course/CourseOrderController.java @@ -1,12 +1,14 @@ package com.greenorange.promotion.controller.course; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.greenorange.promotion.annotation.RequiresPermission; import com.greenorange.promotion.annotation.SysLog; import com.greenorange.promotion.common.BaseResponse; import com.greenorange.promotion.common.ResultUtils; import com.greenorange.promotion.constant.UserConstant; import com.greenorange.promotion.model.dto.CommonBatchRequest; +import com.greenorange.promotion.model.dto.CommonRequest; import com.greenorange.promotion.model.dto.courseOrder.CourseOrderAddRequest; import com.greenorange.promotion.model.dto.courseOrder.CourseOrderQueryRequest; import com.greenorange.promotion.model.dto.courseOrder.CourseOrderUpdateRequest; @@ -17,12 +19,11 @@ import com.greenorange.promotion.service.course.CourseOrderService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.greenorange.promotion.model.dto.CommonRequest; -import jakarta.validation.Valid; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -53,7 +54,7 @@ public class CourseOrderController { @Operation(summary = "web端管理员添加课程订单", description = "参数:课程订单添加请求体,权限:管理员,方法名:addCourseOrder") @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) @SysLog(title = "课程订单管理", content = "web端管理员添加课程订单") - public BaseResponse addCourseOrder(@Valid @RequestBody CourseOrderAddRequest courseOrderAddRequest) { + public BaseResponse addCourseOrder(@Valid @RequestBody CourseOrderAddRequest courseOrderAddRequest, HttpServletRequest request) { CourseOrder courseOrder = commonService.copyProperties(courseOrderAddRequest, CourseOrder.class); courseOrderService.save(courseOrder); return ResultUtils.success(courseOrder.getId()); @@ -120,26 +121,26 @@ public class CourseOrderController { return ResultUtils.success(courseOrderVO); } -// /** -// * Web端管理员分页查询课程订单 -// * @param courseOrderQueryRequest 课程订单查询请求体 -// * @return 课程订单列表 -// */ -// @PostMapping("page") -// @Operation(summary = "Web端管理员分页查询课程订单", description = "参数:课程订单查询请求体,权限:管理员,方法名:listCourseOrderByPage") -// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) -// @SysLog(title = "课程订单管理", content = "Web端管理员分页查询课程订单") -// public BaseResponse> listCourseOrderByPage(@Valid @RequestBody CourseOrderQueryRequest courseOrderQueryRequest) { -// long current = courseOrderQueryRequest.getCurrent(); -// long pageSize = courseOrderQueryRequest.getPageSize(); -// QueryWrapper queryWrapper = courseOrderService.getQueryWrapper(courseOrderQueryRequest); -// Page page = courseOrderService.page(new Page<>(current, pageSize), queryWrapper); -// List courseOrderList = page.getRecords(); -// List courseOrderVOList = commonService.convertList(courseOrderList, CourseOrderVO.class); -// Page voPage = new Page<>(current, pageSize); -// voPage.setRecords(courseOrderVOList); -// voPage.setPages(page.getPages()); -// voPage.setTotal(page.getTotal()); -// return ResultUtils.success(voPage); -// } + /** + * Web端管理员分页查询课程订单 + * @param courseOrderQueryRequest 课程订单查询请求体 + * @return 课程订单列表 + */ + @PostMapping("page") + @Operation(summary = "Web端管理员分页查询课程订单", description = "参数:课程订单查询请求体,权限:管理员,方法名:listCourseOrderByPage") + @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) + @SysLog(title = "课程订单管理", content = "Web端管理员分页查询课程订单") + public BaseResponse> listCourseOrderByPage(@Valid @RequestBody CourseOrderQueryRequest courseOrderQueryRequest) { + long current = courseOrderQueryRequest.getCurrent(); + long pageSize = courseOrderQueryRequest.getPageSize(); + QueryWrapper queryWrapper = courseOrderService.getQueryWrapper(courseOrderQueryRequest); + Page page = courseOrderService.page(new Page<>(current, pageSize), queryWrapper); + List courseOrderList = page.getRecords(); + List courseOrderVOList = commonService.convertList(courseOrderList, CourseOrderVO.class); + Page voPage = new Page<>(current, pageSize); + voPage.setRecords(courseOrderVOList); + voPage.setPages(page.getPages()); + voPage.setTotal(page.getTotal()); + return ResultUtils.success(voPage); + } } \ No newline at end of file diff --git a/src/main/java/com/greenorange/promotion/exception/GlobalExceptionHandler.java b/src/main/java/com/greenorange/promotion/exception/GlobalExceptionHandler.java index 8a38384..21d192f 100644 --- a/src/main/java/com/greenorange/promotion/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/greenorange/promotion/exception/GlobalExceptionHandler.java @@ -61,18 +61,14 @@ public class GlobalExceptionHandler { // .append("; ")); // return ResultUtils.error(ErrorCode.PARAMS_ERROR, errors.toString()); - // 从所有 FieldError 里,排序后取第一个 - FieldError firstError = e.getBindingResult() - .getFieldErrors().stream().min(Comparator.comparing(FieldError::getField)) - .orElse(null); - - // 直接取它的 defaultMessage,即注解里配置的 message - String msg = (firstError != null) - ? firstError.getDefaultMessage() - : "参数校验失败"; - - // 返回时只带 msg,不再拼前缀或字段名 - return ResultUtils.error(ErrorCode.PARAMS_ERROR, msg); + // 按字段名排序,取第一个错误的 defaultMessage + String msg = e.getBindingResult() + .getFieldErrors().stream() + .sorted(Comparator.comparing(FieldError::getField)) + .map(FieldError::getDefaultMessage) + .findFirst() + .orElse("参数校验失败"); + return ResultUtils.error(ErrorCode.PARAMS_ERROR, msg); } diff --git a/src/main/java/com/greenorange/promotion/model/dto/course/CourseQueryRequest.java b/src/main/java/com/greenorange/promotion/model/dto/course/CourseQueryRequest.java index cc48881..4cde7cb 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/course/CourseQueryRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/course/CourseQueryRequest.java @@ -22,14 +22,12 @@ public class CourseQueryRequest extends PageRequest implements Serializable { /** * 课程名称 */ - @NotBlank(message = "课程名称不能为空") @Schema(description = "课程名称", example = "数据分析工程师训练营") private String name; /** * 课程类别[考公考研,自媒体,财经] */ - @NotBlank(message = "课程类别不能为空") @EnumValue(enumClass = CourseTypeEnum.class) @Schema(description = "课程类别[考公考研,自媒体,财经]", example = "自媒体") private String type; diff --git a/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterAddRequest.java b/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterAddRequest.java index adaa2a4..4d22e0b 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterAddRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterAddRequest.java @@ -39,11 +39,11 @@ public class CourseChapterAddRequest implements Serializable { private Long duration; /** - * 试看权限 + * 试看权限[全集试看,部分试看,关闭,开启] */ @NotBlank(message = "试看权限不能为空") @EnumValue(enumClass = PreviewPermissionEnum.class) - @Schema(description = "试看权限", example = "全集试看") + @Schema(description = "试看权限[全集试看,部分试看,关闭,开启]", example = "全集试看") private String permissions; /** diff --git a/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterQueryRequest.java b/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterQueryRequest.java index 444abb2..ebafd95 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterQueryRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterQueryRequest.java @@ -22,16 +22,14 @@ public class CourseChapterQueryRequest extends PageRequest implements Serializab /** * 章节名称 */ - @NotBlank(message = "章节名称不能为空") @Schema(description = "章节名称", example = "企业经营管理者为什么必须懂财务?") private String name; /** - * 试看权限 + * 试看权限[全集试看,部分试看,关闭,开启] */ - @NotBlank(message = "试看权限不能为空") @EnumValue(enumClass = PreviewPermissionEnum.class) - @Schema(description = "试看权限", example = "全集试看") + @Schema(description = "试看权限[全集试看,部分试看,关闭,开启]", example = "全集试看") private String permissions; diff --git a/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterUpdateRequest.java b/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterUpdateRequest.java index 381da16..82d1c7b 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterUpdateRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterUpdateRequest.java @@ -47,11 +47,11 @@ public class CourseChapterUpdateRequest implements Serializable { private Long duration; /** - * 试看权限 + * 试看权限[全集试看,部分试看,关闭,开启] */ @NotBlank(message = "试看权限不能为空") @EnumValue(enumClass = PreviewPermissionEnum.class) - @Schema(description = "试看权限", example = "全集试看") + @Schema(description = "试看权限[全集试看,部分试看,关闭,开启]", example = "全集试看") private String permissions; /** diff --git a/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderAddRequest.java b/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderAddRequest.java index 2d828bd..cfaa284 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderAddRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderAddRequest.java @@ -1,11 +1,9 @@ package com.greenorange.promotion.model.dto.courseOrder; -import com.greenorange.promotion.annotation.EnumValue; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; import lombok.Data; -import java.math.BigDecimal; import java.io.Serial; import java.io.Serializable; @@ -15,25 +13,16 @@ import java.io.Serializable; */ @Data @Schema(description = "课程订单添加请求体", requiredProperties = { - "orderNumber", - "courseId", - "name", - "type", - "image", - "originPrice", - "discountPrice", - "totalAmount", - "transactionNumber", - "orderStatus", + "courseId" }) public class CourseOrderAddRequest implements Serializable { - /** - * 订单号 - */ - @NotBlank(message = "订单号不能为空") - @Schema(description = "订单号", example = "202506241339232334d234234243") - private String orderNumber; +// /** +// * 订单号 +// */ +// @NotBlank(message = "订单号不能为空") +// @Schema(description = "订单号", example = "202506241339232334d234234243") +// private String orderNumber; /** * 课程ID @@ -42,59 +31,59 @@ public class CourseOrderAddRequest implements Serializable { @Schema(description = "课程ID", example = "1") private Long courseId; - /** - * 课程名称 - */ - @NotBlank(message = "课程名称不能为空") - @Schema(description = "课程名称", example = "数据分析工程师训练营") - private String name; - - /** - * 课程类别 - */ - @NotBlank(message = "课程类别不能为空") - @Schema(description = "课程类别", example = "自媒体") - private String type; - - /** - * 课程封面图片URL - */ - @NotBlank(message = "课程封面图片URL不能为空") - @Schema(description = "课程封面图片URL", example = "38EFJID33") - private String image; - - /** - * 课程原价 - */ - @Schema(description = "课程原价", example = "20.00") - private BigDecimal originPrice; - - /** - * 折扣价格 - */ - @Schema(description = "折扣价格", example = "80.00") - private BigDecimal discountPrice; - - /** - * 订单总金额 - */ - @Schema(description = "订单总金额", example = "80.00") - private BigDecimal totalAmount; - - /** - * 支付交易号 - */ - @NotBlank(message = "支付交易号不能为空") - @Schema(description = "支付交易号", example = "432332333324444444444444423") - private String transactionNumber; - - /** - * 订单状态 - */ - @NotBlank(message = "订单状态不能为空") -// @EnumValue(enumClass = CourseOrderStatusEnum.class) - @Schema(description = "订单状态", example = "order") - private String orderStatus; +// /** +// * 课程名称 +// */ +// @NotBlank(message = "课程名称不能为空") +// @Schema(description = "课程名称", example = "数据分析工程师训练营") +// private String name; +// +// /** +// * 课程类别 +// */ +// @NotBlank(message = "课程类别不能为空") +// @Schema(description = "课程类别", example = "自媒体") +// private String type; +// +// /** +// * 课程封面图片URL +// */ +// @NotBlank(message = "课程封面图片URL不能为空") +// @Schema(description = "课程封面图片URL", example = "38EFJID33") +// private String image; +// +// /** +// * 课程原价 +// */ +// @Schema(description = "课程原价", example = "20.00") +// private BigDecimal originPrice; +// +// /** +// * 折扣价格 +// */ +// @Schema(description = "折扣价格", example = "80.00") +// private BigDecimal discountPrice; +// +// /** +// * 订单总金额 +// */ +// @Schema(description = "订单总金额", example = "80.00") +// private BigDecimal totalAmount; +// +// /** +// * 支付交易号 +// */ +// @NotBlank(message = "支付交易号不能为空") +// @Schema(description = "支付交易号", example = "432332333324444444444444423") +// private String transactionNumber; +// +// /** +// * 订单状态 +// */ +// @NotBlank(message = "订单状态不能为空") +//// @EnumValue(enumClass = CourseOrderStatusEnum.class) +// @Schema(description = "订单状态", example = "order") +// private String orderStatus; @Serial diff --git a/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderQueryRequest.java b/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderQueryRequest.java index b4a8c1d..4d6f9d4 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderQueryRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderQueryRequest.java @@ -1,5 +1,7 @@ package com.greenorange.promotion.model.dto.courseOrder; +import com.greenorange.promotion.annotation.EnumValue; +import com.greenorange.promotion.model.enums.OrderStatusEnum; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Min; @@ -9,6 +11,7 @@ import java.math.BigDecimal; import java.io.Serial; import java.io.Serializable; import com.greenorange.promotion.common.PageRequest; +import lombok.EqualsAndHashCode; /** * 课程订单查询请求体,继承自分页请求 PageRequest @@ -17,78 +20,18 @@ import com.greenorange.promotion.common.PageRequest; @Schema(description = "课程订单查询请求体", requiredProperties = {"current", "pageSize"}) public class CourseOrderQueryRequest extends PageRequest implements Serializable { - /** - * 订单ID - */ - @Min(value = 1L, message = "订单ID ID不能小于1") - @Schema(description = "订单ID", example = "") - private Long id; - /** * 订单号 */ - @NotBlank(message = "订单号不能为空") - @Schema(description = "订单号", example = "") + @Schema(description = "订单号", example = "202506241339232334d234234243") private String orderNumber; - /** - * 课程ID - */ - @Min(value = 1L, message = "课程ID ID不能小于1") - @Schema(description = "课程ID", example = "") - private Long courseId; /** - * 课程名称 + * 订单状态[交易关闭,交易成功,待支付,已退款] */ - @NotBlank(message = "课程名称不能为空") - @Schema(description = "课程名称", example = "") - private String name; - - /** - * 课程类别 - */ - @NotBlank(message = "课程类别不能为空") - @Schema(description = "课程类别", example = "") - private String type; - - /** - * 课程封面图片URL - */ - @NotBlank(message = "课程封面图片URL不能为空") - @Schema(description = "课程封面图片URL", example = "") - private String image; - - /** - * 课程原价 - */ - @Schema(description = "课程原价", example = "") - private BigDecimal originPrice; - - /** - * 实际成交价格 - */ - @Schema(description = "实际成交价格", example = "") - private BigDecimal discountPrice; - - /** - * 订单总金额 - */ - @Schema(description = "订单总金额", example = "") - private BigDecimal totalAmount; - - /** - * 支付交易号 - */ - @NotBlank(message = "支付交易号不能为空") - @Schema(description = "支付交易号", example = "") - private String transactionNumber; - - /** - * 订单状态 - */ - @NotBlank(message = "订单状态不能为空") - @Schema(description = "订单状态", example = "") + @EnumValue(enumClass = OrderStatusEnum.class) + @Schema(description = "订单状态[交易关闭,交易成功,待支付,已退款]", example = "交易成功") private String orderStatus; diff --git a/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderUpdateRequest.java b/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderUpdateRequest.java index 9b5826a..f470517 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderUpdateRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderUpdateRequest.java @@ -1,5 +1,7 @@ package com.greenorange.promotion.model.dto.courseOrder; +import com.greenorange.promotion.annotation.EnumValue; +import com.greenorange.promotion.model.enums.OrderStatusEnum; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Min; @@ -15,16 +17,7 @@ import java.io.Serializable; @Data @Schema(description = "课程订单更新请求体", requiredProperties = { "id", - "orderNumber", - "courseId", - "name", - "type", - "image", - "originPrice", - "discountPrice", - "totalAmount", - "transactionNumber", - "orderStatus", + "orderStatus" }) public class CourseOrderUpdateRequest implements Serializable { @@ -32,74 +25,16 @@ public class CourseOrderUpdateRequest implements Serializable { * 订单ID */ @Min(value = 1L, message = "订单ID ID不能小于1") - @Schema(description = "订单ID", example = "") + @Schema(description = "订单ID", example = "1") private Long id; - /** - * 订单号 - */ - @NotBlank(message = "订单号不能为空") - @Schema(description = "订单号", example = "") - private String orderNumber; /** - * 课程ID - */ - @Min(value = 1L, message = "课程ID ID不能小于1") - @Schema(description = "课程ID", example = "") - private Long courseId; - - /** - * 课程名称 - */ - @NotBlank(message = "课程名称不能为空") - @Schema(description = "课程名称", example = "") - private String name; - - /** - * 课程类别 - */ - @NotBlank(message = "课程类别不能为空") - @Schema(description = "课程类别", example = "") - private String type; - - /** - * 课程封面图片URL - */ - @NotBlank(message = "课程封面图片URL不能为空") - @Schema(description = "课程封面图片URL", example = "") - private String image; - - /** - * 课程原价 - */ - @Schema(description = "课程原价", example = "") - private BigDecimal originPrice; - - /** - * 实际成交价格 - */ - @Schema(description = "实际成交价格", example = "") - private BigDecimal discountPrice; - - /** - * 订单总金额 - */ - @Schema(description = "订单总金额", example = "") - private BigDecimal totalAmount; - - /** - * 支付交易号 - */ - @NotBlank(message = "支付交易号不能为空") - @Schema(description = "支付交易号", example = "") - private String transactionNumber; - - /** - * 订单状态 + * 订单状态[交易关闭,交易成功,待支付,已退款] */ @NotBlank(message = "订单状态不能为空") - @Schema(description = "订单状态", example = "") + @EnumValue(enumClass = OrderStatusEnum.class) + @Schema(description = "订单状态[交易关闭,交易成功,待支付,已退款]", example = "交易成功") private String orderStatus; diff --git a/src/main/java/com/greenorange/promotion/model/dto/project/ProjectAddRequest.java b/src/main/java/com/greenorange/promotion/model/dto/project/ProjectAddRequest.java index 419fcc8..0e35bf7 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/project/ProjectAddRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/project/ProjectAddRequest.java @@ -59,6 +59,7 @@ public class ProjectAddRequest implements Serializable { /** * 项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)] */ + @NotBlank(message = "项目状态不能为空") @EnumValue(enumClass = ProjectStatusEnum.class) @Schema(description = "项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]", example = "running") private String projectStatus; diff --git a/src/main/java/com/greenorange/promotion/model/entity/CourseChapter.java b/src/main/java/com/greenorange/promotion/model/entity/CourseChapter.java index a7bf0a6..11a2f20 100644 --- a/src/main/java/com/greenorange/promotion/model/entity/CourseChapter.java +++ b/src/main/java/com/greenorange/promotion/model/entity/CourseChapter.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serial; import java.io.Serializable; import java.util.Date; import lombok.Data; @@ -32,7 +34,7 @@ public class CourseChapter implements Serializable { private Long duration; /** - * 试看权限 + * 试看权限[全集试看,部分试看,关闭,开启] */ private String permissions; @@ -61,6 +63,7 @@ public class CourseChapter implements Serializable { */ private Date updateTime; + @Serial @TableField(exist = false) private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/src/main/java/com/greenorange/promotion/model/entity/CourseOrder.java b/src/main/java/com/greenorange/promotion/model/entity/CourseOrder.java index b619e61..740868e 100644 --- a/src/main/java/com/greenorange/promotion/model/entity/CourseOrder.java +++ b/src/main/java/com/greenorange/promotion/model/entity/CourseOrder.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; @@ -53,7 +55,7 @@ public class CourseOrder implements Serializable { private BigDecimal originPrice; /** - * 实际成交价格 + * 折扣价格 */ private BigDecimal discountPrice; @@ -68,9 +70,14 @@ public class CourseOrder implements Serializable { private String transactionNumber; /** - * 订单状态 + * 订单状态[交易关闭,交易成功,待支付,已退款] */ - private Object orderStatus; + private String orderStatus; + + /** + * 用户id + */ + private Long userId; /** * 是否删除 @@ -87,6 +94,7 @@ public class CourseOrder implements Serializable { */ private Date updateTime; + @Serial @TableField(exist = false) private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/src/main/java/com/greenorange/promotion/model/enums/OrderStatusEnum.java b/src/main/java/com/greenorange/promotion/model/enums/OrderStatusEnum.java new file mode 100644 index 0000000..2a216bb --- /dev/null +++ b/src/main/java/com/greenorange/promotion/model/enums/OrderStatusEnum.java @@ -0,0 +1,59 @@ +package com.greenorange.promotion.model.enums; + +import com.greenorange.promotion.annotation.BaseEnum; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 订单状态枚举 + */ +@Getter +public enum OrderStatusEnum implements BaseEnum { + + CLOSED("交易关闭"), + SUCCESS("交易成功"), + PENDING("待支付"), + REFUNDED("已退款"); + + private final String value; + + OrderStatusEnum(String value) { + this.value = value; + } + + /** + * BaseEnum 要求的方法:返回枚举对应的校验值 + */ + @Override + public String getValue() { + return this.value; + } + + /** + * 获取所有枚举值列表 + */ + public static List getValues() { + return Arrays.stream(values()) + .map(OrderStatusEnum::getValue) + .collect(Collectors.toList()); + } + + /** + * 根据值获取对应的枚举对象 + */ + public static OrderStatusEnum getEnumByValue(String value) { + if (StringUtils.isBlank(value)) { + return null; + } + for (OrderStatusEnum status : OrderStatusEnum.values()) { + if (status.value.equals(value)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/greenorange/promotion/model/vo/courseChapter/CourseChapterVO.java b/src/main/java/com/greenorange/promotion/model/vo/courseChapter/CourseChapterVO.java index 6de0688..6097dae 100644 --- a/src/main/java/com/greenorange/promotion/model/vo/courseChapter/CourseChapterVO.java +++ b/src/main/java/com/greenorange/promotion/model/vo/courseChapter/CourseChapterVO.java @@ -35,9 +35,9 @@ public class CourseChapterVO implements Serializable { private Long duration; /** - * 试看权限 + * 试看权限[全集试看,部分试看,关闭,开启] */ - @Schema(description = "试看权限", example = "全集试看") + @Schema(description = "试看权限[全集试看,部分试看,关闭,开启]", example = "全集试看") private String permissions; /** diff --git a/src/main/java/com/greenorange/promotion/model/vo/courseOrder/CourseOrderVO.java b/src/main/java/com/greenorange/promotion/model/vo/courseOrder/CourseOrderVO.java index f40196e..d21ec2e 100644 --- a/src/main/java/com/greenorange/promotion/model/vo/courseOrder/CourseOrderVO.java +++ b/src/main/java/com/greenorange/promotion/model/vo/courseOrder/CourseOrderVO.java @@ -23,63 +23,69 @@ public class CourseOrderVO implements Serializable { /** * 订单号 */ - @Schema(description = "订单号", example = "") + @Schema(description = "订单号", example = "202506241339232334d234234243") private String orderNumber; /** * 课程ID */ - @Schema(description = "课程ID", example = "") + @Schema(description = "课程ID", example = "1") private Long courseId; /** * 课程名称 */ - @Schema(description = "课程名称", example = "") + @Schema(description = "课程名称", example = "数据分析工程师训练营") private String name; /** * 课程类别 */ - @Schema(description = "课程类别", example = "") + @Schema(description = "课程类别", example = "自媒体") private String type; /** * 课程封面图片URL */ - @Schema(description = "课程封面图片URL", example = "") + @Schema(description = "课程封面图片URL", example = "32DHDF3KI") private String image; /** * 课程原价 */ - @Schema(description = "课程原价", example = "") + @Schema(description = "课程原价", example = "100.00") private BigDecimal originPrice; /** - * 实际成交价格 + * 折扣价格 */ - @Schema(description = "实际成交价格", example = "") + @Schema(description = "折扣价格", example = "50.00") private BigDecimal discountPrice; /** * 订单总金额 */ - @Schema(description = "订单总金额", example = "") + @Schema(description = "订单总金额", example = "100.00") private BigDecimal totalAmount; /** * 支付交易号 */ - @Schema(description = "支付交易号", example = "") + @Schema(description = "支付交易号", example = "4342348232388888833333333333") private String transactionNumber; /** - * 订单状态 + * 订单状态[交易关闭,交易成功,待支付,已退款] */ - @Schema(description = "订单状态", example = "") + @Schema(description = "订单状态[交易关闭,交易成功,待支付,已退款]", example = "交易成功") private String orderStatus; + /** + * 用户id + */ + @Schema(description = "用户id", example = "1") + private Long userId; + @Serial private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/greenorange/promotion/service/course/CourseOrderService.java b/src/main/java/com/greenorange/promotion/service/course/CourseOrderService.java index 069ecc3..405f69d 100644 --- a/src/main/java/com/greenorange/promotion/service/course/CourseOrderService.java +++ b/src/main/java/com/greenorange/promotion/service/course/CourseOrderService.java @@ -1,5 +1,7 @@ package com.greenorange.promotion.service.course; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.greenorange.promotion.model.dto.courseOrder.CourseOrderQueryRequest; import com.greenorange.promotion.model.entity.CourseOrder; import com.baomidou.mybatisplus.extension.service.IService; @@ -10,4 +12,9 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface CourseOrderService extends IService { + + /** + * 获取查询条件 + */ + QueryWrapper getQueryWrapper(CourseOrderQueryRequest courseOrderQueryRequest); } diff --git a/src/main/java/com/greenorange/promotion/service/course/impl/CourseOrderServiceImpl.java b/src/main/java/com/greenorange/promotion/service/course/impl/CourseOrderServiceImpl.java index 539070d..0ed873c 100644 --- a/src/main/java/com/greenorange/promotion/service/course/impl/CourseOrderServiceImpl.java +++ b/src/main/java/com/greenorange/promotion/service/course/impl/CourseOrderServiceImpl.java @@ -1,6 +1,8 @@ package com.greenorange.promotion.service.course.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.greenorange.promotion.model.dto.courseOrder.CourseOrderQueryRequest; import com.greenorange.promotion.model.entity.CourseOrder; import com.greenorange.promotion.service.course.CourseOrderService; import com.greenorange.promotion.mapper.CourseOrderMapper; @@ -15,6 +17,16 @@ import org.springframework.stereotype.Service; public class CourseOrderServiceImpl extends ServiceImpl implements CourseOrderService{ + + /** + * 获取查询条件 + */ + @Override + public QueryWrapper getQueryWrapper(CourseOrderQueryRequest courseOrderQueryRequest) { + String orderNumber = courseOrderQueryRequest.getOrderNumber(); + String orderStatus = courseOrderQueryRequest.getOrderStatus(); + return null; + } } diff --git a/src/test/java/com/greenorange/promotion/junit/ProjectServiceImplTest.java b/src/test/java/com/greenorange/promotion/junit/ProjectServiceImplTest.java index 3cf8ff5..9f63ea0 100644 --- a/src/test/java/com/greenorange/promotion/junit/ProjectServiceImplTest.java +++ b/src/test/java/com/greenorange/promotion/junit/ProjectServiceImplTest.java @@ -36,12 +36,11 @@ class ProjectServiceImplTest { CommonRequest req = new CommonRequest(); req.setId(10L); when(projectService.getById(10L)).thenReturn(null); - // Act & Assert RuntimeException ex = assertThrows(RuntimeException.class, () -> service.queryProjectById(req) ); - assertTrue(ex.getMessage().contains("当前项目不存在")); + assertTrue(ex.getMessage().equals("当前项目不存在")); // commonService.copyProperties 不应被调用 verify(commonService, never()).copyProperties(any(), any());