Tổng quan
Với tốc độ đô thị hóa ngày càng nhanh, số lượng động vật vô chủ tăng lên đáng kể, trong khi các phương thức cứu trợ truyền thống dần bộc lộ hạn chế. Dù nhu cầu bảo vệ phúc lợi động vật ngày càng được quan tâm, việc phân tán thông tin và quy trình nhận nuôi phức tạp vẫn là rào cản lớn đối với hiệu quả cứu trợ. Một hệ thống quản lý thông tin cứu trợ và nhận nuôi động vật nhỏ hiệu quả, tiện lợi là nhu cầu cấp thiết hiện nay. Hệ thống này nhằm mục đích kết nối các tổ chức cứu trợ, tình nguyện viên và người có nhu cầu nhận nuôi, giúp chia sẻ thông tin và tối ưu quy trình, từ đó thúc đẩy hoạt động cứu trợ trở nên chuyên nghiệp và phổ biến hơn.
Từ khóa: Cứu trợ động vật, Quản lý thông tin nhận nuôi, Tối ưu tài nguyên, Dịch vụ cộng đồng
Kiến trúc hệ thống
Hệ thống sử dụng SpringBoot để xây dựng backend, tích hợp Mini Program WeChat cho giao diện di động, và cơ sở dữ liệu MySQL đảm bảo tính ổn định cũng như an toàn của dữ liệu. Các chức năng chính bao gồm đăng tải thông tin cứu trợ, xét duyệt hồ sơ nhận nuôi, quản lý quyền người dùng và phân tích dữ liệu, hỗ trợ đa vai trò thao tác đồng thời. Mini Program cung cấp các tính năng như thông báo tức thì, dẫn đường bản đồ và tư vấn trực tuyến nhằm nâng cao trải nghiệm người dùng. Thiết kế tuân thủ nguyên tắc mô-đun hóa, dễ mở rộng và sẵn sàng triển khai ngay lập tức.
Từ khóa: SpringBoot, Mini Program WeChat, MySQL, Thiết kế mô-đun, Giao tiếp thời gian thực
Mô hình cơ sở dữ liệu
Bảng lưu thông tin động vật được cứu trợ (rescue_animal_info)
Ghi lại các thông tin cơ bản về động vật đã được cứu trợ, thời gian tạo tự động sinh ra, khóa chính là ID tự tăng. Lưu trữ đặc điểm, tình trạng sức khỏe và vị trí tìm thấy.
| Trường | Kiểu dữ liệu | Mô tả |
|---|---|---|
| animal_id | INT | Khóa chính, định danh duy nhất của động vật |
| rescue_time | DATETIME | Thời điểm cứu trợ (tự động tạo) |
| animal_type | VARCHAR(20) | Loài động vật (mèo/chó...) |
| health_status | VARCHAR(50) | Mô tả tình trạng sức khỏe |
| location_found | VARCHAR(100) | Tọa độ nơi phát hiện |
| is_adopted | BOOLEAN | Đã được nhận nuôi hay chưa |
Bảng quản lý người dùng (user_profile)
Lưu trữ thông tin đăng ký và phân quyền người dùng, khóa chính là OpenID từ nền tảng WeChat, hỗ trợ xác thực qua hệ thống mở.
| Trường | Kiểu dữ liệu | Mô tả |
|---|---|---|
| user_id | VARCHAR(32) | Khóa chính, OpenID từ WeChat |
| nickname | VARCHAR(50) | Tên hiển thị |
| role_type | TINYINT | Vai trò (0-Người nhận nuôi / 1-Tình nguyện viên cứu trợ) |
| contact_phone | VARCHAR(15) | Số điện thoại liên hệ |
| register_time | DATETIME | Thời điểm đăng ký (tự động tạo) |
Bảng lưu đơn xin nhận nuôi (adoption_apply)
Lưu chi tiết hồ sơ nhận nuôi, trạng thái xét duyệt và dấu thời gian cập nhật, khóa chính là mã đơn UUID.
| Trường | Kiểu dữ liệu | Mô tả |
|---|---|---|
| apply_id | VARCHAR(36) | Khóa chính, mã đơn UUID |
| animal_id | INT | ID động vật liên quan |
| applicant_id | VARCHAR(32) | OpenID người nộp đơn |
| apply_reason | TEXT | Lý do muốn nhận nuôi |
| audit_status | TINYINT | Trạng thái xét duyệt (0-Chờ xử lý / 1-Duyệt) |
| audit_time | DATETIME | Thời điểm xét duyệt (tự động cập nhật) |
Công nghệ sử dụng
- Backend: Spring Boot – Framework mạnh mẽ cho ứng dụng Java doanh nghiệp, áp dụng triết lý "cấu hình theo quy ước", giảm thiểu cấu hình thủ công. Hỗ trợ nhúng server, triển khai dưới dạng JAR độc lập và tích hợp sẵn các tính năng giám sát.
- Frontend: Vue.js – Framework frontend linh hoạt với hệ sinh thái phong phú, hỗ trợ phát triển SPA hiệu quả nhờ kiến trúc hướng thành phần và luồng dữ liệu phản hồi.
Mã nguồn mẫu
package com.app;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
@MapperScan(basePackages = {"com.dao"})
public class AnimalRescueApp extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(AnimalRescueApp.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(AnimalRescueApp.class);
}
}
package com.controller;
import com.entity.UserEntity;
import com.service.UserService;
import com.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
@RestController
@RequestMapping("/api/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/login")
public R login(@RequestParam String account, @RequestParam String password) {
UserEntity user = userService.findByAccount(account);
if (user == null || !user.getPassword().equals(password)) {
return R.error("Tài khoản hoặc mật khẩu không đúng");
}
String token = generateToken(user.getId(), account);
return R.ok().put("token", token);
}
@PostMapping("/register")
public R register(@RequestBody UserEntity user) {
if (userService.existsByAccount(user.getAccount())) {
return R.error("Tài khoản đã tồn tại");
}
user.setId(new Date().getTime());
userService.save(user);
return R.ok();
}
private String generateToken(Long userId, String account) {
// Triển khai logic tạo token ở đây
return "sample_token";
}
}