将团课相关代码迁移至gym-GroupCourse模块

This commit is contained in:
2026-05-10 18:26:33 +08:00
parent ffb3f20774
commit 68fefae774
18 changed files with 186 additions and 164 deletions
@@ -0,0 +1,3 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.15/apache-maven-3.9.15-bin.zip
+81
View File
@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.novalon.gym.manage</groupId>
<artifactId>gym-manage-api</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>cn.novalon.gym.manage</groupId>
<artifactId>gym-groupCourse</artifactId>
<version>1.0.0</version>
<name>gym-groupCourse</name>
<description>Group Course Management Module</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>cn.novalon.gym.manage</groupId>
<artifactId>manage-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>cn.novalon.gym.manage</groupId>
<artifactId>manage-db</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webflux-ui</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations-jakarta</artifactId>
<version>2.2.43</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
@@ -1,11 +1,9 @@
package cn.novalon.gym.manage.db.converter;/*
* @author:liwentao
* @date:2026/4/26-04-26-13:18
*/
package cn.novalon.gym.manage.groupcourse.converter;
import cn.hutool.core.bean.BeanUtil;
import cn.novalon.gym.manage.db.entity.GroupCourseEntity;
import cn.novalon.gym.manage.sys.core.domain.GroupCourse;
import cn.novalon.gym.manage.groupcourse.domain.GroupCourse;
import cn.novalon.gym.manage.groupcourse.entity.GroupCourseEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -44,11 +42,11 @@ public class GroupCourseConverter {
.collect(Collectors.toList());
}
public List<GroupCourseEntity> toEntityList(List<GroupCourse> groupCourses){
if (groupCourses == null) {
public List<GroupCourseEntity> toEntityList(List<GroupCourse> domains){
if (domains == null) {
return null;
}
return groupCourses.stream()
return domains.stream()
.map(this::toEntity)
.collect(Collectors.toList());
}
@@ -1,7 +1,7 @@
package cn.novalon.gym.manage.db.dao;
import cn.novalon.gym.manage.db.entity.GroupCourseEntity;
import cn.novalon.gym.manage.db.entity.SysUserEntity;
package cn.novalon.gym.manage.groupcourse.dao;
import cn.novalon.gym.manage.groupcourse.entity.GroupCourseEntity;
import org.springframework.data.domain.Sort;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
@@ -1,15 +1,11 @@
package cn.novalon.gym.manage.sys.core.domain;
/**
* @author:liwentao
* @date:2026/4/26-04-26-13:20
*/
package cn.novalon.gym.manage.groupcourse.domain;
import cn.novalon.gym.manage.sys.core.domain.BaseDomain;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.data.relational.core.mapping.Column;
import java.time.LocalDateTime;
import java.util.Date;
@Schema(description = "")
public class GroupCourse extends BaseDomain{
//课程名称
@@ -1,15 +1,11 @@
package cn.novalon.gym.manage.db.entity;
/**
* @author:liwentao
* @date:2026/4/25-04-25-17:34
* 团课表
*/
package cn.novalon.gym.manage.groupcourse.entity;
import cn.novalon.gym.manage.db.entity.BaseEntity;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import java.time.LocalDateTime;
import java.util.Date;
@Table("group_course")
public class GroupCourseEntity extends BaseEntity {
@@ -1,7 +1,8 @@
package cn.novalon.gym.manage.sys.handler.groupCourse;
import cn.novalon.gym.manage.sys.core.domain.GroupCourse;
import cn.novalon.gym.manage.sys.core.service.IGroupCourseService;
package cn.novalon.gym.manage.groupcourse.handler;
import cn.novalon.gym.manage.groupcourse.domain.GroupCourse;
import cn.novalon.gym.manage.groupcourse.service.IGroupCourseService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Validator;
@@ -10,31 +11,28 @@ import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono;
/**
* @author:liwentao
* @date:2026/4/26-04-26-14:30
*/
@Component
@Tag(name="团课管理",description = "团课相关操作")
public class GroupCourseHandler {
private final IGroupCourseService groupCourseService;
private final Validator validator;
public GroupCourseHandler(IGroupCourseService groupCourseService, Validator validator){
this.groupCourseService = groupCourseService;
this.validator = validator;
}
@Operation(summary = "获取所有用户", description = "获取系统中所有用户列表")
@Operation(summary = "获取所有团课", description = "获取系统中所有团课列表")
public Mono<ServerResponse> getAllGroupCourse(ServerRequest request){
boolean includeDeleted = Boolean.valueOf(request.queryParam("includeDeleted").orElse("false"));
return ServerResponse.ok()
.body(groupCourseService.findAll(includeDeleted), GroupCourse.class);
}
@Operation(summary = "根据ID获取团课", description = "根据ID获取团课详情")
public Mono<ServerResponse> getGroupCourseById(ServerRequest request){
Long id = Long.valueOf(request.pathVariable("id"));
return groupCourseService.findById(id)
.flatMap(groupCourse -> ServerResponse.ok().bodyValue(groupCourse))
.switchIfEmpty(ServerResponse.notFound().build());
return ServerResponse.ok()
.body(groupCourseService.findById(id), GroupCourse.class);
}
}
@@ -1,6 +1,7 @@
package cn.novalon.gym.manage.sys.core.repository;
import cn.novalon.gym.manage.sys.core.domain.GroupCourse;
package cn.novalon.gym.manage.groupcourse.repository;
import cn.novalon.gym.manage.groupcourse.domain.GroupCourse;
import org.springframework.data.domain.Sort;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -1,19 +1,16 @@
package cn.novalon.gym.manage.db.repository;
import cn.novalon.gym.manage.db.converter.GroupCourseConverter;
import cn.novalon.gym.manage.db.dao.GroupCourseDao;
import cn.novalon.gym.manage.sys.core.domain.GroupCourse;
import cn.novalon.gym.manage.sys.core.repository.IGroupCourseRepository;
package cn.novalon.gym.manage.groupcourse.repository.impl;
import cn.novalon.gym.manage.groupcourse.converter.GroupCourseConverter;
import cn.novalon.gym.manage.groupcourse.dao.GroupCourseDao;
import cn.novalon.gym.manage.groupcourse.domain.GroupCourse;
import cn.novalon.gym.manage.groupcourse.repository.IGroupCourseRepository;
import org.springframework.data.domain.Sort;
import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/**
* @author:liwentao
* @date:2026/4/26-04-26-14:16
*/
@Repository
public class GroupCourseRepository implements IGroupCourseRepository {
private final GroupCourseDao groupCourseDao;
@@ -39,6 +36,7 @@ public class GroupCourseRepository implements IGroupCourseRepository {
.map(groupCourseConverter::toDomain);
}
@Override
public Flux<GroupCourse> findAll(Sort sort) {
return groupCourseDao.findAll(sort)
.map(groupCourseConverter::toDomain);
@@ -50,6 +48,7 @@ public class GroupCourseRepository implements IGroupCourseRepository {
.map(groupCourseConverter::toDomain);
}
@Override
public Flux<GroupCourse> findByDeletedAtIsNull(Sort sort) {
return groupCourseDao.findAllByDeletedAtIsNull(sort)
.map(groupCourseConverter::toDomain);
@@ -1,6 +1,7 @@
package cn.novalon.gym.manage.sys.core.service;
import cn.novalon.gym.manage.sys.core.domain.GroupCourse;
package cn.novalon.gym.manage.groupcourse.service;
import cn.novalon.gym.manage.groupcourse.domain.GroupCourse;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -1,24 +1,19 @@
package cn.novalon.gym.manage.sys.core.service.impl;
import cn.novalon.gym.manage.sys.audit.service.IAuditLogService;
import cn.novalon.gym.manage.sys.core.domain.GroupCourse;
import cn.novalon.gym.manage.sys.core.repository.IGroupCourseRepository;
import cn.novalon.gym.manage.sys.core.service.IGroupCourseService;
package cn.novalon.gym.manage.groupcourse.service.impl;
import cn.novalon.gym.manage.groupcourse.domain.GroupCourse;
import cn.novalon.gym.manage.groupcourse.repository.IGroupCourseRepository;
import cn.novalon.gym.manage.groupcourse.service.IGroupCourseService;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/**
* @author:liwentao
* @date:2026/4/26-04-26-14:12
*/
@Service
public class GroupCourseService implements IGroupCourseService {
private final IGroupCourseRepository groupCourseRepository;
private final IAuditLogService auditLogService;
public GroupCourseService(IGroupCourseRepository groupCourseRepository, IAuditLogService auditLogService){
public GroupCourseService(IGroupCourseRepository groupCourseRepository){
this.groupCourseRepository = groupCourseRepository;
this.auditLogService = auditLogService;
}
@Override
@@ -0,0 +1,3 @@
spring:
application:
name: gym-groupCourse
@@ -0,0 +1,13 @@
package cn.novalon.gym.manage.groupcourse;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class GymGroupCourseApplicationTests {
@Test
void contextLoads() {
}
}
+11
View File
@@ -18,6 +18,11 @@
<description>Application module for Novalon Manage API</description>
<dependencies>
<dependency>
<groupId>cn.novalon.gym.manage</groupId>
<artifactId>gym-groupCourse</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>cn.novalon.gym.manage</groupId>
<artifactId>manage-sys</artifactId>
@@ -133,6 +138,12 @@
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webflux-ui</artifactId>
</dependency>
<dependency>
<groupId>cn.novalon.gym.manage</groupId>
<artifactId>gym-groupCourse</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
@@ -15,10 +15,10 @@ import org.springframework.web.server.WebFilter;
import java.util.List;
@SpringBootApplication(scanBasePackages = "cn.novalon.gym.manage", exclude = {
@SpringBootApplication(scanBasePackages = {"cn.novalon.gym.manage", "cn.novalon.gym.manage.groupcourse"}, exclude = {
ReactiveUserDetailsServiceAutoConfiguration.class })
@EnableR2dbcRepositories(basePackages = { "cn.novalon.gym.manage.db.dao",
"cn.novalon.gym.manage.sys.audit.repository" })
"cn.novalon.gym.manage.sys.audit.repository", "cn.novalon.gym.manage.groupcourse.dao" })
public class ManageApplication {
private static final Logger logger = LoggerFactory.getLogger(ManageApplication.class);
@@ -1,11 +1,12 @@
package cn.novalon.gym.manage.app.config;
import cn.novalon.gym.manage.groupcourse.handler.GroupCourseHandler;
import cn.novalon.gym.manage.sys.handler.auth.SysAuthHandler;
import cn.novalon.gym.manage.sys.handler.auth.PasswordDiagnosticHandler;
import cn.novalon.gym.manage.sys.handler.config.SysConfigHandler;
import cn.novalon.gym.manage.sys.handler.dictionary.DictionaryHandler;
import cn.novalon.gym.manage.sys.handler.dict.SysDictHandler;
import cn.novalon.gym.manage.sys.handler.groupCourse.GroupCourseHandler;
import cn.novalon.gym.manage.sys.handler.log.SysLogHandler;
import cn.novalon.gym.manage.sys.handler.log.OperationLogHandler;
import cn.novalon.gym.manage.sys.handler.menu.MenuHandler;
@@ -35,9 +36,9 @@ import static org.springframework.web.reactive.function.server.RouterFunctions.r
*/
@Configuration
public class SystemRouter {
@Bean
public RouterFunction<ServerResponse> systemRoutes(
GroupCourseHandler groupCourseHandler,
DictionaryHandler dictionaryHandler,
SysUserHandler userHandler,
MenuHandler menuHandler,
@@ -52,8 +53,7 @@ public class SystemRouter {
SysUserMessageHandler messageHandler,
SysFileHandler fileHandler,
SysPermissionHandler permissionHandler,
PasswordDiagnosticHandler passwordDiagnosticHandler,
GroupCourseHandler groupCourseHandler) {
PasswordDiagnosticHandler passwordDiagnosticHandler) {
return route()
// ========== 诊断路由 ==========
@@ -197,6 +197,7 @@ public class SystemRouter {
// ========== 团课路由 ==========
.GET("/api/groupCourse", groupCourseHandler::getAllGroupCourse)
.GET("/api/groupCourse/{id}", groupCourseHandler::getGroupCourseById)
.build();
}
@@ -1,75 +0,0 @@
package cn.novalon.gym.manage.db.entity;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import java.util.Date;
/**
* @author:liwentao
* @date:2026/4/25-04-25-17:50
* 团课预约记录表
*/
@Table("group_course_booking")
public class GroupCourseBookingEntity extends BaseEntity {
//团课id
@Column("course_id")
private Long courseId;
//用户id
@Column("user_id")
private Long userId;
//预约时间
@Column("booking_time")
private Date bookingTime;
//状态:0-已预约,1-已取消,2-已出席,3-缺席
@Column("status")
private Long status;
//取消时间
@Column("cancel_time")
private Date cancelTime;
public Long getCourseId() {
return courseId;
}
public void setCourseId(Long courseId) {
this.courseId = courseId;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Date getBookingTime() {
return bookingTime;
}
public void setBookingTime(Date bookingTime) {
this.bookingTime = bookingTime;
}
public Long getStatus() {
return status;
}
public void setStatus(Long status) {
this.status = status;
}
public Date getCancelTime() {
return cancelTime;
}
public void setCancelTime(Date cancelTime) {
this.cancelTime = cancelTime;
}
}
+1
View File
@@ -42,6 +42,7 @@
<module>manage-audit</module>
<module>manage-notify</module>
<module>manage-file</module>
<module>gym-groupCourse</module>
</modules>
<dependencyManagement>