解决了全局异常处理bug

This commit is contained in:
2025-06-24 16:15:39 +08:00
parent a0e60bece6
commit 502f079194
20 changed files with 237 additions and 280 deletions

View File

@ -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<EnumValue, String
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return validValues.contains(value);
return StringUtils.isBlank(value) || validValues.contains(value);
}
}

View File

@ -102,14 +102,14 @@ public class CourseController {
/**
* 小程序端用户生成推广码
* 小程序端用户生成课程推广码
* @param courseQrcodeAddRequest 课程id
* @return 课程信息列表
*/
@PostMapping("generate/qrcode")
@Operation(summary = "小程序端用户生成推广码", description = "参数课程id权限管理员方法名miniGenerateQrcode")
@Operation(summary = "小程序端用户生成课程推广码", description = "参数课程id权限管理员方法名miniGenerateQrcode")
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
@SysLog(title = "课程管理", content = "小程序端用户生成推广码")
@SysLog(title = "课程管理", content = "小程序端用户生成课程推广码")
public BaseResponse<String> miniGenerateQrcode(@Valid @RequestBody CourseQrcodeAddRequest courseQrcodeAddRequest) throws Exception {
String videoView = wechatGetQrcodeService.getWxCourseQrCode(courseQrcodeAddRequest);
return ResultUtils.success(videoView);

View File

@ -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<Long> addCourseOrder(@Valid @RequestBody CourseOrderAddRequest courseOrderAddRequest) {
public BaseResponse<Long> 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<Page<CourseOrderVO>> listCourseOrderByPage(@Valid @RequestBody CourseOrderQueryRequest courseOrderQueryRequest) {
// long current = courseOrderQueryRequest.getCurrent();
// long pageSize = courseOrderQueryRequest.getPageSize();
// QueryWrapper<CourseOrder> queryWrapper = courseOrderService.getQueryWrapper(courseOrderQueryRequest);
// Page<CourseOrder> page = courseOrderService.page(new Page<>(current, pageSize), queryWrapper);
// List<CourseOrder> courseOrderList = page.getRecords();
// List<CourseOrderVO> courseOrderVOList = commonService.convertList(courseOrderList, CourseOrderVO.class);
// Page<CourseOrderVO> 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<Page<CourseOrderVO>> listCourseOrderByPage(@Valid @RequestBody CourseOrderQueryRequest courseOrderQueryRequest) {
long current = courseOrderQueryRequest.getCurrent();
long pageSize = courseOrderQueryRequest.getPageSize();
QueryWrapper<CourseOrder> queryWrapper = courseOrderService.getQueryWrapper(courseOrderQueryRequest);
Page<CourseOrder> page = courseOrderService.page(new Page<>(current, pageSize), queryWrapper);
List<CourseOrder> courseOrderList = page.getRecords();
List<CourseOrderVO> courseOrderVOList = commonService.convertList(courseOrderList, CourseOrderVO.class);
Page<CourseOrderVO> voPage = new Page<>(current, pageSize);
voPage.setRecords(courseOrderVOList);
voPage.setPages(page.getPages());
voPage.setTotal(page.getTotal());
return ResultUtils.success(voPage);
}
}

View File

@ -61,17 +61,13 @@ 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不再拼前缀或字段名
// 按字段名排序取第一个错误的 defaultMessage
String msg = e.getBindingResult()
.getFieldErrors().stream()
.sorted(Comparator.comparing(FieldError::getField))
.map(FieldError::getDefaultMessage)
.findFirst()
.orElse("参数校验失败");
return ResultUtils.error(ErrorCode.PARAMS_ERROR, msg);
}

View File

@ -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;

View File

@ -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;
/**

View File

@ -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;

View File

@ -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;
/**

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<String> 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;
}
}

View File

@ -35,9 +35,9 @@ public class CourseChapterVO implements Serializable {
private Long duration;
/**
* 试看权限
* 试看权限[全集试看,部分试看,关闭,开启]
*/
@Schema(description = "试看权限", example = "全集试看")
@Schema(description = "试看权限[全集试看,部分试看,关闭,开启]", example = "全集试看")
private String permissions;
/**

View File

@ -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;

View File

@ -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<CourseOrder> {
/**
* 获取查询条件
*/
QueryWrapper<CourseOrder> getQueryWrapper(CourseOrderQueryRequest courseOrderQueryRequest);
}

View File

@ -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<CourseOrderMapper, CourseOrder>
implements CourseOrderService{
/**
* 获取查询条件
*/
@Override
public QueryWrapper<CourseOrder> getQueryWrapper(CourseOrderQueryRequest courseOrderQueryRequest) {
String orderNumber = courseOrderQueryRequest.getOrderNumber();
String orderStatus = courseOrderQueryRequest.getOrderStatus();
return null;
}
}

View File

@ -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());