527 lines
11 KiB
Plaintext
527 lines
11 KiB
Plaintext
@startuml
|
|
!theme plain
|
|
skinparam backgroundColor #FFFFFF
|
|
skinparam classAttributeIconSize 0
|
|
skinparam linetype ortho
|
|
|
|
package "com.gpf.pethospital.entity" {
|
|
class User {
|
|
- Long id
|
|
- String username
|
|
- String phone
|
|
- String email
|
|
- String password
|
|
- String role
|
|
- Integer status
|
|
- String avatar
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class Appointment {
|
|
- Long id
|
|
- Long userId
|
|
- Long petId
|
|
- Long doctorId
|
|
- LocalDateTime appointmentTime
|
|
- String reason
|
|
- String status
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class Pet {
|
|
- Long id
|
|
- Long ownerId
|
|
- String name
|
|
- String species
|
|
- String breed
|
|
- String gender
|
|
- LocalDate birthDate
|
|
- String medicalHistory
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class Drug {
|
|
- Long id
|
|
- String name
|
|
- String category
|
|
- String manufacturer
|
|
- String description
|
|
- BigDecimal price
|
|
- Integer stock
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class MedicalRecord {
|
|
- Long id
|
|
- Long appointmentId
|
|
- Long doctorId
|
|
- Long petId
|
|
- String symptoms
|
|
- String diagnosis
|
|
- String treatment
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class Prescription {
|
|
- Long id
|
|
- Long medicalRecordId
|
|
- String description
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class PrescriptionItem {
|
|
- Long id
|
|
- Long prescriptionId
|
|
- Long drugId
|
|
- Integer quantity
|
|
- String usage
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class Visit {
|
|
- Long id
|
|
- Long appointmentId
|
|
- Long doctorId
|
|
- Long petId
|
|
- String chiefComplaint
|
|
- String physicalExamination
|
|
- String diagnosis
|
|
- String treatmentPlan
|
|
- LocalDateTime visitTime
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class VaccineRecord {
|
|
- Long id
|
|
- Long petId
|
|
- Long vaccineId
|
|
- String vaccineName
|
|
- LocalDate vaccinationDate
|
|
- LocalDate nextDueDate
|
|
- String administeredBy
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class Order {
|
|
- Long id
|
|
- Long userId
|
|
- String orderNo
|
|
- String status
|
|
- BigDecimal totalAmount
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class StockIn {
|
|
- Long id
|
|
- Long drugId
|
|
- Integer quantity
|
|
- BigDecimal unitPrice
|
|
- String supplier
|
|
- String operator
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class StockOut {
|
|
- Long id
|
|
- Long drugId
|
|
- Integer quantity
|
|
- String purpose
|
|
- String operator
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class Message {
|
|
- Long id
|
|
- Long senderId
|
|
- Long receiverId
|
|
- String title
|
|
- String content
|
|
- String status
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class Notice {
|
|
- Long id
|
|
- String title
|
|
- String content
|
|
- String publisher
|
|
- LocalDateTime publishTime
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
|
|
class Report {
|
|
- Long id
|
|
- String reportType
|
|
- String title
|
|
- String content
|
|
- LocalDate reportDate
|
|
- String generatedBy
|
|
- LocalDateTime createTime
|
|
- LocalDateTime updateTime
|
|
- Integer deleted
|
|
}
|
|
}
|
|
|
|
package "com.gpf.pethospital.mapper" {
|
|
interface BaseMapper<T> {
|
|
+ insert(T entity): int
|
|
+ deleteById(Serializable id): int
|
|
+ updateById(T entity): int
|
|
+ selectById(Serializable id): T
|
|
+ selectList(Wrapper<T> queryWrapper): List<T>
|
|
}
|
|
|
|
interface UserMapper {
|
|
}
|
|
|
|
interface AppointmentMapper {
|
|
}
|
|
|
|
interface PetMapper {
|
|
}
|
|
|
|
interface DrugMapper {
|
|
}
|
|
|
|
interface MedicalRecordMapper {
|
|
}
|
|
|
|
interface PrescriptionMapper {
|
|
}
|
|
|
|
interface PrescriptionItemMapper {
|
|
}
|
|
|
|
interface VisitMapper {
|
|
}
|
|
|
|
interface VaccineRecordMapper {
|
|
}
|
|
|
|
interface OrderMapper {
|
|
}
|
|
|
|
interface StockInMapper {
|
|
}
|
|
|
|
interface StockOutMapper {
|
|
}
|
|
|
|
interface MessageMapper {
|
|
}
|
|
|
|
interface NoticeMapper {
|
|
}
|
|
|
|
interface ReportMapper {
|
|
}
|
|
}
|
|
|
|
package "com.gpf.pethospital.service" {
|
|
interface IService<T> {
|
|
+ save(T entity): boolean
|
|
+ removeById(Serializable id): boolean
|
|
+ updateById(T entity): boolean
|
|
+ getById(Serializable id): T
|
|
+ list(): List<T>
|
|
+ page(IPage<T> page, Wrapper<T> queryWrapper): IPage<T>
|
|
}
|
|
|
|
interface UserService {
|
|
+ register(User user): boolean
|
|
+ login(String username, String password): AuthUser
|
|
}
|
|
|
|
interface AppointmentService {
|
|
+ book(Appointment appointment): boolean
|
|
+ cancel(Long id): boolean
|
|
+ getByUserId(Long userId): List<Appointment>
|
|
}
|
|
|
|
interface PetService {
|
|
+ getPetsByOwnerId(Long ownerId): List<Pet>
|
|
+ updatePet(Pet pet): boolean
|
|
}
|
|
|
|
interface DrugService {
|
|
+ getLowStockDrugs(): List<Drug>
|
|
+ updateStock(Long drugId, Integer quantity): boolean
|
|
}
|
|
|
|
interface MedicalRecordService {
|
|
+ createRecord(MedicalRecord record): boolean
|
|
+ getRecordsByPetId(Long petId): List<MedicalRecord>
|
|
}
|
|
|
|
interface PrescriptionService {
|
|
+ createPrescription(Prescription prescription): boolean
|
|
+ getPrescriptionsByRecordId(Long recordId): List<Prescription>
|
|
}
|
|
|
|
interface PrescriptionItemService {
|
|
+ addItems(Long prescriptionId, List<PrescriptionItem> items): boolean
|
|
}
|
|
|
|
interface VisitService {
|
|
+ createVisit(Visit visit): boolean
|
|
+ getVisitsByAppointmentId(Long appointmentId): Visit
|
|
}
|
|
|
|
interface VaccineRecordService {
|
|
+ addVaccineRecord(VaccineRecord record): boolean
|
|
+ getVaccineRecordsByPetId(Long petId): List<VaccineRecord>
|
|
}
|
|
|
|
interface OrderService {
|
|
+ createOrder(Order order): boolean
|
|
+ updateOrderStatus(Long orderId, String status): boolean
|
|
}
|
|
|
|
interface StockInService {
|
|
+ addStock(StockIn stockIn): boolean
|
|
}
|
|
|
|
interface StockOutService {
|
|
+ consumeStock(StockOut stockOut): boolean
|
|
}
|
|
|
|
interface MessageService {
|
|
+ sendMessage(Message message): boolean
|
|
+ getMessagesByUserId(Long userId): List<Message>
|
|
}
|
|
|
|
interface NoticeService {
|
|
+ publishNotice(Notice notice): boolean
|
|
+ getPublishedNotices(): List<Notice>
|
|
}
|
|
|
|
interface ReportService {
|
|
+ generateReport(String type, LocalDate startDate, LocalDate endDate): Report
|
|
+ getReportsByType(String type): List<Report>
|
|
}
|
|
}
|
|
|
|
package "com.gpf.pethospital.service.impl" {
|
|
class UserServiceImpl {
|
|
}
|
|
|
|
class AppointmentServiceImpl {
|
|
}
|
|
|
|
class PetServiceImpl {
|
|
}
|
|
|
|
class DrugServiceImpl {
|
|
}
|
|
|
|
class MedicalRecordServiceImpl {
|
|
}
|
|
|
|
class PrescriptionServiceImpl {
|
|
}
|
|
|
|
class PrescriptionItemServiceImpl {
|
|
}
|
|
|
|
class VisitServiceImpl {
|
|
}
|
|
|
|
class VaccineRecordServiceImpl {
|
|
}
|
|
|
|
class OrderServiceImpl {
|
|
}
|
|
|
|
class StockInServiceImpl {
|
|
}
|
|
|
|
class StockOutServiceImpl {
|
|
}
|
|
|
|
class MessageServiceImpl {
|
|
}
|
|
|
|
class NoticeServiceImpl {
|
|
}
|
|
|
|
class ReportServiceImpl {
|
|
}
|
|
}
|
|
|
|
package "com.gpf.pethospital.controller" {
|
|
class UserController {
|
|
- UserService userService
|
|
- PasswordEncoder passwordEncoder
|
|
+ me(): ApiResponse<?>
|
|
+ updateMe(User payload): ApiResponse<?>
|
|
+ list(long page, long size, String role): ApiResponse<?>
|
|
+ create(User user): ApiResponse<?>
|
|
+ updateStatus(Long id, Integer status): ApiResponse<?>
|
|
+ resetPassword(Long id, String newPassword): ApiResponse<?>
|
|
+ stats(): ApiResponse<?>
|
|
}
|
|
|
|
class AppointmentController {
|
|
- AppointmentService appointmentService
|
|
+ book(Appointment appointment): ApiResponse<?>
|
|
+ cancel(Long id): ApiResponse<?>
|
|
+ list(Long userId, String status): ApiResponse<?>
|
|
}
|
|
|
|
class PetController {
|
|
- PetService petService
|
|
+ listByOwner(Long ownerId): ApiResponse<?>
|
|
+ create(Pet pet): ApiResponse<?>
|
|
+ update(Pet pet): ApiResponse<?>
|
|
}
|
|
|
|
class DrugController {
|
|
- DrugService drugService
|
|
+ list(String category, String keyword): ApiResponse<?>
|
|
+ create(Drug drug): ApiResponse<?>
|
|
+ update(Drug drug): ApiResponse<?>
|
|
}
|
|
|
|
class MedicalRecordController {
|
|
- MedicalRecordService medicalRecordService
|
|
+ create(MedicalRecord record): ApiResponse<?>
|
|
+ getByPet(Long petId): ApiResponse<?>
|
|
}
|
|
|
|
class PrescriptionController {
|
|
- PrescriptionService prescriptionService
|
|
+ create(Prescription prescription): ApiResponse<?>
|
|
+ getByRecord(Long recordId): ApiResponse<?>
|
|
}
|
|
|
|
class PrescriptionItemController {
|
|
- PrescriptionItemService prescriptionItemService
|
|
+ addItems(Long prescriptionId, List<PrescriptionItem> items): ApiResponse<?>
|
|
}
|
|
|
|
class VaccineRecordController {
|
|
- VaccineRecordService vaccineRecordService
|
|
+ addRecord(VaccineRecord record): ApiResponse<?>
|
|
+ getByPet(Long petId): ApiResponse<?>
|
|
}
|
|
|
|
class OrderController {
|
|
- OrderService orderService
|
|
+ create(Order order): ApiResponse<?>
|
|
+ updateStatus(Long orderId, String status): ApiResponse<?>
|
|
}
|
|
|
|
class StockInController {
|
|
- StockInService stockInService
|
|
+ addStock(StockIn stockIn): ApiResponse<?>
|
|
}
|
|
|
|
class StockOutController {
|
|
- StockOutService stockOutService
|
|
+ consume(StockOut stockOut): ApiResponse<?>
|
|
}
|
|
|
|
class MessageController {
|
|
- MessageService messageService
|
|
+ send(Message message): ApiResponse<?>
|
|
+ listByUser(Long userId): ApiResponse<?>
|
|
}
|
|
|
|
class NoticeController {
|
|
- NoticeService noticeService
|
|
+ publish(Notice notice): ApiResponse<?>
|
|
+ list(): ApiResponse<?>
|
|
}
|
|
|
|
class ReportController {
|
|
- ReportService reportService
|
|
+ generate(String type, LocalDate startDate, LocalDate endDate): ApiResponse<?>
|
|
+ list(String type): ApiResponse<?>
|
|
}
|
|
|
|
class AuthController {
|
|
- UserService userService
|
|
- JwtTokenUtil jwtTokenUtil
|
|
+ register(User user): ApiResponse<?>
|
|
+ login(UserLoginDto loginDto): ApiResponse<?>
|
|
}
|
|
}
|
|
|
|
package "com.gpf.pethospital.config" {
|
|
class SecurityConfig {
|
|
}
|
|
|
|
class WebConfig {
|
|
}
|
|
|
|
class MybatisPlusConfig {
|
|
}
|
|
}
|
|
|
|
package "com.gpf.pethospital.common" {
|
|
class ApiResponse {
|
|
- Integer code
|
|
- String message
|
|
- Object data
|
|
+ success(Object data): ApiResponse
|
|
+ error(Integer code, String message): ApiResponse
|
|
}
|
|
}
|
|
|
|
' 关系映射
|
|
User ||--o{ Appointment : "makes"
|
|
User ||--o{ Pet : "owns"
|
|
User ||--o{ MedicalRecord : "creates"
|
|
User ||--o{ Message : "sends/receives"
|
|
User ||--o{ Order : "places"
|
|
|
|
Pet ||--o{ Appointment : "has"
|
|
Pet ||--o{ MedicalRecord : "has"
|
|
Pet ||--o{ VaccineRecord : "has"
|
|
Pet ||--o{ Visit : "has"
|
|
|
|
Appointment ||--|| MedicalRecord : "generates"
|
|
Appointment ||--|| Visit : "generates"
|
|
|
|
Drug }o--o{ PrescriptionItem : "included in"
|
|
Prescription ||--o{ PrescriptionItem : "contains"
|
|
|
|
MedicalRecord ||--o{ Prescription : "has"
|
|
MedicalRecord ||--o{ Visit : "has"
|
|
|
|
StockIn ||--|| Drug : "affects"
|
|
StockOut ||--|| Drug : "affects"
|
|
|
|
Order ||--o{ PrescriptionItem : "contains"
|
|
|
|
User ||--o{ VaccineRecord : "administers"
|
|
|
|
@enduml |