diff --git a/src/main/java/com/greenorange/promotion/controller/course/CourseController.java b/src/main/java/com/greenorange/promotion/controller/course/CourseController.java index 7ba3389..fcb9565 100644 --- a/src/main/java/com/greenorange/promotion/controller/course/CourseController.java +++ b/src/main/java/com/greenorange/promotion/controller/course/CourseController.java @@ -116,6 +116,25 @@ public class CourseController { } + /** + * 小程序端用户根据id查看课程基本信息 + * @param commonRequest 课程id + * @return 课程基本信息 + */ + @PostMapping("generate/qrcode") + @Operation(summary = "小程序端用户根据id查看课程基本信息", description = "参数:课程id,权限:管理员,方法名:miniQueryCourseBaseInfo") + @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE) + @SysLog(title = "课程管理", content = "小程序端用户根据id查看课程基本信息") + public BaseResponse miniQueryCourseBaseInfo(@Valid @RequestBody CommonRequest commonRequest) { + Long id = commonRequest.getId(); + Course course = courseService.getById(id); + CourseCardVO courseCardVO = commonService.copyProperties(course, CourseCardVO.class); + return ResultUtils.success(courseCardVO); + } + + + + /** * web端管理员添加课程 * @param courseAddRequest 课程添加请求体 diff --git a/src/main/java/com/greenorange/promotion/controller/course/CourseOrderController.java b/src/main/java/com/greenorange/promotion/controller/course/CourseOrderController.java new file mode 100644 index 0000000..51d942f --- /dev/null +++ b/src/main/java/com/greenorange/promotion/controller/course/CourseOrderController.java @@ -0,0 +1,145 @@ +package com.greenorange.promotion.controller.course; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +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.courseOrder.CourseOrderAddRequest; +import com.greenorange.promotion.model.dto.courseOrder.CourseOrderQueryRequest; +import com.greenorange.promotion.model.dto.courseOrder.CourseOrderUpdateRequest; +import com.greenorange.promotion.model.entity.CourseOrder; +import com.greenorange.promotion.model.vo.courseOrder.CourseOrderVO; +import com.greenorange.promotion.service.common.CommonService; +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 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; + +import java.util.List; + + +/** + * 课程订单 控制器 + */ +@RestController +@RequestMapping("courseOrder") +@Slf4j +@Tag(name = "课程订单模块") +public class CourseOrderController { + + @Resource + private CourseOrderService courseOrderService; + + @Resource + private CommonService commonService; + + /** + * web端管理员添加课程订单 + * @param courseOrderAddRequest 课程订单添加请求体 + * @return 是否添加成功 + */ + @PostMapping("add") + @Operation(summary = "web端管理员添加课程订单", description = "参数:课程订单添加请求体,权限:管理员,方法名:addCourseOrder") + @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) + @SysLog(title = "课程订单管理", content = "web端管理员添加课程订单") + public BaseResponse addCourseOrder(@Valid @RequestBody CourseOrderAddRequest courseOrderAddRequest) { + CourseOrder courseOrder = commonService.copyProperties(courseOrderAddRequest, CourseOrder.class); + courseOrderService.save(courseOrder); + return ResultUtils.success(courseOrder.getId()); + } + + /** + * web端管理员根据id修改课程订单信息 + * @param courseOrderUpdateRequest 课程订单更新请求体 + * @return 是否更新成功 + */ + @PostMapping("update") + @Operation(summary = "web端管理员根据id修改课程订单", description = "参数:课程订单更新请求体,权限:管理员,方法名:updateCourseOrder") + @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) + @SysLog(title = "课程订单管理", content = "web端管理员根据id修改课程订单信息") + public BaseResponse updateCourseOrder(@Valid @RequestBody CourseOrderUpdateRequest courseOrderUpdateRequest) { + CourseOrder courseOrder = commonService.copyProperties(courseOrderUpdateRequest, CourseOrder.class); + courseOrderService.updateById(courseOrder); + return ResultUtils.success(true); + } + + /** + * web端管理员根据id删除课程订单 + * @param commonRequest 课程订单删除请求体 + * @return 是否删除成功 + */ + @PostMapping("delete") + @Operation(summary = "web端管理员根据id删除课程订单", description = "参数:课程订单删除请求体,权限:管理员,方法名:delCourseOrder") + @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) + @SysLog(title = "课程订单管理", content = "web端管理员根据id删除课程订单") + public BaseResponse delCourseOrder(@Valid @RequestBody CommonRequest commonRequest) { + Long id = commonRequest.getId(); + courseOrderService.removeById(id); + return ResultUtils.success(true); + } + + /** + * web端管理员批量删除课程订单 + * @param commonBatchRequest 课程订单批量删除请求体 + * @return 是否删除成功 + */ + @PostMapping("delBatch") + @Operation(summary = "web端管理员批量删除课程订单", description = "参数:课程订单批量删除请求体,权限:管理员,方法名:delBatchCourseOrder") + @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) + @SysLog(title = "课程订单管理", content = "web端管理员批量删除课程订单") + public BaseResponse delBatchCourseOrder(@Valid @RequestBody CommonBatchRequest commonBatchRequest) { + List ids = commonBatchRequest.getIds(); + courseOrderService.removeByIds(ids); + return ResultUtils.success(true); + } + + /** + * web端管理员根据id查询课程订单 + * @param commonRequest 课程订单查询请求体 + * @return 课程订单信息 + */ + @PostMapping("queryById") + @Operation(summary = "web端管理员根据id查询课程订单", description = "参数:课程订单查询请求体,权限:管理员,方法名:queryCourseOrderById") + @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) + @SysLog(title = "课程订单管理", content = "web端管理员根据id查询课程订单") + public BaseResponse queryCourseOrderById(@Valid @RequestBody CommonRequest commonRequest) { + Long id = commonRequest.getId(); + CourseOrder courseOrder = courseOrderService.getById(id); + CourseOrderVO courseOrderVO = commonService.copyProperties(courseOrder, CourseOrderVO.class); + 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); +// } +} \ No newline at end of file diff --git a/src/main/java/com/greenorange/promotion/generator/Generator.java b/src/main/java/com/greenorange/promotion/generator/Generator.java index 0bccb73..53630b2 100644 --- a/src/main/java/com/greenorange/promotion/generator/Generator.java +++ b/src/main/java/com/greenorange/promotion/generator/Generator.java @@ -27,13 +27,13 @@ public class Generator { // 作者 private static final String AUTHOR = "chenxinzhi"; // 表注释 - private static final String TABLE_COMMENT = "课程章节"; + private static final String TABLE_COMMENT = "课程订单"; // 实体类名 - private static final String ENTITY_NAME = "CourseChapter"; + private static final String ENTITY_NAME = "CourseOrder"; // 表名 - private static final String TABLE_NAME = "course_chapter"; + private static final String TABLE_NAME = "course_order"; // 实体类属性名 - private static final String ENTITY_NAME_LOWER = "courseChapter"; + private static final String ENTITY_NAME_LOWER = "courseOrder"; // 父包名 private static final String PARENT_PATH = "com.greenorange.promotion"; 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 new file mode 100644 index 0000000..0bded99 --- /dev/null +++ b/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderAddRequest.java @@ -0,0 +1,101 @@ +package com.greenorange.promotion.model.dto.courseOrder; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Min; +import lombok.Data; +import java.math.BigDecimal; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 课程订单添加请求体 + */ +@Data +@Schema(description = "课程订单添加请求体", requiredProperties = { + "orderNumber", + "courseId", + "name", + "type", + "image", + "originPrice", + "discountPrice", + "totalAmount", + "transactionNumber", + "orderStatus", +}) +public class CourseOrderAddRequest implements Serializable { + + /** + * 订单号 + */ + @NotBlank(message = "订单号不能为空") + @Schema(description = "订单号", example = "202506241339232334d234234243") + private String orderNumber; + + /** + * 课程ID + */ + @Min(value = 1L, message = "课程ID ID不能小于1") + @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 = "") + 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 = "") + private String orderStatus; + + + @Serial + private static final long serialVersionUID = 1L; +} + 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 new file mode 100644 index 0000000..b4a8c1d --- /dev/null +++ b/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderQueryRequest.java @@ -0,0 +1,98 @@ +package com.greenorange.promotion.model.dto.courseOrder; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Min; +import lombok.Data; +import java.math.BigDecimal; + +import java.io.Serial; +import java.io.Serializable; +import com.greenorange.promotion.common.PageRequest; + +/** + * 课程订单查询请求体,继承自分页请求 PageRequest + */ +@Data +@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 = "") + 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 = "") + private String orderStatus; + + + @Serial + private static final long serialVersionUID = 1L; +} + 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 new file mode 100644 index 0000000..9b5826a --- /dev/null +++ b/src/main/java/com/greenorange/promotion/model/dto/courseOrder/CourseOrderUpdateRequest.java @@ -0,0 +1,108 @@ +package com.greenorange.promotion.model.dto.courseOrder; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Min; +import lombok.Data; +import java.math.BigDecimal; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 课程订单更新请求体 + */ +@Data +@Schema(description = "课程订单更新请求体", requiredProperties = { + "id", + "orderNumber", + "courseId", + "name", + "type", + "image", + "originPrice", + "discountPrice", + "totalAmount", + "transactionNumber", + "orderStatus", +}) +public class CourseOrderUpdateRequest implements Serializable { + + /** + * 订单ID + */ + @Min(value = 1L, message = "订单ID ID不能小于1") + @Schema(description = "订单ID", example = "") + 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 = "") + private String orderStatus; + + + @Serial + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/greenorange/promotion/model/vo/course/CourseCardVO.java b/src/main/java/com/greenorange/promotion/model/vo/course/CourseCardVO.java index 2d675cd..04545f8 100644 --- a/src/main/java/com/greenorange/promotion/model/vo/course/CourseCardVO.java +++ b/src/main/java/com/greenorange/promotion/model/vo/course/CourseCardVO.java @@ -35,6 +35,12 @@ public class CourseCardVO implements Serializable { @Schema(description = "课程图片URL", example = "324IEHJDE") private String image; + /** + * 课程原价 + */ + @Schema(description = "课程原价", example = "3499") + private BigDecimal originPrice; + /** * 折扣价格 */ 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 new file mode 100644 index 0000000..f40196e --- /dev/null +++ b/src/main/java/com/greenorange/promotion/model/vo/courseOrder/CourseOrderVO.java @@ -0,0 +1,86 @@ +package com.greenorange.promotion.model.vo.courseOrder; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 课程订单 视图对象 + */ +@Data +@Schema(description = "课程订单 视图对象") +public class CourseOrderVO implements Serializable { + + /** + * 课程订单ID + */ + @Schema(description = "课程订单ID", example = "1") + private Long id; + + /** + * 订单号 + */ + @Schema(description = "订单号", example = "") + private String orderNumber; + + /** + * 课程ID + */ + @Schema(description = "课程ID", example = "") + private Long courseId; + + /** + * 课程名称 + */ + @Schema(description = "课程名称", example = "") + private String name; + + /** + * 课程类别 + */ + @Schema(description = "课程类别", example = "") + private String type; + + /** + * 课程封面图片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; + + /** + * 支付交易号 + */ + @Schema(description = "支付交易号", example = "") + private String transactionNumber; + + /** + * 订单状态 + */ + @Schema(description = "订单状态", example = "") + private String orderStatus; + + + @Serial + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/greenorange/promotion/service/wechat/impl/WechatGetQrcodeServiceImpl.java b/src/main/java/com/greenorange/promotion/service/wechat/impl/WechatGetQrcodeServiceImpl.java index d658ee3..9a60e1f 100644 --- a/src/main/java/com/greenorange/promotion/service/wechat/impl/WechatGetQrcodeServiceImpl.java +++ b/src/main/java/com/greenorange/promotion/service/wechat/impl/WechatGetQrcodeServiceImpl.java @@ -204,9 +204,11 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService { if (accessToken == null) { accessToken = this.getAccessToken().getAccess_token(); } + String invitationCode = courseQrcodeAddRequest.getInvitationCode(); + Long id = courseQrcodeAddRequest.getId(); Map param = new HashMap<>(); param.put("page", "pages/loginModule/register/register"); - param.put("scene", "invitationCode=" + courseQrcodeAddRequest.getInvitationCode()); + param.put("scene", "invitationCode=" + invitationCode + "&courseId=" + id); param.put("width", 430); param.put("check_path", false); param.put("env_version", "develop");