以下是一个基于Spring Boot的会员制医疗服务管理系统的案例代码,包含会员管理、医疗服务预约、健康档案、套餐管理和支付功能。代码结构清晰,适合扩展和定制。
src/main/java/com/example/medical
├── config/ # 配置类
├── controller/ # API控制器
│ ├── MemberController.java
│ ├── AppointmentController.java
│ ├── MedicalRecordController.java
│ └── PaymentController.java
├── model/ # 数据实体
│ ├── Member.java
│ ├── MedicalService.java
│ ├── Appointment.java
│ ├── MedicalRecord.java
│ ├── HealthPackage.java
│ └── Payment.java
├── repository/ # JPA仓库
├── service/ # 业务逻辑
├── dto/ # 数据传输对象
└── MedicalSystemApplication.java # 主启动类
Member.java
)@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String phone;
private LocalDate registerDate;
private String membershipLevel; // 会员等级(基础/高级/VIP)
private boolean isActive; // 会员状态
// Getters & Setters
}
MedicalService.java
)@Entity
public class MedicalService {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String serviceName; // 服务名称(体检、专家问诊等)
private String description;
private BigDecimal price;
// Getters & Setters
}
Appointment.java
)@Entity
public class Appointment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
private Member member;
@ManyToOne
private MedicalService service;
private LocalDateTime appointmentTime;
private String status; // 状态(待确认/已完成/已取消)
// Getters & Setters
}
MemberRepository.java
)public interface MemberRepository extends JpaRepository<Member, Long> {
// 根据手机号查询会员
Optional<Member> findByPhone(String phone);
// 查询有效会员
List<Member> findByIsActiveTrue();
}
AppointmentRepository.java
)public interface AppointmentRepository extends JpaRepository<Appointment, Long> {
// 查询指定会员的预约记录
List<Appointment> findByMemberId(Long memberId);
// 查询特定时间段的预约
List<Appointment> findByAppointmentTimeBetween(LocalDateTime start, LocalDateTime end);
}
MemberService.java
)@Service
public class MemberService {
@Autowired
private MemberRepository memberRepository;
// 注册新会员
public Member registerMember(Member member) {
if (memberRepository.findByPhone(member.getPhone()).isPresent()) {
throw new RuntimeException("手机号已注册");
}
member.setRegisterDate(LocalDate.now());
member.setActive(true);
return memberRepository.save(member);
}
// 更新会员等级
public Member upgradeMembership(Long memberId, String newLevel) {
Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new RuntimeException("会员不存在"));
member.setMembershipLevel(newLevel);
return memberRepository.save(member);
}
}
AppointmentController.java
)@RestController
@RequestMapping("/api/appointments")
public class AppointmentController {
@Autowired
private AppointmentService appointmentService;
// 创建新预约
@PostMapping
public ResponseEntity<?> createAppointment(@RequestBody AppointmentRequest request) {
Appointment appointment = appointmentService.createAppointment(
request.getMemberId(),
request.getServiceId(),
request.getAppointmentTime()
);
return ResponseEntity.ok(appointment);
}
// DTO用于接收请求参数
@Data
static class AppointmentRequest {
private Long memberId;
private Long serviceId;
private LocalDateTime appointmentTime;
}
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/public/**").permitAll()
.antMatchers("/api/members/**").hasRole("MEMBER")
.antMatchers("/api/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic();
}
}
PaymentService.java
)@Service
public class PaymentService {
@Autowired
private PaymentRepository paymentRepository;
@Transactional
public Payment processPayment(Long memberId, BigDecimal amount) {
Payment payment = new Payment();
payment.setMemberId(memberId);
payment.setAmount(amount);
payment.setPaymentDate(LocalDateTime.now());
payment.setStatus("SUCCESS");
// 调用第三方支付接口的逻辑
// ...
return paymentRepository.save(payment);
}
}
application.yml
)spring:
datasource:
url: jdbc:mysql://localhost:3306/medical_system
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
# 开启Swagger文档
springdoc:
api-docs:
path: /v3/api-docs
swagger-ui:
path: /swagger-ui.html
启动应用:
mvn spring-boot:run
API测试(使用Postman):
POST /api/public/members
{
"name": "张三",
"phone": "13800138000",
"membershipLevel": "VIP"
}
访问Swagger文档:
http://localhost:8080/swagger-ui.html
健康档案管理:
套餐订阅系统:
@Entity
public class HealthPackage {
@Id
@GeneratedValue
private Long id;
private String packageName;
@ManyToMany
private Set<MedicalService> includedServices;
private BigDecimal price;
}
消息通知服务:
数据分析模块:
该系统可作为基础框架,根据实际医疗机构的业务流程进行深度定制开发。