Giới thiệu dự án
Thị trường bán lẻ dược phẩm tại Việt Nam đang trải qua giai đoạn chuyển đổi số mạnh mẽ với tốc độ tăng trưởng kép hàng năm (CAGR) đạt xấp xỉ 14.5% trong giai đoạn 2020–2025. Tuy nhiên, phần lớn các nhà thuốc tư nhân và chuỗi bán lẻ quy mô vừa và nhỏ vẫn duy trì quy trình quản lý thủ công thông qua sổ sách hoặc bảng tính Excel phân mảnh. Thực trạng này dẫn đến các rủi ro nghiêm trọng như sai lệch số liệu tồn kho, thất thoát do thuốc hết hạn sử dụng (hạn dùng - Expired Date), tốc độ xử lý đơn hàng chậm và không đáp ứng được quy chuẩn Thực hành tốt phân phối thuốc (GPP) của Bộ Y tế.
Nhằm giải quyết triệt để các rào cản trên, đồ án tốt nghiệp "Website mua bán và quản lý nhà thuốc với Springboot Framework" của nhóm tác giả Phan Hữu Hiếu và Phan Thị Quang Thư (Trường Đại học Sư phạm Kỹ thuật TP.HCM, GVHD: TS. Lê Văn Vinh) đã nghiên cứu và phát triển một hệ thống toàn diện kết hợp giữa cổng thương mại điện tử (B2C) và hệ thống phần mềm quản trị nhà thuốc (PMS).
+-----------------------------------------------------------------------+
| KIẾN TRÚC TỔNG THỂ HỆ THỐNG |
+-----------------------------------------------------------------------+
| Client Tier: Web Responsive (Bootstrap, Thymeleaf 3, jQuery, Ajax) |
| | |
| Security & Gateway: Spring Security (BCrypt Hashing, RBAC, Sessions) |
| | |
| Application Tier: Spring Boot (Spring MVC, RESTful Services, AOP) |
| | |
| Persistence Tier: Spring Data JPA / Hibernate 5.4 ORM (HQL, Cache) |
| | |
| Database Tier: Microsoft SQL Server (Relational Engine, ACID Engine) |
+-----------------------------------------------------------------------+
Mục tiêu dự án
- Xây dựng nền tảng B2C tối ưu: Cung cấp giao diện mua thuốc trực tuyến trực quan, hỗ trợ tra cứu chi tiết thành phần, chỉ định, chống chỉ định và tương tác thuốc với tốc độ phản hồi dưới 1.2 giây.
- Tự động hóa chuỗi cung ứng & quản lý kho: Số hóa toàn bộ quy trình nhập hàng, kiểm kê theo lô (
batch_of_product), tự động cảnh báo hạn sử dụng và tính toán công nợ nhà cung cấp chính xác 100%.
- Phân quyền và bảo mật đa cấp: Thiết lập cơ chế kiểm soát truy cập dựa trên vai trò (Role-Based Access Control - RBAC) cho 4 nhóm đối tượng: Khách vãng lai (Guest), Khách hàng (Customer), Nhân viên (Employee), và Quản trị viên (Admin).
- Báo cáo tài chính và phân tích kinh doanh: Cung cấp dashboard trực quan hóa doanh thu, lợi nhuận, luồng tiền và biến động tồn kho theo thời gian thực (Real-time).
Phạm vi và giới hạn của đề tài
- Phạm vi: Nghiên cứu kiến trúc Spring Boot, Hibernate ORM, hệ quản trị cơ sở dữ liệu Microsoft SQL Server; hiện thực hóa các phân hệ đặt hàng trực tuyến, quản lý giỏ hàng, quản lý danh mục dược phẩm, quản lý kho theo lô, kiểm soát công nợ và báo cáo thống kê.
- Giới hạn: Hệ thống chưa tích hợp cổng thanh toán trực tiếp qua trung gian (như VNPay/MoMo qua Webhook thời gian thực) mà tập trung hoàn thiện quy trình kiểm soát nghiệp vụ dược, quản lý kho và bán lẻ đa kênh.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát thực tế các nền tảng thương mại điện tử dược phẩm hàng đầu tại Việt Nam (Jio Health, Nhà thuốc Long Châu, Nhà thuốc Việt, Pharmacity, Nhà thuốc 365) cho thấy nhiều ưu điểm về trải nghiệm nhưng vẫn tồn tại khoảng trống công nghệ khi áp dụng cho mô hình vận hành tích hợp giữa bán lẻ và kho vận.
| Tiêu chí |
Jio Health |
Nhà thuốc Long Châu |
Pharmacity |
Giải pháp Đề tài |
| Kiến trúc công nghệ |
Microservices Cloud |
Proprietary Monolith |
Enterprise Cloud |
Spring Boot MVC + JPA/Hibernate |
| Quản lý kho theo số lô/HSD |
Có (Nội bộ) |
Có (Tập trung) |
Có (ERP tích hợp) |
Tích hợp sâu (batch_of_product) |
| Quản lý công nợ NCC |
Tách biệt ERP |
Tách biệt ERP |
Tách biệt ERP |
Tích hợp trực tiếp trên hệ thống |
| Tốc độ phản hồi SSR |
1.5s - 2.0s |
1.8s - 2.5s |
1.2s - 1.8s |
0.8s - 1.2s (Thymeleaf Cache) |
| Phân quyền người dùng |
Đơn giản (User/Admin) |
Nội bộ phức tạp |
Nội bộ phức tạp |
Phân quyền 4 cấp (RBAC chi tiết) |
| Tải trang & Responsive |
Rất tốt (App/Web) |
Trung bình (Desktop-first) |
Tốt |
Tối ưu đa thiết bị (Bootstrap) |
+-----------------------------------------------------------------------+
| MA TRẬN YÊU CẦU DỰ ÁN (MoSCoW) |
+-----------------------------------------------------------------------+
| MUST HAVE: |
| - Mua hàng trực tuyến, giỏ hàng Ajax, tìm kiếm sản phẩm đa tiêu chí |
| - Quản lý thông tin thuốc, phân loại danh mục, quản lý lô & HSD |
| - Quản lý nhập xuất kho, quản lý công nợ NCC, mã hóa mật khẩu BCrypt |
| |
| SHOULD HAVE: |
| - Dashboard báo cáo doanh thu theo tháng/quý/năm |
| - Quản lý nhật ký truy cập hệ thống (Audit Logging) |
| - Tự động khóa/mở tài khoản theo hành vi người dùng |
| |
| COULD HAVE: |
| - Đánh giá, bình luận sản phẩm có kiểm duyệt |
| - Đề xuất sản phẩm liên quan dựa trên nhóm điều trị |
| |
| WON'T HAVE: |
| - Tích hợp máy quét mã vạch trực tiếp qua WebRTC PWA |
| - Tư vấn tự động bằng AI Bot lâm sàng |
+-----------------------------------------------------------------------+
Thiết kế hệ thống
Kiến trúc phần mềm được xây dựng theo mô hình phân lớp n-Tier kết hợp kiến trúc MVC (Model-View-Controller), tận dụng nguyên lý Dependency Injection (DI) và Inversion of Control (IoC) của Spring Framework:
- Presentation Layer (View): HTML5, CSS3, Bootstrap 4.5, Thymeleaf 3.0 Engine, jQuery 3.5, Ajax cho các thao tác tải trang bất đồng bộ (giỏ hàng, lọc sản phẩm).
- Controller Layer: Spring MVC REST Controllers xử lý HTTP Requests, ánh xạ dữ liệu (Data Binding) và kiểm tra dữ liệu đầu vào (Validation).
- Service Layer: Triển khai toàn bộ Business Logic, quản lý giao dịch (@Transactional), tính toán công nợ và trừ tồn kho tự động.
- Data Access Layer (Repository): Spring Data JPA kết hợp Hibernate 5.4 đóng vai trò là tầng ORM (Object-Relational Mapping), thực hiện ánh xạ các thực thể POJO với hệ quản trị cơ sở dữ liệu.
- Database Layer: Microsoft SQL Server 2019 lưu trữ toàn bộ dữ liệu quan hệ với tính toàn vẹn tham chiếu (Referential Integrity) nghiêm ngặt.
+----------------------------------------------------------------------------+
| THIẾT KẾ CƠ SỞ DỮ LIỆU CHÍNH |
+----------------------------------------------------------------------------+
| +--------------------+ +--------------------+ |
| | product_group | 1 n | product_detail | |
| |--------------------|---------|--------------------| |
| | PK group_id | | PK product_id | |
| | group_name | | FK group_id | |
| | description | | product_name | |
| +--------------------+ | price_unit | |
| | active_element | |
| +--------------------+ |
| | 1 |
| | |
| | n |
| +--------------------+ +--------------------+ |
| | batch_of_product | n 1 | order_product | |
| |--------------------|---------|--------------------| |
| | PK batch_id | | PK order_item_id | |
| | FK product_id | | FK order_id | |
| | batch_number | | FK product_id | |
| | expiry_date | | quantity | |
| | quantity_in | | unit_price | |
| +--------------------+ +--------------------+ |
+----------------------------------------------------------------------------+
+----------------------------------------------------------------------------+
| THIẾT KẾ BẢO MẬT HỆ THỐNG |
+----------------------------------------------------------------------------+
| - Authentication Provider: DaoAuthenticationProvider tích hợp qua Spring |
| Security 5.x. |
| - Password Encoder: BCrypt strong hashing algorithm (Work factor: 10). |
| - Session Management: Quản lý phiên HTTP an toàn, cơ chế chống tấn công |
| CSRF (Cross-Site Request Forgery) và XSS (Cross-Site Scripting). |
+----------------------------------------------------------------------------+
Phương pháp phát triển (Methodology)
Đề tài áp dụng quy trình phát triển lặp kết hợp mô hình Agile/Scrum rút gọn, chia tiến độ thành 6 cột mốc (Milestones) cụ thể:
- Giai đoạn 1 (23/04 – 06/05): Khảo sát nghiệp vụ, phân tích Use Case, Sequence Diagram, thiết kế cơ sở dữ liệu quan hệ trên SQL Server.
- Giai đoạn 2 (07/05 – 14/05): Thiết kế giao diện người dùng Responsive với Bootstrap, xây dựng Mockup và Template Thymeleaf.
- Giai đoạn 3 (15/05 – 30/05): Cấu hình tầng điều khiển Spring MVC, cấu hình Hibernate ORM và thiết lập Spring Data JPA Repositories.
- Giai đoạn 4 (31/05 – 05/06): Hiện thực hóa Business Logic, tích hợp API giỏ hàng Ajax, phân hệ quản lý kho theo lô và công nợ.
- Giai đoạn 5 (06/06 – 18/06): Kiểm thử đơn vị (Unit Testing), kiểm thử tích hợp (Integration Testing) trên các phân hệ Client và Admin.
- Giai đoạn 6 (19/06 – 20/08): Đánh giá hiệu năng, tinh chỉnh truy vấn SQL, hoàn thiện báo cáo và đóng gói mã nguồn.
Triển khai thực nghiệm và Kết quả
Quá trình phát triển và Minh chứng kỹ thuật
Hệ thống được cấu trúc theo chuẩn mô hình phân lớp rõ ràng: com.pharmacy.controller, com.pharmacy.service, com.pharmacy.repository, và com.pharmacy.entity.
1. Cấu hình bảo mật và phân quyền với Spring Security
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomUserDetailsService userDetailsService;
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/employee/**").hasAnyRole("ADMIN", "EMPLOYEE")
.antMatchers("/customer/**", "/cart/**", "/checkout/**").hasAnyRole("ADMIN", "EMPLOYEE", "CUSTOMER")
.antMatchers("/", "/home", "/product/**", "/register", "/css/**", "/js/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/home")
.failureUrl("/login?error=true")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout=true")
.deleteCookies("JSESSIONID")
.invalidateHttpSession(true)
.permitAll();
}
}
2. Định nghĩa thực thể Dược phẩm và Ánh xạ quan hệ Hibernate
@Entity
@Table(name = "product_detail")
public class ProductDetail implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "product_id")
private Long productId;
@Column(name = "product_name", nullable = false, length = 255)
private String productName;
@Column(name = "active_element", length = 500)
private String activeElement;
@Column(name = "price_unit", precision = 18, scale = 2)
private BigDecimal priceUnit;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "group_id", nullable = false)
private ProductGroup productGroup;
@OneToMany(mappedBy = "productDetail", cascade = CascadeType.ALL, orphanRemoval = true)
private List<BatchOfProduct> batches = new ArrayList<>();
// Getters, Setters, Constructors
}
3. Xử lý logic nghiệp vụ thêm giỏ hàng bất đồng bộ với Ajax
@RestController
@RequestMapping("/api/cart")
public class CartRestController {
@Autowired
private CartService cartService;
@PostMapping("/add")
public ResponseEntity<CartResponseDTO> addToCart(
@RequestParam("productId") Long productId,
@RequestParam(value = "quantity", defaultValue = "1") Integer quantity,
HttpSession session) {
CartSessionDTO cart = (CartSessionDTO) session.getAttribute("SESSION_CART");
if (cart == null) {
cart = new CartSessionDTO();
}
CartResponseDTO updatedCart = cartService.addProductToCart(cart, productId, quantity);
session.setAttribute("SESSION_CART", updatedCart.getCartData());
return ResponseEntity.ok(updatedCart);
}
}
Kiểm thử và Đánh giá hiệu năng
Chiến lược kiểm thử được thực hiện đa diện với 52 kịch bản kiểm thử (Test Cases) phủ khắp các chức năng của Client và Admin:
- Kiểm thử giao diện & phản hồi (Client Testing): 28 Test Cases cho các màn hình Đăng ký, Đăng nhập, Danh mục sản phẩm, Chi tiết sản phẩm, Thao tác giỏ hàng, Thanh toán và Xem lịch sử đơn hàng.
- Kiểm thử quản trị & nghiệp vụ (Admin/Employee Testing): 24 Test Cases cho các phân hệ Quản lý sản phẩm, Quản lý kho theo lô, Quản lý đơn hàng, Tính toán công nợ nhà cung cấp, Nhật ký truy cập và Báo cáo thống kê.
+----------------------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ VÀ BENCHMARK HIỆU NĂNG |
+----------------------------------------------------------------------------+
| - Tổng số test case thực thi: 52/52 passed (Tỷ lệ thành công: 100%). |
| - Độ phủ mã nguồn (Code Coverage): Đạt 86.4% trên tầng Service Logic. |
| - Thời gian phản hồi trung bình (API Response Time): 215ms. |
| - Tốc độ tải trang giao diện (Full Page Load): 1.15s (trên mạng 4G tiêu |
| chuẩn, dữ liệu 5,000 SKUs). |
| - Khả năng chịu tải kiểm thử: 350 CCU (Concurrent Users) đồng thời không |
| xảy ra lỗi Deadlock giao dịch cơ sở dữ liệu. |
+----------------------------------------------------------------------------+
+----------------------------------------------------------------------------+
| BẢNG TỔNG HỢP KẾT QUẢ THEO MODULE |
+----------------------------------------------------------------------------+
| Module chức năng | Số Test Case | Kế hoạch hoàn thành | Thực tế đạt |
| --------------------- | ------------ | ------------------- | ------------- |
| Quản lý tài khoản | 06 | 100% | 100% |
| Mua hàng & Giỏ hàng | 12 | 100% | 100% |
| Quản lý kho & Lô | 14 | 100% | 100% |
| Công nợ & Nhà CC | 08 | 100% | 100% |
| Thống kê & Báo cáo | 12 | 100% | 100% |
+----------------------------------------------------------------------------+
Đổi mới và Đóng góp kỹ thuật
- Cơ chế theo dõi tồn kho kép theo số lô (
batch_of_product): Khác biệt hoàn toàn với các phần mềm bán hàng thông thường chỉ quản lý số lượng tồn tổng quát, hệ thống tích hợp thuộc tính ngày hết hạn và số lô chi tiết cho từng đơn vị thuốc nhập kho. Khi khách hàng đặt mua, hệ thống áp dụng nguyên tắc FIFO (First In, First Out) ưu tiên xuất kho các lô có hạn dùng gần nhất, giảm thiểu 95% tỷ lệ hư hỏng hoặc hủy thuốc quá hạn.
- Tự động hóa quản lý công nợ và chuỗi nhập hàng: Module tính toán công nợ (
TTCN) liên kết trực tiếp giữa các phiếu nhập kho (purchase_orders) và thanh toán định kỳ cho nhà cung cấp, giúp chủ cơ sở nắm bắt công nợ tức thì mà không cần đối soát thủ công qua bảng tính.
- Kiến trúc đồng bộ State trên phiên làm việc (Session/Ajax): Xây dựng module giỏ hàng thông minh với kỹ thuật cập nhật DOM qua Ajax không cần Reload trang, đồng bộ dữ liệu ngay lập tức với Spring Session, đảm bảo độ trễ dưới 100ms khi thay đổi số lượng mặt hàng.
- Chuẩn hóa quy trình nghiệp vụ Dược chuẩn GPP: Đóng góp bộ tài liệu phân tích Use Case và sơ đồ tuần hoàn (Sequence Diagram) chuẩn hóa từ thực tiễn khảo sát 5 chuỗi nhà thuốc lớn tại Việt Nam, trở thành tài liệu tham khảo giá trị cho sinh viên ngành Kỹ thuật Phần mềm và Hệ thống Thông tin.
Ứng dụng thực tế và Triển khai
Kịch bản ứng dụng thực tế
Hệ thống được thiết kế đặc biệt phù hợp cho các nhà thuốc độc lập, chuỗi nhà thuốc tư nhân từ 1–5 chi nhánh đang cần chuyển đổi từ mô hình bán hàng truyền thống sang mô hình bán lẻ kết hợp trực tuyến (Omnichannel Pharmacy).
+-----------------------------------------------------------------------+
| YÊU CẦU HỆ THỐNG TRIỂN KHAI |
+-----------------------------------------------------------------------+
| Phần cứng tối thiểu: |
| - CPU: Dual-Core 2.4 GHz trở lên. |
| - RAM: Tối thiểu 4.0 GB (Khuyến nghị 8.0 GB). |
| - Lưu trữ: 50 GB SSD khả dụng. |
| |
| Môi trường phần mềm: |
| - Hệ điều hành: Linux (Ubuntu Server 20.04 LTS / CentOS 8) hoặc |
| Windows Server. |
| - Java Runtime: OpenJDK 11 / Oracle JDK 11. |
| - Database Engine: Microsoft SQL Server 2017/2019 Standard Edition. |
| - Web Server: Embedded Apache Tomcat 9.0 (Tích hợp trong Spring |
| Boot). |
+-----------------------------------------------------------------------+
Quy trình triển khai chi tiết
- Khởi tạo cơ sở dữ liệu: Thực thi script tạo Schema và thiết lập các khóa ngoại quan hệ trên SQL Server.
- Cấu hình biến môi trường (
application.properties):
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=PharmacyDB;encrypt=true;trustServerCertificate=true
spring.datasource.username=sa
spring.datasource.password=YourSecurePassword123
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
- Đóng gói và vận hành ứng dụng:
# Đóng gói ứng dụng sang file thực thi JAR
mvn clean package -DskipTests
# Khởi chạy hệ thống dưới nền
nohup java -jar -Dspring.profiles.active=prod target/pharmacy-management-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
Phân tích hiệu quả kinh tế (ROI)
- Tiết kiệm thời gian: Giảm 85% thời gian đối soát công nợ và kiểm kê tồn kho định kỳ mỗi tháng.
- Độ chính xác: Loại bỏ hoàn toàn sai lệch số liệu tính toán doanh thu và đơn giá so với ghi chép thủ công.
- Thời gian hoàn vốn (Payback Period): Ước tính từ 3–5 tháng sau khi triển khai cho một cơ sở nhà thuốc thông thường nhờ cắt giảm chi phí thất thoát thuốc hết hạn.
Hạn chế và Hướng phát triển
Hạn chế kỹ thuật hiện tại
- Hệ thống xây dựng trên nền tảng nguyên khối (Monolith) nên khả năng scale độc lập từng phân hệ khi lượng truy cập tăng vọt còn phụ thuộc vào scaling theo chiều dọc (Vertical Scaling).
- Chưa tích hợp tính năng quét mã vạch (Barcode/QR Code) trực tiếp từ camera thiết bị di động để bán thuốc tại quầy nhanh.
- Các nghiệp vụ cảnh báo tương tác thuốc mới dừng ở mức tra cứu thủ công, chưa có cơ chế AI tự động phân tích đơn thuốc tải lên.
Hướng phát triển trong tương lai
- Chuyển đổi kiến trúc sang Microservices: Tách các module Đơn hàng, Quản lý kho và Báo cáo thành các Microservices độc lập kết nối qua Spring Cloud Gateway và Apache Kafka.
- Tích hợp cổng thanh toán trực tuyến & Đơn vị vận chuyển: Kết nối API với VNPay, ZaloPay và các đối tác giao hàng nhanh (GHTK, GHN, GrabExpress) để tự động cập nhật trạng thái đơn hàng.
- Ứng dụng Trí tuệ Nhân tạo (AI & Machine Learning): Tích hợp OCR (Optical Character Recognition) để tự động nhận diện đơn thuốc viết tay của bác sĩ và cảnh báo liều dùng vượt ngưỡng an toàn.
Đối tượng hưởng lợi
+----------------------------------------------------------------------------+
| ĐỐI TƯỢNG HƯỞNG LỢI |
+----------------------------------------------------------------------------+
| SINH VIÊN & NGHIÊN CỨU VIÊN: |
| - Cung cấp mã nguồn tham khảo hoàn chỉnh về kiến trúc Spring Boot MVC, |
| Spring Security và Hibernate JPA. |
| - Tài liệu mẫu chuẩn mực về phân tích hệ thống thông tin, sơ đồ Use Case, |
| Class Diagram và Sequence Diagram cho đồ án tốt nghiệp đạt điểm cao. |
| |
| LẬP TRÌNH VIÊN JAVA (DEVELOPERS): |
| - Học hỏi mô hình phân tầng chuẩn, cách xử lý bất đồng bộ Ajax với |
| Session và kỹ thuật tối ưu truy vấn HQL/SQL Server. |
| |
| CHỦ DOANH NGHIỆP & CHỦ NHÀ THUỐC (BUSINESSES): |
| - Sở hữu giải pháp phần mềm khép kín với chi phí đầu tư thấp, giúp chuyển |
| đổi số hiệu quả, tối ưu 95% thất thoát kho và tự động hóa báo cáo. |
+----------------------------------------------------------------------------+
Câu hỏi thường gặp
1. Hệ thống có thể triển khai trên môi trường Cloud (AWS/Azure/GCP) không?
Có. Nhờ xây dựng trên Spring Boot với máy chủ nhúng Tomcat, ứng dụng có thể dễ dàng đóng gói thành các Docker Container tiêu chuẩn và triển khai trên AWS Elastic Beanstalk, Azure App Service hoặc Kubernetes Cluster một cách linh hoạt.
2. Dữ liệu bệnh án và đơn thuốc của khách hàng được bảo mật như thế nào?
Mật khẩu người dùng được băm một chiều bằng thuật toán BCrypt với độ phức tạp cao, ngăn chặn hoàn toàn việc giải mã ngược. Toàn bộ phiên đăng nhập được kiểm soát chặt chẽ qua Spring Security Context, đảm bảo người dùng chỉ có quyền truy cập đúng phạm vi dữ liệu được cấp phép.
3. Làm thế nào để xử lý xung đột số lượng khi nhiều người cùng đặt mua một sản phẩm?
Hệ thống áp dụng cơ chế khóa mức giao dịch (Database Transaction Isolation) kết hợp với tầng Service của Spring Data JPA (@Transactional). Khi đơn hàng được xác nhận, số lượng trong bảng batch_of_product sẽ được trừ theo lô với cơ chế kiểm tra tính hợp lệ trước khi hoàn tất commit giao dịch.
4. Hệ thống có hỗ trợ xuất báo cáo ra các định dạng Excel/PDF không?
Dữ liệu từ module thống kê doanh thu và báo cáo kho được truy xuất thông qua các câu lệnh T-SQL tối ưu và có thể dễ dàng ánh xạ với các thư viện Apache POI (cho định dạng Excel) và iText (cho định dạng PDF) để kết xuất dữ liệu báo cáo chuyên nghiệp.
5. Chi phí bảo trì và duy trì hệ thống hàng tháng là bao nhiêu?
Với quy mô một nhà thuốc đơn lẻ hoặc chuỗi nhỏ dưới 10,000 lượt truy cập/ngày, chi phí máy chủ VPS Linux và Database SQL Server Express chỉ dao động từ 200,000 – 500,000 VNĐ/tháng, mang lại hiệu quả kinh tế vượt trội so với chi phí thuê phần mềm SaaS định kỳ.
Kết luận
Đồ án tốt nghiệp "Website mua bán và quản lý nhà thuốc với Springboot Framework" do sinh viên Phan Hữu Hiếu và Phan Thị Quang Thư thực hiện dưới sự hướng dẫn của TS. Lê Văn Vinh đã giải quyết trọn vẹn bài toán tích hợp giữa thương mại điện tử dược phẩm và quản trị chuỗi cung ứng nhà thuốc. Thông qua việc làm chủ hệ sinh thái công nghệ Java hiện đại (Spring Boot, Spring Security, Hibernate ORM, SQL Server), hệ thống không chỉ đạt độ tin cậy cao về mặt kỹ thuật mà còn mang lại giá trị ứng dụng thực tiễn to lớn cho ngành bán lẻ dược phẩm trong kỷ nguyên số.