系统架构设计

采用MVC模式分层开发,后端使用Spring Boot框架,数据库使用MySQL 8.0+版本。前端可选Thymeleaf模板或Vue.js+ElementUI组合。

数据库设计

核心表结构设计如下:

-- 宠物主表
CREATE TABLE pet_owner (
    owner_id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    phone VARCHAR(20) UNIQUE,
    address VARCHAR(200),
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 宠物信息表
CREATE TABLE pet (
    pet_id INT PRIMARY KEY AUTO_INCREMENT,
    owner_id INT NOT NULL,
    name VARCHAR(50) NOT NULL,
    species ENUM('犬','猫','兔','其他') NOT NULL,
    breed VARCHAR(50),
    birth_date DATE,
    gender ENUM('公','母'),
    FOREIGN KEY (owner_id) REFERENCES pet_owner(owner_id)
);

-- 疫苗记录表
CREATE TABLE vaccination (
    vax_id INT PRIMARY KEY AUTO_INCREMENT,
    pet_id INT NOT NULL,
    vax_type VARCHAR(50) NOT NULL,
    vax_date DATE NOT NULL,
    next_due_date DATE NOT NULL,
    completed BOOLEAN DEFAULT FALSE,
    notes TEXT,
    FOREIGN KEY (pet_id) REFERENCES pet(pet_id)
);

-- 健康档案表
CREATE TABLE health_record (
    record_id INT PRIMARY KEY AUTO_INCREMENT,
    pet_id INT NOT NULL,
    record_date DATETIME DEFAULT CURRENT_TIMESTAMP,
    weight DECIMAL(5,2),
    temperature DECIMAL(3,1),
    symptoms TEXT,
    diagnosis TEXT,
    treatment TEXT,
    FOREIGN KEY (pet_id) REFERENCES pet(pet_id)
);

后端实现

Spring Boot配置
// application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/pet_community
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=update

实体类示例
@Entity
@Table(name = "pet")
public class Pet {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer petId;
    
    @ManyToOne
    @JoinColumn(name = "owner_id", nullable = false)
    private PetOwner owner;
    
    private String name;
    private String species;
    private String breed;
    private LocalDate birthDate;
    private String gender;
    // getters/setters
}

疫苗提醒服务
@Service
public class VaccinationReminderService {
    @Autowired
    private VaccinationRepository vaccinationRepo;
    
    public List<Vaccination> getUpcomingVaccines(int daysAhead) {
        LocalDate start = LocalDate.now();
        LocalDate end = start.plusDays(daysAhead);
        return vaccinationRepo.findByNextDueDateBetweenAndCompletedFalse(start, end);
    }
    
    public void sendSmsReminders() {
        List<Vaccination> upcoming = getUpcomingVaccines(7);
        // 实现短信发送逻辑
    }
}

前端实现

疫苗提醒组件(Vue示例)
<template>
  <div class="reminder-list">
    <el-table :data="upcomingVaccines">
      <el-table-column prop="pet.name" label="宠物"></el-table-column>
      <el-table-column prop="vaxType" label="疫苗类型"></el-table-column>
      <el-table-column prop="nextDueDate" label="到期日"></el-table-column>
      <el-table-column label="操作">
        <template #default="scope">
          <el-button @click="confirmVaccinated(scope.row)">确认接种</el-button>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      upcomingVaccines: []
    }
  },
  mounted() {
    this.fetchUpcomingVaccines();
  },
  methods: {
    async fetchUpcomingVaccines() {
      const res = await axios.get('/api/vaccines/upcoming');
      this.upcomingVaccines = res.data;
    },
    async confirmVaccinated(vaccination) {
      await axios.put(`/api/vaccines/${vaccination.vaxId}`, {
        completed: true
      });
      this.fetchUpcomingVaccines();
    }
  }
}
</script>

定时任务配置

@Configuration
@EnableScheduling
public class ScheduleConfig {
    
    @Autowired
    private VaccinationReminderService reminderService;
    
    @Scheduled(cron = "0 0 9 * * ?") // 每天上午9点执行
    public void dailyReminderTask() {
        reminderService.sendSmsReminders();
    }
}

健康档案管理

健康记录API示例
@RestController
@RequestMapping("/api/health")
public class HealthRecordController {
    
    @Autowired
    private HealthRecordService recordService;
    
    @PostMapping
    public ResponseEntity<?> addRecord(@RequestBody HealthRecord record) {
        HealthRecord saved = recordService.saveRecord(record);
        return ResponseEntity.created(URI.create("/api/health/" + saved.getRecordId())).build();
    }
    
    @GetMapping("/pet/{petId}")
    public List<HealthRecord> getPetRecords(@PathVariable Integer petId) {
        return recordService.getRecordsByPet(petId);
    }
}

系统扩展建议

  1. 增加宠物照片存储功能,使用阿里云OSS或七牛云存储
  2. 实现多社区管理,添加社区管理员角色
  3. 集成微信小程序端,方便用户随时查看
  4. 添加宠物活动轨迹记录功能(需GPS数据)
  5. 开发数据分析模块,统计社区宠物健康趋势

部署注意事项

  1. MySQL配置建议设置合适的字符集:

    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    

  2. 对于生产环境,建议:

    • 使用Redis缓存高频访问数据
    • 配置Spring Boot Actuator进行健康监控
    • 实现API访问日志记录
    • 添加Swagger文档支持
  3. 安全措施:

    • 实现JWT身份验证
    • 对敏感数据如手机号进行加密存储
    • 配置HTTPS协议
    • 定期备份数据库

更多推荐