TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

KHOA CÔNG NGHỆ THÔNG TIN

CHUYÊN NGÀNH HỆ THỐNG THÔNG TIN

(cid:69)(cid:71)

Huỳnh Thị Kim Dung

0112049

Trần Nam Quốc

0112322

Cổng báo cáo tổng hợp trực tuyến

phục vụ HTTT chỉ đạo ngành Y tế

cộng đồng

KHOÁ LUẬN CỬ NHÂN TIN HỌC

GIÁO VIÊN HƯỚNG DẪN

PGS.TS. ĐỒNG THỊ BÍCH THỦY

NIÊN KHOÁ 2001-2005

Luận văn tốt nghiệp

0112049 - 0112322

MỤC LỤC

LỜI MỞ ĐẦU.......................................................................................................................5 CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN .......................................................................8 1. Giới thiệu về HISP .......................................................................................................8 2. Hệ thống DHIS 1.x .......................................................................................................8 1.2 Chức năng chính của DHIS 1.3 ............................................................................9 1.3 Môi trường cài đặt hệ thống ...............................................................................10 1.4 Mục đích – Yêu cầu triển khai hệ thống............................................................10 1.5 Nhận xét - Đánh giá .............................................................................................10 2. GIỚI THIỆU HỆ THỐNG DHIS 2.0.......................................................................12 2.1. Giới thiệu .............................................................................................................12 2.2. Mô hình và mối quan hệ giữa các mô đun trong hệ thống..............................12 2.3. Chức năng chính. ................................................................................................13 CHƯƠNG 2: NỘI DUNG THỰC HIỆN LUẬN VĂN ...................................................15 1. Mục tiêu ......................................................................................................................15 2. Yêu cầu thực hiện ......................................................................................................15 2.1 Tìm hiểu và triển khai hệ thống DHIS 1.3.........................................................15 2.2 Tìm hiểu các công nghệ mã nguồn mở...............................................................15 2.3 Phát triển ứng dụng Report portal ....................................................................16 3. Cụ thể các công việc thực hiện..................................................................................16 3.1 Tìm hiểu và triển khai hệ thống DHIS 1.3.........................................................16 3.1.1 Cấu trúc hệ thống DHIS: .............................................................................16 3.1.2 Các nội dung đã thực hiện khi tham gia triển khai hệ thống: ..................18 3.2 Tìm hiểu các công nghệ và phát triển ứng dụng Report portal ......................25 CHƯƠNG 3: PHÁT TRIỂN REPORT PORTAL..........................................................26 1. Giới thiệu tổng quan và phân tích yêu cầu..............................................................26 1.1. Giới thiệu .............................................................................................................26 1.2. Yêu cầu chức năng ..............................................................................................28 1.2.1. Các yêu cầu nghiệp vụ. ................................................................................28 1.2.2. Các yêu cầu hệ thống. ..................................................................................28 1.2.3. Các yêu cầu khác..........................................................................................29 1.3 Nội dung yêu cầu về công nghệ...........................................................................29 1.4. Phân tích các yêu cầu chức năng.......................................................................30 1.5 Sơ đồ Use case ......................................................................................................31 1.5.1. Tác nhân của hệ thống.................................................................................31 1.5.2. Lược đồ Use case cấp cao. ...........................................................................33 1.5.3. Mô tả chi tiết từng Use case. .......................................................................35 1.5.3.1 Manage Users .........................................................................................35 1.5.3.2. Authorize user access............................................................................37 1.5.3.3. Manage Reports ....................................................................................40 1.5.3.4. Login ......................................................................................................44 1.5.3.5. Change password ..................................................................................45 1.5.3.6. Search for reports .................................................................................46 1.6. Mô tả các bước xử lí theo từng yêu cầu ............................................................46 1.6.1. Đăng nhập và đăng kí người dùng:............................................................46 1.6.2. Yêu cầu upload các tập tin báo cáo hoặc các mẫu báo cáo:.....................48

Trang 2 / 137

Luận văn tốt nghiệp

0112049 - 0112322

1.6.3. Yêu cầu tra cứu báo cáo. .............................................................................48 1.6.4. Yêu cầu phân quyền sử dụng hệ thống ......................................................49 1.6.5. Yêu cầu kết xuất báo cáo từ các tập tin mẫu.............................................49 1.6.6. Yêu cầu quản lí người dùng ........................................................................49 1.6.7. Yêu cầu xây dựng tính năng đa ngôn ngữ:................................................50 1.6.8. Kiểm tra quyền hạn và cung cấp chức năng của hệ thống ......................50 2. Thiết kế lớp.................................................................................................................51 2.1. Mô hình lớp đối tượng cơ sở và các interfaces.................................................51 2.1.1. Thiết kế các gói (package) ...........................................................................51 2.1.2. Sơ đồ lớp:......................................................................................................58 2.1.3. Diễn giải:.......................................................................................................59 2.1.3.1 Danh sách các lớp đối tượng:................................................................59 2.1.3.2 Danh sách các quan hệ: .........................................................................60 2.2. Thiết kế các lớp xử lí action. ..............................................................................62 2.2.1. Sơ đồ các gói:................................................................................................62 2.2.2. Nội dung các xử lí chính:.............................................................................63 3. Cấu trúc cơ sở dữ liệu................................................................................................68 3.1.Ánh xạ các lớp đối tượng sang cơ sở dữ liệu quan hệ. .....................................68 3.2. Cấu trúc của cơ sở dữ liệu sau khi ánh xạ........................................................71 3.2.1. Mô hình thực thể kết hợp............................................................................71 3.2.2. Thuyết minh cho mô hình ...........................................................................71 3.2.3. Mô hình quan hệ ..........................................................................................74 4. Thiết kế giao diện.......................................................................................................75 4.1. Sơ đồ liên kết các trang ......................................................................................75 4.2. Nội dung và thiết kế các trang chức năng chính..............................................76 4.2.1. Đăng nhập và gởi đăng kí người dùng.......................................................76 4.2.2. Trang chủ......................................................................................................78 4.2.3. Trang tìm kiếm báo cáo...............................................................................81 4.2.4. Trang phân quyền sử dụng hệ thống. ........................................................83 4.2.5. Trang kết xuất báo cáo................................................................................85 CHƯƠNG 4: GIỚI THIỆU CÔNG NGHỆ VÀ MÔI TRƯỜNG PHÁT TRIỂN ........87 1. Spring framework......................................................................................................87 1.1. Lí do sử dụng Spring? ........................................................................................87 1.2. Vấn đề Inversion of Control trong Spring........................................................87 1.3. Khái niệm về bean và bean factory. ..................................................................91 2. Hibernate ....................................................................................................................92 2.1. Lí do sử dụng Hibernate. ...................................................................................92 2.2. Các vấn đề bất tương xứng giữa đối tượng và cơ sở dữ liệu quan hệ............93 2.2.1. Thế nào là tính bền vững: ...........................................................................93 2.2.2. Mô hình ghép đôi không xứng:...................................................................94 3. Webwork, Velocity...................................................................................................100 3.1. Webwork framework. ......................................................................................100 3.1.1. Giới thiệu webwork framework. ..............................................................100 3.1.2. Xwork và cấu hình Webwork thực thi các actions .................................100 3.2. Velocity template...............................................................................................103 3.2.1. Giới thiệu Velocity template. ....................................................................103

Trang 3 / 137

Luận văn tốt nghiệp

0112049 - 0112322

3.2.2. Sử dụng velocity và webwork trong môi trường Java và trên trang HTML. ..................................................................................................................104 CHƯƠNG 5: CÀI ĐẶT VÀ THỬ NGHIỆM ................................................................107 1. Cài đặt.......................................................................................................................107 1.1 Môi trường phát triển........................................................................................107 1.2 Mô tả chi tiết từng xử lí trong các lớp đối tượng ............................................107 1.2.1. Interface ReportManager .........................................................................107 1.2.2. Interface ReportTypeManager.................................................................110 1.2.3. Interface OrganizationStore .....................................................................111 1.2.4. Interface DataStore....................................................................................113 1.2.5. Interface UserManager .............................................................................115

1.3. Nội dung xây dựng các tập tin ánh xạ đối tượng sang cơ sở dữ liệu quan hệ. ...................................................................................................................................125 1.3.1. Đối tượng period (Period.hbm.xml) .........................................................125 1.3.2. Đối tượng periodtype (PeriodType.hbm.xml) .........................................125 1.3.3. Đối tượng reporttype (ReportType.hbm.xml).........................................125 1.3.4. Đối tượng reportfile (Report.hbm.xml) ...................................................126 1.3.5. Đối tượng organizationunit (OrganizationUnit.hbm.xml).....................128 1.3.6.Đối tượng organizationunitgroup OrganizationUnitGroup.hbm.xml) .129 1.3.7. Đối tượng user (User.hbm.xml) ................................................................130 1.3.8. Đối tượng group (Group.hbm.xml)..........................................................131 1.3.9. Đối tượng role (Role.hbm.xml) .................................................................131 1.3.10. Đối tượng roletype (RoleType.hbm.xml)...............................................132 2. Thử nghiệm ..............................................................................................................132 CHƯƠNG 6: NHẬN XÉT VÀ ĐÁNH GIÁ...................................................................135 1. Đánh giá ưu và khuyết điểm. ..................................................................................135 1.1 Ưu điểm...............................................................................................................135 1.2 Khuyết điểm. ......................................................................................................135 2. Hướng phát triển trong tương lai...........................................................................136 TÀI LIỆU THAM KHẢO...............................................................................................137

Trang 4 / 137

Luận văn tốt nghiệp

0112049 - 0112322

LỜI MỞ ĐẦU

Ngày nay, cùng với sự phát triển cao của khoa học kỹ thuật, xã hội tiến bộ,

công nghiệp hoá - hiện đại hoá là những vấn đề nảy sinh trong cuộc sống khi mà

mọi thứ ngày càng trở nên phức tạp, và yêu cầu về sự hoàn hảo, chuẩn mực ngày

càng được chú trọng. Sự phát triển không ngừng của lĩnh vực Công nghệ Thông tin

đã phần nào giải quyết được các vấn đề nảy sinh đó. Công nghệ thông tin đã có

những bước phát triển mạnh mẽ và đang trở nên phổ biến trong tất cả các lĩnh vực.

Ở Việt Nam, cũng không ngoài xu hướng phát triển ấy, các tổ chức xã hội và

các doanh nghiệp phải định hướng con đường và các bước phát triển để ngày càng

hoàn thiện và nâng cao hiệu quả hơn. Các công ty tin học không ngừng đầu tư và đề

ra các giải pháp cũng như cung cấp các ứng dụng nhằm đáp ứng nhu cầu cấp bách

đó. Công nghệ thông tin đã dần trở nên sâu rộng hơn trong từng cơ quan, xí nghiệp

từ quy mô nhỏ đến quy mô lớn, từ lĩnh vực này sang lĩnh vực khác. Đặc biệt, lĩnh

vực y tế là một trong những lĩnh vực mang nhiều thử thách và áp lực xã hội, làm

sao để cung cấp được các dịch vụ y tế nhanh chóng, kịp thời và phải được quản lý

một cách chặt chẽ, chính xác? Trước đây, tất cả công việc được thực hiện một cách

thủ công nên đòi hỏi đội ngũ cán bộ y tế phải tốn nhiều thời gian và công sức nhằm

đảm bảo được yêu cầu trong lĩnh vực ấy. Xuất phát từ thực tế ấy, Bộ y tế Việt Nam

cũng dần có những giải pháp nhằm từng bước củng cố và nâng cao hiệu quả hoạt

động. Hệ thống thông tin sức khoẻ y tế cộng đồng chính là một trong những giải

pháp ấy. Hệ thống đã xuất hiện ở nhiều quốc gia trên thế giới và được các nước ủng

hộ nhiệt tình. Hệ thống này trước mắt nhằm thu thập các thông tin y tế đáp ứng yêu

cầu thống kê các chỉ tiêu và quản lý các vấn đề liên quan đến y tế cộng đồng được

hiệu quả hơn. Hiện nay hệ thống DHIS v1.3 đang được triển khai thí điểm tại Thành

phố Hồ Chí Minh và Huế dưới sự hợp tác giữa Đại học Oslo, Na Uy, công ty TMA

và sở Y tế Thành phố Hồ Chí Minh. Song song với quá trình triển khai này là việc

phát triển hệ thống DHIS 2.0 với mục đích xây dựng trên nền web nhằm hỗ trợ tối

đa cho việc chia sẻ thông tin và phục vụ đắc lực cho quá trình đánh giá, lên kế

Trang 5 / 137

hoạch, ra quyết định cho các chương trình sức khỏe. DHIS 2.0 được xây dựng trên

Luận văn tốt nghiệp

0112049 - 0112322

mã nguồn mở sử dụng Java và một số công nghệ mới hiện đang rất phổ biến trên

thế giới như: Spring framework, Hibernate, Webwork, Velocity….

Module Report portal là một trong 19 module của hệ thống DHIS 2.0. Đây là

một ứng dụng web cho phép chia sẻ thông tin báo cáo giữa các đơn vị y tế, kết xuất

báo cáo theo các mẫu thiết kế từ người dùng. Toàn bộ quá trình phát triển module

này được thực hiện tại công ty TMA Solutions với sự giám sát của các thành viên

Na Uy trong nhóm và công cụ quản lí dự án jira ( www.hisp.info/jira).

Tham gia vào dự án về Hệ thống thông tin y tế cộng đồng này, chúng em

mong muốn được góp một phần nhỏ công sức vào công cuộc phát triển chung của

ngành y tế nói riêng hay nói chung là sự phát triển của đất nước Việt Nam.

Luận văn được trình bày theo bố cục gồm 6 chương và 1 phụ lục như sau:

- Chương 1, 2: Giới thiệu về hệ thống DHIS v1.x và hệ thống DHIS 2.0

Nội dung phần này nhằm cung cấp một cái nhìn tổng quan về Hệ thống

thông tin sức khoẻ cộng đồng (DHIS – District Health Information System), các

chức năng, sơ đồ thiết kế cơ sở dữ liệu…. Đồng thời giới thiệu hệ thống DHIS 2.0

đang được phát triển, so sánh sự khác nhau giữa hai hệ thống và mối liên hệ giữa

ứng dụng Report portal và các mô đun khác trong hệ thống mới.

- Chương 3: Phát triển ứng dụng Report portal.

Nội dung phần này trình bày tất cả các vấn đề liên quan trực tiếp đến quá

trình xây dựng ứng dụng Report portal. Quá trình xây dựng bao gồm: phân tích các

yêu cầu, thiết kế xử lí, thiết kế lớp đối tượng, xây dựng tập tin ánh xạ đối tượng

sang cơ sở dữ liệu quan hệ, thiết kế lớp action, thiết kế giao diện. Riêng thông tin cụ

thể trong từng lớp đối tượng, chi tiết các thuộc tính và nội dung tập tin ánh xạ đối

tượng chúng em xin trình bày trong phần phụ lục.

- Chương 4: Giới thiệu công nghệ và môi trường phát triển

Nội dung phần này nhằm giới thiệu các công nghệ mới được ứng dụng để

phát triển hệ thống. Chúng em chỉ chọn những thông tin chung mang tính giải thích

cho lí do sử dụng và những đặc điểm nội trội của những công nghệ này. Các vấn đề

Trang 6 / 137

tìm hiểu sâu về công nghệ xin được trình bày trong phần phụ lục.

Luận văn tốt nghiệp

0112049 - 0112322

- Chương 5: Cài đặt và thử nghiệm

Nội dung phần này trình bày cách thức cài đặt ứng dụng, các dữ liệu mẫu

và cách thực hiện kiểm thử chương trình.

- Chương 6: Nhận xét và đánh giá

Nội dung phần này trình bày các ưu khuyết điểm của chương trình, và

hướng phát triển trong tương lai.

- Phụ lục:

Nội dung phần phụ lục được chia làm ba phần:

Phần A: Sưu liệu cho toàn bộ quá trình phân tích hệ thống DHIS 1.x và

quá trình thực hiện triển khai và cài đặt hệ thống cho 6 quận thí điểm tại Thành phố

Hồ Chí Minh.

Phần B: Tìm hiểu công nghệ Hibernate, JUnit, Maven, JasperReport.

Phần C: Sưu liệu và hồ sơ thiết kế cho quá trình phát triển ứng dụng

Trang 7 / 137

Report portal.

Luận văn tốt nghiệp

0112049 - 0112322

CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN

1. Giới thiệu về HISP

Hệ thống thông tin y tế (HISP – Health Information System Programme) được

xây dựng và phát triển đầu tiên tại Nam Phi, và được chính phủ Nam Phi chú trọng

phát triển ứng dụng trong ngành y tế (được đánh giá là phần mềm chuẩn quốc gia)

nhằm phục vụ yêu cầu chăm sóc sức khoẻ cộng đồng y tế. Phần mềm được xây

dựng miễn phí và thuộc một trong những sản phẩm mã nguồn mở. Dự án đã được

nghiên cứu phát triển tiếp bởi đội ngũ nghiên cứu từ NaUy và với hy vọng được

triển khai và phát triển trên nhiều quốc gia. Hệ thống đã được tiếp nhận và ủng hộ

nhiệt tình bởi nhiều trường đại học, các nhà nghiên cứu, chính phủ các nước trên thế

giới như Thổ Nhĩ Kỳ. Ấn độ, Ethiopia, Cu Ba và hiện nay cũng đang ứng dụng và

phát triển ở Việt Nam.

Công việc của HISP tập trung vào việc tập hợp dữ liệu, phân tích và thực hiện

các yêu cầu về y tế thông qua phần mềm hỗ trợ DHIS (District Health Information

Software – “Hệ thống thông tin sức khoẻ theo khu vực”) để sử dụng quản lý các cấp

quận huyện, đặc biệt quan tâm các vấn đề về lưu trữ, quản lý, phân tích dữ liệu, tính

toán, … từ đó đưa ra những giải pháp, định hướng phù hợp với từng khu vực, quốc

gia.

2. Hệ thống DHIS 1.x

1.1 Khái niệm “Hệ thống thông tin sức khoẻ cộng đồng”

Hệ thống thông tin sức khoẻ cộng đồng (DHIS – District Health Information

Software) là một phần mềm thuộc dự án Hệ thống thông tin y tế (HISP – Health

Information System programme) nhằm phục vụ yêu cầu chăm sóc sức khoẻ cộng

đồng y tế. Phần mềm DHIS hỗ trợ các dịch vụ về sức khoẻ như lưu trữ thông tin,

báo cáo về các chương trình sức khoẻ thông qua các ứng dụng nhập liệu, phân tích,

tổng hợp dữ liệu,... từ đó đưa ra những giải pháp, định hướng phù hợp với từng khu

Trang 8 / 137

vực đồng thời đảm bảo tính nhất quán về quản lí trong lĩnh vực y tế.

Luận văn tốt nghiệp

0112049 - 0112322

Ở Việt Nam, hệ thống DHIS đang được triển khai và ứng dụng ở Thành phố

Hồ Chí Minh và Thành phố Huế, và được tìm hiểu, phân tích, tối ưu hoá các chức

năng sao cho phù hợp với yêu cầu thực tế. Cụ thể các tiện tiện ích được quan tâm

và phát triển như:

- Phần mềm là công cụ linh hoạt với cấu trúc chuẩn được sử dụng phù hợp

với dữ liệu từng địa phương. (Tuỳ địa phương mà có thể sử dụng một cấu trúc cơ sở

dữ liệu của địa phương đó).

- Phần mềm là công cụ với nhiều thuộc tính có thể được định nghĩa và

chuyển đổi linh hoạt nhằm đáp ứng nhu cầu xây dựng khác nhau của từng đơn vị.

- Hỗ trợ người dùng công tác lưu trữ, quản lý dữ liệu và phân tích dữ liệu

để xuất các báo cáo theo các định dạng linh hoạt.

- Phần mềm đa ngôn ngữ

- Phần mềm miễn phí và với mã nguồn mở. Phần được tìm hiểu và phân

tích, phát triển bởi nhóm phát triển tại Việt Nam dưới sự hỗ trợ của công ty TMA

và đội ngũ phát triển từ NaUy

1.2 Chức năng chính của DHIS 1.3

Hệ thống DHIS đã được xây dựng và phát triển ban đầu tại Nam Phi và hiện

nay đã được nhiều quốc gia quan tâm, ứng dụng. Với phiên bản 1.3 hiện tại, DHIS

hỗ trợ các nghiệp vụ y tế chính:

- Xây dựng cơ cấu tổ chức (cấu trúc đơn vị) các đơn vị y tế theo cấp: Đây

là chức năng cho phép người dùng định nghĩa sơ đồ tổ chức phân cấp của hệ thống

y tế.

- Định nghĩa các đơn vị y tế cho hệ thống: Cho phép định nghĩa các đơn vị

y tế của khu vực, các đơn vị sẽ được xây dựng tương ứng với cấu trúc đơn vị đã

định nghĩa trước.

- Định nghĩa các phần tử dữ liệu, các phần tử dữ liệu tạm và các chỉ số liên

quan: Đây chính là các thông số y tế cần quan tâm, lưu trữ số liệu , báo cáo thống

Trang 9 / 137

kê,…

Luận văn tốt nghiệp

0112049 - 0112322

- Lưu trữ các dữ liệu người dùng nhập vào hệ thống, tổng hợp dữ liệu theo

từng nhóm đơn vị và tổng hợp dữ liệu từ các đơn vị cấp dưới cho đơn vị cấp trên

tương ứng.

- Xuất dữ liệu ra các tập tin văn bản, đồng thời cũng cho import dữ liệu rời

rạc từ các tập tin văn bản của các đơn vị khác nhau để thành dữ liệu thống nhất: Các

dữ liệu nhập vào để quản lí sau khi phân tích, tổng hợp có thể được xuất ra dưới

dạng tập tin văn bản để có thể import dữ liệu đó vào hệ thống ở một nơi khác.

- Xuất dữ liệu ra tập tin data mart (tập tin dữ liệu thông minh): Đây là tập

tin dữ liệu Access hỗ trợ các thao tác tổng hợp, kết xuất báo cáo cho đơn vị.

1.3 Môi trường cài đặt hệ thống

Hệ thống được phát triển bằng Access.

1.4 Mục đích – Yêu cầu triển khai hệ thống

Việc triển khai hệ thống DHIS tại Việt Nam được thực hiện dưới sự chỉ đạo

của Bộ y tế, sự hỗ trợ từ phía NaUy và được thực hiện trực tiếp bởi công ty TMA ở

Tp HCM. Mục tiêu chủ yếu là đáp ứng các yêu cầu từ thực tế trong lĩnh vực chăm

sóc sức khỏe y tế cộng đồng.

Mục tiêu cụ thể:

- Bước đầu tin học hoá trong lĩnh vực y tế

- Tạo điều kiện thuận lợi cho công tác quản lý và theo dõi tình hình hoạt

động tại các bệnh viện, trung tâm y tế trong toàn thành phố.

- Xây dựng đội ngũ cán bộ y tế thạo tin học và có khả năng ứng dụng, khai

thác các tính năng của hệ thống DHIS sao cho phù hợp với thực tế.

- Công tác triển khai cũng là bước tiếp cận, tìm hiểu và phân tích yêu cầu

thực tiễn nhằm thiết kế, xây dựng nên các hệ thống, chương trình phát triển trong

tương lai.

1.5 Nhận xét - Đánh giá

Hiện tại, hệ thống y tế tại Thành phố Hồ Chí Minh hoạt động theo quy trình:

Mỗi tháng, các phường sẽ tổng hợp số liệu và báo cáo theo mẫu (thống nhất cho tất

cả các phường). Các báo cáo sẽ được gởi lên đơn vị cấp cao hơn để tổng hợp và lập

Trang 10 / 137

báo cáo cho cấp đó (theo mẫu quy định chung cho quận). Tất cả các công việc đều

Luận văn tốt nghiệp

0112049 - 0112322

do nhân viên phụ trách và đều thực hiện thủ công. Do đó công việc ghi nhận số liệu

và công tác lưu trữ tốn nhiều thời gian và công sức. Bên cạnh đó do việc tính toán

thủ công nên đôi lúc sai lệch về số liệu, dữ liệu không thống nhất,…

Hệ thống y tế Thành phố Hồ Chí Minh đang dần được xây dựng và hoàn chỉnh

các cơ cấu tổ chức phân theo cấp và quản lý riêng từng lĩnh vực, từng chương trình.

Hệ thống sức khoẻ cộng đồng được chia làm nhiều chương trình như: Chương trình

chăm sóc sức khoẻ bà mẹ và trẻ em, chương trình Vắc xin, chương trình HIV –

AIDS, chương trình phòng chống lao,… Cùng với sự quản lý chặt chẽ theo các nội

dung riêng biệt như thế là sự đòi hỏi về tính chặt chẽ trong quản lý, sự thống nhất

trong hoạt động.

Với nhu cầu thực tế của hệ thống y tế Việt Nam, hệ thống DHIS hiện tại cần

được cải tiến các chức năng sao cho phù hợp và tiện dụng hơn. Cùng với sự cải tiến

đó, cần xây dựng các hệ thống, các chương trình mới hỗ trợ phù hợp cho từng khía

cạnh của ngành y tế (chăm sóc trẻ em, chăm sóc sức khỏe phụ nữ, vắc xin, bệnh

lao,… ). Các ứng dụng được phát triển có thể được tích hợp lại với nhau để tạo

thành một hệ thống hoạt động hiệu quả như một dây chuyền hoàn chỉnh. Cụ thể, các

ứng dụng mới cần phát triển:

Web patient: Quản lý thông tin bệnh nhân tại các trạm y tế phường xã

Report designer: Hỗ trợ công cụ giúp người dùng có thể thiết kế các nội

dung báo cáo tương ứng với từng nội dung quản lý về y tế.

Report generator: Hỗ trợ công cụ kết xuất các báo cáo từ các dữ liệu được

nhập vào và theo mẫu mà report designer đã hỗ trợ thiết kế

Report portal: Cung cấp ứng dụng hỗ trợ người dùng upload các báo cáo đã

kết xuất lên server thay vì phải gửi báo cáo lên cho cấp trên bằng thủ công.

Report portal cũng là ứng dụng mà chúng em sẽ quan tâm và xây dựng khi tham gia

dự án này. Các chức năng cụ thể và các bước phân tích, thiết kế, xây dựng sẽ được

đề cập đến trong phần 3 - nội dung chính của Report portal. Riêng phần nội dung về

công cụ kết xuất báo cáo hỗ trợ cho hệ thống 1.x chúng em xin trình bày ở phần phụ

Trang 11 / 137

lục.

Luận văn tốt nghiệp

0112049 - 0112322

2. GIỚI THIỆU HỆ THỐNG DHIS 2.0

2.1. Giới thiệu

DHIS 2.0 là hệ thống quản lí thông tin y tế được phát triển dựa trên phiên bản

DHIS v1.x do trường Đại học Oslo, Na Uy thực hiện. Phần mềmDHIS 2.0 với

những mô đun sẽ được phát triển trên môi trường Java (dùng IDE là Eclipse để soạn

thảo ) có thể chạy trên hệ điều hành Linux , độc lập với hệ điều hành , giúp cho sản

phẩm không còn phụ thuộc vào nền tảng bên dưới. Cùng với việc sử dụng mã

nguồn mở thì hệ thống cũng sử dụng 1 số công nghệ tiên tiến để hổ trợ chương trình

như: Maven, JUnit, Subversion, Spring và Hibernate…

DHIS 2.0 được phân chia ra làm 19 mô đun bao gồm: Patient mô đun for wards,

Indicator module, Validation module, Import/export module, Standard data entry,

Customised data entry, System admin module, DHIS core, Alternative persistence

strategy, DHIS 1.4 bridge, Wireless module, Internationalization localization, Web

pivot module, Desktop pivot module, Report portal module, Report generator

module, Report designer module, GIS report integration, GIS module.

2.2. Mô hình và mối quan hệ giữa các mô đun trong hệ thống

Trong phần này, chúng em chỉ giới thiệu 1 cách tóm tắt các mô đun chính có

liên quan trực tiếp đến đề tài của hệ thống bao gồm: DHIS Core và Report mô đun.

DHIS Core: là mô đun chứa tât cả thông tin về hệ thống, những tập hợp những

thông tin dữ liệu quan trọng của hệ thống. Là nơi trực tiếp kết nối CSDL để lấy

thông tin về dữ liệu liên quan. Những mô đun khác liên quan đến hệ thống, liên

quan đến tập hợp dữ liệu trong CSDL sẽ phải thông qua mô đun DHIS Core để lấy

thông tin từ CSDL như mô tả của hình.

Report Mô đun: mô đun này hỗ trợ người dùng xây dựng các template báo cáo.

Sẽ có các user interface cho phép người dùng thêm các thông tin về giai đoạn báo

cáo, đơn vị tổ chức để điền vào báo cáo. Dựa trên những mẩu thiết kế sẵn và dữ liệu

nguồn cần thiết, report generator sẽ tạo ra những mẩu báo cáo với các định dạng

khác nhau (html, pdf …). Jasper report là 1 công cụ generator report có thể dùng để

Trang 12 / 137

tạo ra những mẩu báo cáo theo yêu cầu và được sử dụng trong mô đun này.

Luận văn tốt nghiệp

0112049 - 0112322

Report Mô đun có 3 mô đun nhỏ thực hiện các công việc khác nhau: Report

Designer, Report Generator, Report Portal. Ba mô đun này liên quan đến nhau cùng

tạo ra 1 báo cáo hoàn chỉnh để upload và download. Mối liên quan giữa ba mô đun

Hình 1.1: Sơ đồ liên kết các mô đun trong hệ thống DHIS 2.0

này sẽ được trình bày chi tiết ở phần sau.

2.3. Chức năng chính.

- Quản lí và chia sẻ các thông tin y tế.

- Định nghĩa các phần tử dữ liệu, các chỉ số tính toán trong các chương trình

sức khỏe.

- Kết xuất báo cáo theo mẫu qui định của bộ Y tế, cho phép người dùng tự

thiết kế các mẫu báo cáo.

- Chia sẻ báo cáo giữa các cấp, hỗ trợ thông tin chính xác và cần thiết cho việc

Trang 13 / 137

ra quyết định và lên kế hoạch.

Luận văn tốt nghiệp

0112049 - 0112322

- Có khả năng tương tác với hệ thống phiên bản 1.x.

2.4. So sánh giữa DHIS 2.0 và DHIS 1.x

DHIS phiên bản 2.0 DHIS phiên bản 1.x

Xây dựng trên môi trường Windows và - Độc lập với hệ điều hành và hệ

cơ sở dữ liệu Access quản trị cơ sở dữ liệu

- Báo cáo kết xuất được thiết kế trước, - Hỗ trợ kết xuất các mẫu báo cáo

không có đáp ứng được yêu cầu. theo yêu cầu

- Hỗ trợ chia sẻ báo cáo giữa các đơn - Báo cáo sau khi kết xuất được gửi đi

vị y tế thông qua một ứng dụng web. qua mail.

Trang 14 / 137

Bảng 1.1: So sánh giữa DHIS 2.0 và DHIS 1.x

Luận văn tốt nghiệp

0112049 - 0112322

CHƯƠNG 2: NỘI DUNG THỰC HIỆN LUẬN VĂN

1. Mục tiêu

Hỗ trợ công tác triển khai hệ thống tại thành phố Hồ Chí Minh. Thông qua đó

phân tích, tiếp nhận yêu cầu từ thực tế để phát triển ứng dụng Report portal.

2. Yêu cầu thực hiện

2.1 Tìm hiểu và triển khai hệ thống DHIS 1.3

Khi tham gia vào dự án HISP, để đảm bảo hoàn thành nhiệm vụ thực tập tại

công ty và đảm bảo thực hiện tốt đề tài tốt nghiệp, nhóm chúng em đã tìm hiểu về

hệ thống DHIS, tham gia công tác triển khai hệ thống theo sự phân công của công

ty TMA. Cụ thể phải đảm bảo các yêu cầu công việc như sau:

- Tìm hiểu kiến trúc, phương thức hoạt động của hệ thống DHIS 1.3.

- Tìm hiểu qui trình quản lí y tế tại thành phố Hồ Chí Minh, các tài liệu liên

quan.

- Xây dựng tập tin dữ liệu để ứng dụng cho thành phố.

- Xây dựng công cụ hỗ trợ kết xuất báo cáo theo các yêu cầu thực tế

- Tham gia công tác triển khai hệ thống cho các quận huyện trong thành phố.

2.2 Tìm hiểu các công nghệ mã nguồn mở

Hệ thống được xây dựng và phát triển phục vụ cho ngành y tế - một lĩnh vực

rất rộng lớn trong xã hội. Do đó yêu cầu vấn đề chi phí là vấn đề đáng quan tâm đối

với nhiều quốc gia. Giải pháp nào cho các quốc gia còn khó khăn, các khu vực, đơn

vị còn kém về khả năng kinh tế?

Chính vì lí do đó, công nghệ mã nguồn mở được nhóm phát triển hệ thống từ

NaUy đặc biệt chú trọng và chọn làm công cụ để phát triển các ứng dụng. Đây là

điều thật sự ích lợi vì có thể áp dụng miễn phí trên nhiều quốc gia, và tuỳ thuộc vào

yêu cầu cụ thể của từng quốc gia, khu vực mà xây dựng các ứng dụng thật sự phù

Trang 15 / 137

hợp. Các công nghệ được tìm hiểu để phát triển ứng dụng:

Luận văn tốt nghiệp

0112049 - 0112322

- Spring framework: cung cấp khả năng quản lí các dependency linh hoạt,

thêm nữa Spring có hỗ trợ các công nghệ ánh xạ đối tượng sang cơ sở dữ liệu như

JDO, Hibernate và iBatis, và Spring có hỗ trợ mô hình Web MVC.

- Hibernate: Hỗ trợ việc ánh xạ đối tượng sang cơ sở dữ liệu

- Webwork: tương tự với một web framework khá nổi tiếng khác của Jakarta

là Struts. Ngoài ra Webwork còn cung cấp thêm ba chức năng khác là: dispatcher,

Web-specific result và một tập các tag được sử dùng ở tầng view của mô hình

MVC.

- Velocity: Cung cấp một cách tiếp cận dễ dàng hơn trong xử lí, thể hiện các

thông tin động trên trang web, ngoài ra có thể truy xuất đến các đối tượng Java.

2.3 Phát triển ứng dụng Report portal

Report portal sẽ cung cấp ứng dụng hỗ trợ người dùng upload các báo cáo đã

kết xuất lên server thay vì phải gửi báo cáo lên cho cấp trên bằng thủ công. Ứng

dụng này phải đảm bảo các yêu cầu về chức năng cũng như yêu cầu tiện dụng đối

với các người dùng trong lĩnh vực y tế.

3. Cụ thể các công việc thực hiện

3.1 Tìm hiểu và triển khai hệ thống DHIS 1.3

Với thời gian thực tập tại công ty TMA, chúng em tìm hiểu , phân tích và hỗ

trợ công tác triển khai và hoàn thiện hệ thống DHIS v1.3. Các nội dung thực hiện đã

được phân công và thực hiện hiệu quả. Công tác triển khai hệ thống DHIS được

đánh giá cao và được sự hưởng ứng tích cực của các đơn vị y tế. Hiện tại các đơn vị

y tế đang sử dụng hệ thống DHIS v1.3 cùng với chương trình kết xuất báo cáo đã

phần nào giảm thiểu được công việc tính toán phức tạp trước đây.

3.1.1 Cấu trúc hệ thống DHIS:

(cid:153) Hệ thống file: cơ sở dữ liệu của DHIS được lưu trữ dưới dạng các tập

tin Access, bao gồm 2 loại:

Data File: Bao gồm tất cả các bảng, câu lệnh truy vấn lưu trữ thông tin

về đơn vị, cấu trúc đơn vị, được định nghĩa sẵn (hoặc người dùng định nghĩa thêm

Trang 16 / 137

cho phù hợp), các dữ liệu người dùng nhập vào để lưu trữ cho các đơn vị.

Luận văn tốt nghiệp

0112049 - 0112322

Data Mart: Data File lưu trữ dữ liệu thực và sau khi phân tích, tổng hợp

dữ liệu từ các dữ liệu nhập vào đó, hệ thống hỗ trợ xuất ra một tập tin khác nhằm

lưu trữ các dữ liệu tổng hợp, hỗ trợ các chức năng khác như truy xuất đến dữ liệu

mộ cách nhanh chóng. Đó gọi là Data Mart. Data mart có thể được cập nhật thường

xuyên từ data file một cách linh hoạt (có thể cập nhật dữ liệu từng phần, dữ liệu mới

hoặc có thể cập nhật toàn bộ dữ liệu từ data file).

(cid:153) OrgUnits (Đơn vị các cấp):Các đơn vị được định nghĩa liên quan đến 2

khái niệm: Cấu trúc đơn vị và Đơn vị các cấp.

Cấu trúc đơn vị: Hệ thống quy định: Khi định nghĩa các orgunits thì

phải định nghĩa đủ 5 cấp (từ trên xuống) và dữ liệu chỉ nhập cho 1 cấp thấp nhất.

Các dữ liệu của các cấp cao hơn sẽ tự động cập nhật (bằng tổng dữ liệu của các đơn

vị cấp con của nó). Tuỳ thuộc vào từng địa phương, khu vực mà cấu trúc được xây

dựng khác nhau.Nếu như thiếu 1 cấp nào thì sẽ được định nghĩa thành cấp giả (Ví

dụ Dummy)

Đơn vị các cấp: Hệ thống sẽ lưu trữ tất cả các thông tin về đơn vị

như (Tên đơn vị, cấp đơn vị, cấp cha của đơn vị này, địa điểm,…Quan trọng nhất là

việc xác định đúng cấp cho đơn vị khi định nghĩa để khi nhập dữ liệu, chương trình

sẽ tự động tính dữ liệu cho các đơn vị cấp cao hơn.

(cid:153) Phần tử dữ liệu (DataElement)

Phần tử dữ liệu bao gồm tất cả các thông tin hỗ trợ cho việc lưu trữ dữ liệu.

Mỗi phần tử dữ liệu thể hiện một thông số về sức khoẻ và được sử dụng để nhập

cho tất cả các đơn vị.

Khi nhập dữ liệu, ứng với từng đơn vị, số liệu cho từng phần tử dữ liệu sẽ

được ghi nhận và tự động cập nhật cho các đơn vị cấp cao hơn.

(cid:153) Phần tử dữ liệu tạm (Sermi – DataElement)

Phần tử dữ liệu tạm cũng giống như các phần tử dữ liệu nhưng dùng để thể

Trang 17 / 137

hiện các thông tin ít thay đổi, các thông tin phục vụ cho việc đánh giá việc thực hiện

Luận văn tốt nghiệp

0112049 - 0112322

(thông tin thường kỳ) so với việc quản lý của đơn vị. Phần tử dữ liệu tạm thường

dùng trong việc phân tích. Các giá trị của các phần tử dữ liệu này là những con số ít

thay đổi (thường được nhập liệu theo các quý), người dùng không phải tốn thời gian

để nhập nhiều lần.

(cid:153) Các chỉ số (Indicator)

Các chỉ số tức là tỷ số giữa khối lượng thực hiện ngoài thực tế so với khối

lượng quản lý chung của đơn vị. Các chỉ số này hỗ trợ việc đánh giá chung các hoạt

động y tế của từng đơn vị từ đó đánh giá các nội dung và hiệu quả thực hiện. Các

chỉ số này được quy định thống nhất chung trong cả nước cho từng lĩnh vực đánh

giá nhằm có cách nhìn tổng quát và đánh giá công bằng với tất cả đơn vị. Thường

thì được định nghĩa theo công thức:

Tỷ lệ = Chỉ số thực hiện/ Tổng số đối tượng

3.1.2 Các nội dung đã thực hiện khi tham gia triển khai hệ thống:

(cid:153) Bước 1: Xây dựng hoàn chỉnh hệ thống DHIS v1.3 phù hợp với

thực tế

(cid:190) Định nghĩa cấu trúc đơn vị cho datafile:

Qua phân tích sơ đồ tổ chức quản lí y tế ngoài thực tế, sơ đồ tổ

Trang 18 / 137

chức y tế tại Thành phố Hồ Chí Minh như sau:

Luận văn tốt nghiệp

0112049 - 0112322

Hình 2.1: Cấu trúc đơn vị y tế các cấp

Chúng em xây dựng cấu trúc đơn vị cho hệ thống y tế cho Thành phố Hồ

Chí Minh như sau (Phù hợp cho chương trình “Chăm sóc sức khoẻ Bà mẹ” và

chương trình “Chăm sóc sức khoẻ trẻ em”:

Stt Hệ thống đơn vị y tế Cấp

Dummy (Cấp giả) 1 Cấp1

Việt Nam 2 Cấp 2

Thành phố Hồ Chí Minh 3 Cấp 3

4 Quận/ huyện hoặc Bệnh viện (thuộc sự quản lý Cấp 4

của Tp)

5 Phường/ Xã Cấp 5

Bảng 2.1: Ví dụ cấu trúc đơn vị y tế

(cid:190) Định nghĩa các đơn vị y tế theo các cấp

Định nghĩa tất cả các đơn vị y tế thuộc sự quản lý theo các cấp trong thành

phố: 24 đơn vị quận/ huyện, và tất cả các trung tâm y tế phường/ xã thuộc sự quản

Trang 19 / 137

lý của 24 đơn vị cấp quận/ huyện đó.

Luận văn tốt nghiệp

0112049 - 0112322

(cid:190) Định nghĩa các phần tử dữ liệu, phần tử dữ liệu tạm và các chỉ số

cho 2 chương trình: Chương trình chăm sóc sức khoẻ Bà mẹ và chương trình chăm

sóc sức khoẻ trẻ em.

Từ các báo cáo tổng hợp từ thực tế, các phần tử dữ liệu, phần tử dữ liệu tạm

được định nghĩa vào data file. Đây là những thông tin cần thiết để lưu trữ các nội

dung thực hiện của đơn vị.

Chương trình bà mẹ: định nghĩa 134 phần tử dữ liệu:

Trang 20 / 137

Hình 2.2: Xây dựng phần tử dữ liệu trong DHIS 1.3

Luận văn tốt nghiệp

0112049 - 0112322

Định nghĩa các phần tử dữ liệu tạm:

Hình 2.3: Định nghĩa phần tử dữ liệu tạm trong DHIS 1.3

Chương trình trẻ em: Định nghĩa 114 phần tử dữ liệu

Hình 2.4: Xây dựng phần tử dữ liệu cho chương trình trẻ em trong DHIS 1.3

(cid:190) Định nghĩa các chỉ số liên quan theo quy định của bộ y tế: Bộ y tế

quy định các chỉ số (được đánh tổng hợp hằng năm) để đánh giá tình hình hoạt

động, làm cơ sở so sánh hiệu quả hoạt động của các địa phương. Từ đó đề ra những

Trang 21 / 137

giải pháp tích cực cho từng địa phương, đơn vị.

Luận văn tốt nghiệp

0112049 - 0112322

Ví dụ: Bộ y tế có một vài quy định về các chỉ số như sau:

- Tỷ lệ trẻ em tiêm văc xin phòng bệnh viêm não Nhật bản B:

Tỷ lệ TE tiêm phòng viêm não Nhật bản B = Tổng số trẻ em từ 1 - 5 tuổi

tiêm đủ 3 mũi vắc xin phòng viêm não Nhật Bản B của 1 khu vực / Tổng số trẻ em

từ 1-5 tuổi của khu vực đó.

(cid:190) Xây dựng công cụ kết xuất báo cáo theo các mẫu báo cáo ngoài thực

tế dựa trên hệ thống dữ liệu trong DHIS v1.3.

Hằng tháng hoặc hằng quý các đơn vị y tế phải tổng hợp số liệu và lập báo

cáo gửi về cho cấp trên. Các cấp trên tổng hợp báo cáo từ cấp dưới và lập báo cáo

cho đơn vị. Nếu chỉ sử dụng hệ thống DHIS có sẵn thì chỉ hỗ trợ công tác lưu trữ dữ

liệu, tổng hợp dữ liệu chứ không cho phép chức năng kết xuất báo cáo. Yều cầu đặt

ra là phải xây dựng công cụ kết xuất báo cáo từ dữ liệu đã nhập đó. Công cụ được

xây dựng bằng ngôn ngữ VB, cho phép xuất các báo cáo theo mẫu. Từ yêu cầu thực

tế đó, chúng em tiến hành phân tích cơ sở dữ liệu của hệ thống DHIS, xây dựng một

chương trình bằng ngôn ngữ Visual Basic hỗ trợ kết xuất báo cáo từ dữ liệu đã lưu

trữ. Chúng em thiết kế các mẫu báo cáo bằng Datareport, xây dựng các chức năng

hỗ trợ phù hợp với từng nội dung báo cáo cụ thể.

Trang 22 / 137

Ví dụ mẫu báo cáo:

Luận văn tốt nghiệp

0112049 - 0112322

Trang 23 / 137

Hình 2.5: Mẫu báo cáo cho chương trình trẻ em

Luận văn tốt nghiệp

0112049 - 0112322

Giao diện chương trình:

Hình 2.6: Chương trình kết xuất báo cáo

Chương trình báo cáo cho phép kết xuất báo cáo theo thời gian (theo tháng

hoặc theo quý) và báo cáo cho tất cả các đơn vị của các các cấp. Dữ liệu nhập vào

chỉ là cấp thấp nhất, dữ liệu các cấp cao hơn sẽ tự động tổng hợp.

Cơ sở dữ liệu của chương trình là tập tin dữ liệu thông minh (data mart) mà

người dùng đã nhập và xuất từ hệ thống DHIS. Người sử dụng chỉ cần xác định

đúng tập tin chứa dữ liệu và chọn đơn vị, thời gian và loại báo cáo thì có thể kết

xuất được báo cáo như báo cáo ngoài thực tế.

(cid:153) Bước 2: Công tác triển khai và hướng dẫn sử dụng

Ban đầu, chúng em hỗ trợ khi hệ thống chỉ được áp dụng thí điểm cho 2 quận

trong thành phố: Quận 4 và quận Tân Bình. Sau đó, đánh giá được hiệu quả khi sử

dụng hệ thống, Sở y tế Thành phố Hồ Chí Minh quyết định mở rộng quy mô áp

dụng hơn nữa ở các đơn vị y tế khác.

Để thực hiện công tác triển khai có hiệu quả, nhóm thực tập chúng em được

phân công chuẩn bị các nội dung liên quan: lên kế hoạch triển khai hệ thống DHIS

cho các đơn vị y tế và chuẩn bị nội dung triển khai, các tài liệu, công cụ liên quan

Trang 24 / 137

cho công tác hướng dẫn.

Luận văn tốt nghiệp

0112049 - 0112322

Công tác triển khai đã được tiến hành với sự hỗ trợ của Trung tâm chăm sóc

sức khoẻ bà mẹ trẻ em. Đã tổ chức 2 đợt tập huấn và hiện đã triển khai và ứng dụng

cho 6 quận huyện và 2 bệnh viện trong thành phố.

Công tác hỗ trợ sau triển khai cũng được chú trọng, chúng tôi- những sinh

viên thực tập đã tham gia vào dự án cũng đã phụ trách và giúp đỡ các đơn vị trong

thời gian đầu làm quen với hệ thống.

Hiện tại, hệ thống đã được ứng dụng hiệu quả tại 6 quận huyện, 2 bệnh viện.

Với DHIS 1.3, công việc quản lí được chặt chẽ hơn, hệ thống hơn. Điều này khẳng

định được tác dụng tích cực của hệ thống DHIS tại thành phố Hồ Chí Minh và hứa

hẹn cho một hệ thống mới hơn, hiệu quả hơn, được sử dụng rộng rãi hơn chứ không

chỉ tại Thành phố Hồ Chí Minh và Thành phố Huế. Đó chính là hệ thống DHIS 2.0.

3.2 Tìm hiểu các công nghệ và phát triển ứng dụng Report portal

Tìm hiểu các công nghệ mã nguồn mở: Spring framework, Hibernate, Webwork,

Velocity.

Trang 25 / 137

Phân tích, thiết kế và xây dựng ứng dụng report portal.

Luận văn tốt nghiệp

0112049 - 0112322

CHƯƠNG 3: PHÁT TRIỂN REPORT PORTAL

1. Giới thiệu tổng quan và phân tích yêu cầu

1.1. Giới thiệu

Cổng phân tích báo cáo trực tuyến được xây dựng là một ứng dụng web cung

cấp chức năng chia sẻ các báo cáo y tế giữa các cấp từ các trạm y tế phường xã, đến

trung tâm y tế quận, sở y tế tỉnh thành phố và bộ y tế. Mô đun này là thành phần của

dự án HISP xây dựng hệ thống DHIS 2.0 phục vụ trong ngành y tế. Với ứng dụng

này, việc lập báo cáo gửi báo cáo từ cấp dưới lên cấp trên, tổng hợp báo cáo sẽ đơn

giản hơn và nhanh hơn thay vì phải tính toán thủ công và gửi qua đường bưu điện

hoặc gửi trực tiếp. Thêm vào đó, kết hợp với mô đun report designer và mô đun

report generator cho phép người dùng tự thiết kế các báo cáo phù hợp với yêu cầu

thực tế (vốn rất hay thay đổi) về các chỉ số tính toán, số liệu của các chương trình

sức khoẻ…, kết xuất các báo cáo, chia sẻ thông tin phục vụ hiệu quả cho việc ra

quyết định và phát triển của ngành y tế.

Môi trường phát triển:

(cid:153) Xử lí và lưu trữ dữ liệu

Java

Spring framework.

Hibernate 3.0

Hệ quản trị cơ sở dữ liệu MySQL 4.2 ( hoặc HSQL)

(cid:153) Giao diện và thiết kế trang web:

HTML

Webwork

Trang 26 / 137

Velocity template.

Luận văn tốt nghiệp

0112049 - 0112322

i18n

DHIS Core

Report portal

Report generator

Report designer

Vị trí của mô đun Report portal trong kiến trúc của hệ thống DHIS 2.0:

Report portal được xây dựng trong sự liên kết với ba mô đun là DHIS Core,

i18n, và Report Generator. Trong đó, DHIS Core là mô đun định nghĩa các đối

tượng có liên quan trực tiếp đến báo cáo ( chẳng hạn như Period, PeriodType,

DataElement,…). Vai trò của DHIS Core là rất quan trọng, được xem như là phần

lõi của hệ thống. Mô đun Report generator cung cấp khả năng kết xuất ra các tập tin

báo cáo, mô đun i18n hỗ trợ tính năng đa ngôn ngữ cho Report portal. Tóm lại,

Report portal là mô đun cung cấp khả năng giao tiếp và nhận yêu cầu trực tiếp từ

người dùng, tương tác với các mô đun khác, đáp ứng yêu cầu của người dùng. Hiện

tại, cơ sở dữ liệu phục vụ cho việc xây dựng báo cáo (do DHIS Core quản lí) được

tách rời so với cơ sở dữ liệu mà Report portal xây dựng để quản lí người dùng và

các thông tin liên quan đến các báo cáo được tải lên, chỉ có một số các thông tin là

được liên kết từ DHIS Core sang, bao gồm: Period, PeriodType và

OrganizationUnit.

Mối quan hệ giữa ba mô đun trong Report mô đun:

Report designer (RD), report generator (RG) và report portal (RP) là ba mô

Trang 27 / 137

đun nằm trong phần report mô đun và có sự liên hệ chặt chẽ với nhau. Chức năng

Luận văn tốt nghiệp

0112049 - 0112322

chính của RD là cho phép người dùng thiết kế các mẫu báo cáo theo nhu cầu bằng

công cụ thiết kế báo cáo JasperReport. RD hỗ trợ việc xây dựng các báo cáo động

với tất cả các phần tử dữ liệu, cách sắp xếp bố trí linh hoạt tuỳ theo nhu cầu của

người sử dụng. Tập tin mẫu báo cáo sau khi thiết kế có định dạng là *.jrxml. Tập tin

này sau đó sẽ được RG phát sinh ra tập tin báo cáo hoàn chỉnh với đầy đủ số liệu

một cách chính xác dựa trên thông tin trong cơ sở dữ liệu. RG hỗ trợ kết xuất ra

nhiều định dạng khác nhau bao gồm: pdf, html…. Tập tin báo cáo này sau đó được

gởi đến các đơn vị y tế có liên quan hoặc được chia sẻ thông tin thông qua ứng dụng

RP. RP thực chất là một cổng thông tin cho phép người dùng tải lên và tải xuống

các báo cáo, chia sẻ báo cáo, tra cứu báo cáo, chia sẻ các mẫu báo cáo đã thiết kế

được từ RD. Có thể mô hình hoá mối quan hệ giữa ba mô đun này bằng sơ đồ sau:

Hình 3.1: Mối quan hệ giữa ba mô đun RP, RG và RD

1.2. Yêu cầu chức năng

1.2.1. Các yêu cầu nghiệp vụ.

Tải lên và tải xuống báo cáo hoặc các mẫu báo cáo

Tra cứu báo cáo theo loại báo cáo, theo thời gian, theo các đơn vị y tế chịu

trách nhiệm hoặc có liên quan đến báo cáo

Tương tác với report generator hỗ trợ kết xuất báo cáo từ các mẫu báo cáo.

Hỗ trợ đa ngôn ngữ với hai ngôn ngữ cơ bản là tiếng Việt và tiếng Anh.

Trang 28 / 137

1.2.2. Các yêu cầu hệ thống.

Luận văn tốt nghiệp

0112049 - 0112322

Phân quyền sử dụng linh hoạt và có thể thay đổi quyền hạn tuỳ theo tính chất

hoạt động tại từng đơn vị y tế.

1.2.3. Các yêu cầu khác.

Giao diện thân thiện.

Các bước thực hiện tương tự và gần giống với các thao tác trong hệ thống cũ

(DHIS 1.3 và DHIS 1.4)

1.3 Nội dung yêu cầu về công nghệ

Kiến trúc của mô đun Report portal được trình bày trong hình vẽ sau:

Hình 3.2: Mối liên kết giữa Report portal và các mô đun khác

Mô đun report portal được thiết kế theo mô hình 3 lớp: giao diện, nghiệp vụ và

cơ sở dữ liệu. Trong hình vẽ trên, vai trò của các công nghệ cũng như vị trí ứng

Trang 29 / 137

dụng của chúng đã được thể hiện rất rõ nét. Trên tầng giao diện, các trang web được

Luận văn tốt nghiệp

0112049 - 0112322

thiết kế bằng HTML, và Velocity. Webwork framework được sử dụng để kết nối

giữa tầng giao diện và tầng xử lí. Nội dung các xử lí được viết bằng Java, Spring

framework được sử dụng ở đây để quản lí các thành phần, các phụ thuộc của đối

tượng, liên kết với các module khác trong hệ thống DHIS 2.0 như là: DHIS Core,

DHIS Report generator, i18n. Các đối tượng trong tầng xử lí sau đó sẽ được

Hibernate ánh xạ sang cơ sở dữ liệu quan hệ. Vai trò của Hibernate là ánh xạ các

đối tượng trong lớp xử lí sang cơ sở dữ liệu cũng như đọc thông tin trong cơ sở dữ

liệu và trả về đối tượng cho tầng xử lí. Hệ quản trị cơ sở dữ liệu được sử dụng là

HSQL. Ở đây có một ưu điểm quan trọng của Hibernate là khả năng “không phụ

thuộc cơ sở dữ liệu” của nó. Trong quá trình phát triển, Report portal sử dụng hệ

quản trị cơ sở dữ liệu HSQL. Nhưng sau khi toàn bộ hệ thống được hoàn chỉnh, có

thể sẽ chuyển sang một hệ quản trị cơ sở dữ liệu mã nguồn mở nào đó, có thể là

MySQL hay PostgreSQL.

1.4. Phân tích các yêu cầu chức năng.

Hệ thống phải hỗ trợ upload nhiều định dạng tập tin báo cáo khác nhau, hiện

tại là pdf và html. Thông tin về mỗi báo cáo gởi đi được lưu lại trong cơ sở dữ liệu

và phải thể hiện đầy đủ: báo cáo đó được gởi bởi đơn vị y tế nào, ngày gởi, loại báo

cáo, báo cáo đó ứng với giai đoạn nào. Các tập tin báo cáo thực sự được lưu tại một

vị trí có thể được cấu hình trước trên máy chủ.

Tương tác với report generator, cho phép người dùng kết xuất báo cáo dựa

theo thông tin về đơn vị y tế, thời gian và mẫu báo cáo đã được thiết kế trước đó.

Báo cáo sau khi được kết xuất có thể được xem trực tiếp trên trình duyệt và lưu vào

trong cơ sở dữ liệu

Tra cứu báo cáo: tìm kiếm báo cáo kèm theo các điều kiện tìm kiếm như thời

gian gửi báo cáo, đơn vị y tế, loại báo cáo. Phân trang các kết quả tìm được.

Phân quyền sử dụng: tính năng này phải đảm bảo thật sự mềm dẻo cho phép

thay đổi chức năng của các nhóm người dùng khác nhau nhằm đáp ứng một cách

linh hoạt sự khác nhau về cơ cấu, chức năng hoạt động của từng đơn vị y tế. Một

đặc tính của web là “click chuột và chờ” do đó cần phải hạn chế khả năng người

Trang 30 / 137

dùng thực hiện các chức năng mà họ không được phép bằng cách vô hiệu hoá chức

Luận văn tốt nghiệp

0112049 - 0112322

năng này thay vì để người dùng click chuột, chờ và thấy thông báo lỗi về quyền

hạn. Ngoài ra, cho phép quản lí thông tin tài khoản của người dùng bao gồm tài

khoản đã được kích hoạt sử dụng và các tài khoản chỉ mới được đăng kí nhưng chưa

được kích hoạt sử dụng bởi người quản lí từng đơn vị y tế.

Cho phép người dùng lựa chọn ngôn ngữ hiển thị trên trang. Trong đó tiếng

Việt và tiếng Anh là hai ngôn ngữ cơ bản.

1.5 Sơ đồ Use case

1.5.1. Tác nhân của hệ thống

(cid:153) Tên tác nhân: Normal user

(cid:153) Mô tả:

Đây là người dùng thông thường, có thể là các nhân viên tại các đơn vị y

tế.

(cid:153) Hành vi và khả năng:

Người dùng này có thể thực hiện các khả năng cơ bản như gởi báo cáo,

download báo cáo, xem và tìm kiếm báo cáo.

(cid:153) Mối quan hệ:

Không có.

(cid:153) Lược đồ:

Không có.

(cid:153) Tên tác nhân: Doctor

(cid:153) Mô tả:

Đây là người dùng thông dụng nhất của hệ thống.

(cid:153) Hành vi và khả năng:

Tác nhân này ngoài các khả năng như normal user còn có thể thực hiện các

chức năng quản lí người dùng và lập báo cáo.

(cid:153) Mối quan hệ:

Kế thừa từ tác nhân normal user.

Trang 31 / 137

(cid:153) Lược đồ:

Luận văn tốt nghiệp

0112049 - 0112322

Không có.

(cid:153) Tên tác nhân: Administrator

(cid:153) Mô tả:

Quản trị hệ thống

Đây là người dùng có quyền hạn cao nhất, ngoài các khả năng như doctor,

người dùng này có thể phân quyền truy xuất cho các nhóm người dùng khác.

(cid:153) Hành vi và khả năng:

(cid:153) Mối quan hệ:

Kế thừa từ doctor.

(cid:153) Lược đồ:

Không có.

(cid:153) Tên tác nhân: DHIS 2.0

(cid:153) Mô tả:

Đây là khái niệm chỉ các module khác trong toàn bộ hệ thống 2.0

(cid:153) Hành vi và khả năng:

Tác nhân này thể hiện sự tương tác giữa các module khác với report

portal. Bao gồm: DHIS-core, DHIS-i18n, DHIS-reportgenerator, etc.

(cid:153) Mối quan hệ:

Không có.

(cid:153) Lược đồ:

Trang 32 / 137

Không có.

Luận văn tốt nghiệp

0112049 - 0112322

Search for Reports

(from Use Case View)

Manage users

Users

(from Use Case View)

View report details

(from Use Case View)

(from Use Case View)

Upload and Download reports

(from Use Case View)

Administrators

Doctors

(from Use Case View)

(from Use Case View)

Manage reports

(from Use Case View)

Generate reports

Login

Authorize user access

Change password

(from Use Case View)

(from Use Case View)

(from Use Case View)

(from Use Case View)

DHIS 2.0

(from Use Case View)

1.5.2. Lược đồ Use case cấp cao.

Hình 2.4: Lược đồ Use cases cấp cao.

Mô tả lược đố Use cases mức cao

• Search for reports: hệ thống phải có khả năng hỗ trợ tìm kiếm báo cáo

theo nhiều điều kiện khác nhau, bao gồm: loại báo cáo, thời gian, đơn vị

y tế gởi báo cáo…

• Change password: khả năng này cung cấp cho người dùng thay đổi

mật khẩu của mình và đăng kí sử dụng hệ thống.

• Manage report: quản lí các report, xoá các báo cáo được gởi hay phục

hồi các báo cáo bị xoá.

• Login: kiểm tra đăng nhập và xác định quyền hạn của người dùng.

• Manage user: The administrator of this system can add more user to use

this system, delete user, or modify user information.

Trang 33 / 137

Luận văn tốt nghiệp

0112049 - 0112322

• Authorize user access: Phân quyền sử dụng cho các nhóm người

dùng.

• Upload and download report file: gởi báo cáo và tải báo cáo về

máy cá nhân.

Trang 34 / 137

• Generating reports: kết xuất báo cáo từ các mẫu báo cáo định sẵn.

Luận văn tốt nghiệp

0112049 - 0112322

1.5.3. Mô tả chi tiết từng Use case.

1.5.3.1 Manage Users

THÊM NGƯỜI DÙNG

Mã: PRD ID: RP001

Tên: Thêm người dùng

Cho phép tác nhân thêm người dùng. Mô tả:

Kết quả: Một tài khoản mới được tạo nếu thực hiện thành công.

Tác nhân phải đăng nhập vào hệ thống và có quyền thêm Điều kiện tiên

người dùng quyết:

(cid:131) Tác nhân nhập đầy đủ thông tin về tên tài khoản, mật Sự kiện chính:

khẩu, tên đầy đủ, đơn vị y tế trực thuộc, chức vụ,

nhóm người dùng và nhấn nút tạo người dùng.

(cid:131) Hệ thống kiểm tra thông tin nhập vào, so sánh mật

khẩu và lưu thông tin về người dùng mới vào trong

cơ sở dữ liệu.

(cid:131) Tác nhân nhập thiếu các thông tin bắt buộc. Hệ thống Sự kiện rẽ nhánh

kiểm tra và thông báo lỗi cụ thể các thông tin nào bị

thiếu.

(cid:131) Mật khẩu không chính xác.

(cid:131) Tên tài khoản đã tồn tại trong hệ thống

(cid:131) Lỗi phát sinh trong vấn đề kết nối đến server.

Các thông báo lỗi sẽ xuất hiện khi: Điều kiện lỗi:

- Thông tin nhập vào sai hoặc thiếu.

- Lỗi kết nối.

Tác nhân có quyền tạo tài khoản mới. Tác nhân

Bảng 3.1: Thao tác thêm người dùng.

ĐĂNG KÍ NGƯỜI DÙNG

Trang 35 / 137

Mã: PRD ID: RP002

Luận văn tốt nghiệp

0112049 - 0112322

Tên: Đăng kí người dùng

Chức năng này ghi nhận thông tin đăng kí người dùng Mô tả:

Kết quả: Thông tin đăng kí được lưu vào cơ sở dữ liệu.

Bất kì người dùng nào truy cập đến hệ thống đều có thể Điều kiện tiên

gửi thông tin này. Tuy nhiên tài khoản sẽ không được quyết:

tạo cho đến khi được kích hoạt bởi người quản trị.

(cid:131) Tác nhân nhập thông tin về tên tài khoản, mật khẩu, Sự kiện chính:

tên đầy đủ, chức vụ và đơn vị y tế trực thuộc.

(cid:131) Hệ thống kiểm tra thông tin và ghi nhận vào cơ sở

dữ liệu.

(cid:131) Tác nhân nhập thiếu các thông tin bắt buộc. Hệ Sự kiện rẽ nhánh

thống kiểm tra và thông báo lỗi cụ thể các thông tin

nào bị thiếu.

(cid:131) Mật khẩu không chính xác.

(cid:131) Tên tài khoản đã tồn tại trong hệ thống

(cid:131) Lỗi phát sinh trong vấn đề kết nối đến server.

Các thông báo lỗi sẽ xuất hiện khi: Điều kiện lỗi:

- Thông tin nhập vào sai hoặc thiếu.

- Lỗi kết nối.

Đây là chức năng mở cho tất cả người dùng. Tác nhân

Trang 36 / 137

Bảng 3.2 Thao tác Đăng kí người dùng.

Luận văn tốt nghiệp

0112049 - 0112322

KÍCH HOẠT NGƯỜI DÙNG

Mã: PRD ID: RP003

Tên: Kích hoạt các tài khoản đã đăng kí từ người dùng

Cho phép tác nhân kích hoạt các tài khoản đã đăng kí. Mô tả:

Kết quả: Một tài khoản mới được tạo.

Tác nhân phải đăng nhập vào hệ thống và có quyền kích Điều kiện tiên

hoạt tài khoản người dùng quyết:

(cid:131) Tác nhân lựa chọn chức năng Kích hoạt tài khoản. Sự kiện chính:

Hệ thống sẽ hiển thị danh sách các người dùng tại

đơn vị y tế của tác nhân. Danh sách bao gồm: các

tài khoản đang sử dụng và các tài khoản chỉ mới

đăng kí.

(cid:131) Các tài khoản chỉ mới đăng kí sẽ được cung cấp

chức năng kích hoạt.

(cid:131) Hệ thống thực hiện cập nhật thông tin về trạng thái

của tài khoản vào cơ sở dữ liệu.

(cid:131) Lỗi kết nối đến server Sự kiện rẽ nhánh

Thông báo lỗi sẽ phát sinh nếu có lỗi kết nối đến server. Điều kiện lỗi:

Bất kì tác nhân nào có quyền kích hoạt tài khoản người Tác nhân

dùng

Bảng 3.3 Thao tác Kích hoạt người dùng

1.5.3.2. Authorize user access.

TẠO NHÓM NGƯỜI DÙNG

Mã: PRD ID: RP004

Tên: Tạo mới nhóm người dùng

Trang 37 / 137

Cho phép tác nhân thêm người dùng Mô tả:

Luận văn tốt nghiệp

0112049 - 0112322

Kết quả:

Tác nhân phải đăng nhập vào hệ thống và có quyền tạo Điều kiện tiên

nhóm người dùng. quyết:

(cid:131) Tác nhân nhập tên nhóm người dùng, thông tin mô Sự kiện chính:

tả nhóm người dùng.

(cid:131) Hệ thống kiểm tra tên nhóm người dùng và lưu lại

thông tin về nhóm người dùng vào trong cơ sở dữ

liệu.

(cid:131) Tên nhóm người dùng bị bỏ trống Sự kiện rẽ nhánh

(cid:131) Lỗi kết nối đến server

Thông báo lỗi sẽ được phát sinh trong trường hợp: Điều kiện lỗi:

- Tên nhóm người dùng bị bỏ trống.

- Lỗi kết nối đến server.

Bất kì tác nhân nào có quyền thêm nhóm người dùng. Tác nhân

Bảng 3.4 Thao tác Thêm nhóm người dùng

XOÁ NHÓM NGƯỜI DÙNG

Mã: PRD ID: RP005

Tên: Xoá nhóm người dùng

Cho phép tác nhân xoá nhóm người dùng không có tài Mô tả:

khoản.

Kết quả: Huỷ nhóm người dùng ra khỏi dữ liệu.

Tác nhân phải đăng nhập vào hệ thống và có quyền xoá Điều kiện tiên

nhóm người dùng. quyết:

(cid:131) Tác nhân chọn tên nhóm người dùng muốn xoá và Sự kiện chính:

nhấn chức năng xóa.

(cid:131) Hệ thống kiểm tra xem nhóm người dùng này có

Trang 38 / 137

chứa tài khoản người dùng nào hay không. Nếu

Luận văn tốt nghiệp

0112049 - 0112322

không, xoá nhóm người dùng này khỏi cơ sở dữ

liệu.

(cid:131) Nhóm người dùng này có chứa tài khoản người Sự kiện rẽ nhánh

dùng.

(cid:131) Lỗi kết nối đến server.

Thông báo lỗi sẽ được hiển thị trong các trường hợp: Điều kiện lỗi:

(cid:131) Lỗi kết nối đến server.

(cid:131) Nhóm người dùng cần xoá vẫn còn chứa các tài

khoản người dùng.

Bất kì tác nhân nào có quyền xoá nhóm người dùng. Tác nhân

Bảng 3.5 Thao tác Xoá nhóm người dùng

PHÂN QUYỀN SỬ DỤNG CHO NHÓM NGƯỜI DÙNG

Mã: PRD ID: RP006

Tên: Phân quyền sử dụng cho nhóm người dùng.

Cho phép thay đổi quyền hạn và khả năng tương tác hệ Mô tả:

thống của các nhóm người dùng.

Kết quả: Thay đổi quyền hạn của một hoặc nhiều nhóm người

dùng. Trừ nhóm administrator.

The actor must log into the system first as an Điều kiện tiên

administrator. quyết:

(cid:131) Tác nhân lựa chọn nhóm người dùng. Hệ thống sẽ Sự kiện chính:

hiển thị danh sách các quyền của nhóm đó và các

quyền hạn không thuộc nhóm đó.

(cid:131) Tác nhân hiệu chỉnh quyền hạn của nhóm người

dùng và phát sinh yêu cầu cập nhật.

(cid:131) Hệ thống kiểm tra quyền hạn mới và thực hiện cập

nhật vào cơ sở dữ liệu.

Trang 39 / 137

(cid:131) Không có quyền hạn nào được xác định cho nhóm Sự kiện rẽ nhánh

Luận văn tốt nghiệp

0112049 - 0112322

người dùng.

(cid:131) Lỗi kết nối đến server.

Thông báo lỗi sẽ phát sinh khi: Điều kiện lỗi:

(cid:131) Lỗi kết nối đến server.

(cid:131) Không có quyền hạn nào được xác định cho nhóm

người dùng.

Administrator Tác nhân

Bảng 3.6 Thao tác Phân quyền nhóm người dùng

1.5.3.3. Manage Reports

DOWNLOAD BÁO CÁO

Mã: PRD ID: RP007

Tên: Download các báo cáo.

Cho phép tác nhân tải các báo cáo từ máy chủ. Mô tả:

Kết quả: Tải file từ server về máy khách.

Tác nhân phải đăng nhập vào hệ thống và có quyền tải Điều kiện tiên

báo cáo về. quyết:

(cid:131) Tác nhân lựa chọn chức năng tải báo cáo. Hệ thống Sự kiện chính:

hiển thị danh sách các báo cáo liên quan đến đơn vị

y tế nơi tác nhân làm việc và cho phép download

các báo cáo.

(cid:131) Không kết nối được với server. Sự kiện rẽ nhánh

Thông báo lỗi sẽ xuất hiện trong trường hợp: không kết Điều kiện lỗi:

nối được với server.

Bất kì tác nhân nào có quyền tải báo cáo. Tác nhân

Trang 40 / 137

Bảng 3.7 Thao tác Download báo cáo

Luận văn tốt nghiệp

0112049 - 0112322

GỞI BÁO CÁO

Mã: PRD ID: RP008

Tên: Gởi báo cáo.

Cho phép tác nhân gởi báo cáo lên mạng, nhằm chia sẻ Mô tả:

báo cáo.

Kết quả: Thông tin báo cáo và tập tin báo cáo được lưu lại trên

server.

Tác nhân phải đăng nhập vào hệ thống và có quyền gởi Điều kiện tiên

báo cáo. quyết:

(cid:131) Tác nhân xác định loại báo cáo, giai đoạn lập báo Sự kiện chính:

cáo, tập tin báo cáo và yêu cầu gởi báo cáo

(cid:131) Hệ thống đọc tập tin báo cáo từ máy khách, lưu lên

server và lưu toàn bộ các thông tin liên quan đến

báo cáo vào cơ sở dữ liệu. Đơn vị y tế được lấy là

đơn vị y tế của tác nhân gởi báo cáo.

(cid:131) Thông tin về loại báo cáo và giai đoạn lập báo cáo Sự kiện rẽ nhánh

không được xác định.

(cid:131) Tập tin báo cáo không được tìm thấy hoặc không

thể đọc được.

(cid:131) Không kết nối được với server.

Thông báo lỗi sẽ phát sinh nếu: Điều kiện lỗi:

(cid:131) Thông tin liên quan không đầy đủ.

(cid:131) Tập tin báo cáo không được tìm thấy.

(cid:131) Không thể kết nối được với server.

Bất kì tác nhân nào có quyền gởi báo cáo. Tác nhân

Trang 41 / 137

Bảng 3.8: Thao tác Upload báo cáo

Luận văn tốt nghiệp

0112049 - 0112322

ĐÁNH DẤU XOÁ CÁC BÁO CÁO

Mã: PRD ID: RP010

Tên: Đánh dấu xoá các báo cáo.

Cho phép tác nhân đánh dấu xoá các báo cáo không còn Mô tả:

sử dụng.

Kết quả: Trạng thái xoá của báo cáo được thiết lập.

Tác nhân phải đăng nhập vào hệ thống và có quyền xoá Điều kiện tiên

báo cáo. quyết:

(cid:131) Tác nhân chọn chức năng xoá trên danh sách hiển Sự kiện chính:

thị các báo cáo của đơn vị y tế nơi mình làm việc.

(cid:131) Hệ thống kiểm tra thông tin về báo cáo và cập nhật

trạng thái xoá cho báo cáo. Sau khi trạng thái xoá

được cập nhật, thông tin liên quan đến báo cáo vẫn

được lưu trong cơ sở dữ liệu nhưng không được

hiển thị trong các chức năng liên quan đến báo cáo

nữa.

(cid:131) Không kết nối đến cơ sở dữ liệu được. Sự kiện rẽ nhánh

(cid:131) Không thể xoá báo cáo đang được sử dụng bởi tác

nhân khác.

Thông báo lỗi sẽ phát sinh trong trường hợp: Điều kiện lỗi:

(cid:131) Không kết nối đến cơ sở dữ liệu.

(cid:131) Xoá đối tượng báo cáo đang được sử dụng bởi tác

nhân khác.

Bất kì tác nhân nào có quyền xóa báo cáo. Tác nhân

Bảng 3.9: Thao tác Đánh dấu xoá báo cáo

PHỤC HỒI CÁC BÁO CÁO ĐÃ XOÁ

Trang 42 / 137

Mã: PRD ID: RP011

Luận văn tốt nghiệp

0112049 - 0112322

Tên: Phục hồi các báo cáo bị xoá.

Cho phép tác nhân phục hồi các báo cáo đã xoá. Mô tả:

Kết quả: Trạng thái xoá của báo cáo được hiệu chỉnh.

Tác nhân phải đăng nhập vào hệ thống và có quyền phục Điều kiện tiên

hồi các báo cáo bị xoá. quyết:

(cid:131) Tác nhân chọn chức năng phục hồi báo cáo trên Sự kiện chính:

danh sách hiển thị các báo cáo trong chức năng

phục hồi báo cáo của hệ thống.

(cid:131) Hệ thống kiểm tra thông tin về báo cáo và cập nhật

trạng thái xoá cho báo cáo. Sau khi trạng thái xoá

được cập nhật, các tác nhân khác mới có thể thực

hiện các chức năng liên quan đến báo cáo đối với

báo cáo này.

(cid:131) Không kết nối đến cơ sở dữ liệu được. Sự kiện rẽ nhánh

Thông báo lỗi sẽ phát sinh trong trường hợp: Điều kiện lỗi:

(cid:131) Không kết nối đến cơ sở dữ liệu.

Bất kì tác nhân nào có quyền xóa báo cáo. Tác nhân

Bảng 3.10: Thao tác Phục hồi báo cáo đã xoá.

XOÁ HOÀN TOÀN BÁO CÁO

Mã: PRD ID: RP012

Tên: Xoá hoàn toàn báo cáo

Xoá toàn bộ thông tin liên quan đến báo cáo và xoá tập Mô tả:

tin báo cáo ra khỏi bộ nhớ.

Kết quả: Báo cáo được xoá khỏi cơ sở dữ liệu, tập tin báo cáo bị

huỷ.

Trang 43 / 137

Điều kiện tiên Tác nhân phải đăng nhập vào hệ thống và có quyền xoá

Luận văn tốt nghiệp

0112049 - 0112322

hoàn toàn báo cáo. quyết:

(cid:131) Tác nhân chọn chức năng xoá báo cáo trên danh Sự kiện chính:

sách hiển thị các báo cáo trong chức năng phục hồi

báo cáo của hệ thống.

(cid:131) Hệ thống xoá thông tin về báo cáo trong cơ sở dữ

liệu, huỷ tập tin báo cáo lưu trong ổ cứng.

(cid:131) Không kết nối đến cơ sở dữ liệu được. Sự kiện rẽ nhánh

(cid:131) Không thể xoá báo cáo đang được sử dụng bởi tác

nhân khác.

Thông báo lỗi sẽ phát sinh trong trường hợp: Điều kiện lỗi:

(cid:131) Không kết nối đến cơ sở dữ liệu.

(cid:131) Xoá đối tượng báo cáo đang được sử dụng bởi tác

nhân khác.

Bất kì tác nhân nào có quyền xóa báo cáo. Tác nhân

Bảng 3.11: Thao tác Xoá báo cáo

1.5.3.4. Login

Mã: PRD ID: RP013

Tên: Đăng nhập

Kiểm tra người dùng. Mô tả:

Kết quả: Nhóm người dùng và các quyền hạn của người dùng

được xác nhận.

Điều kiện tiên

quyết:

(cid:131) Tác nhân cung cấp tên tài khoản và mật khẩu của Sự kiện chính:

mình

(cid:131) Hệ thống xác thực người dùng và trả về trang chủ

của hệ thống.

Trang 44 / 137

Tên người dùng hoặc mật khẩu không hợp lệ Sự kiện rẽ nhánh

Luận văn tốt nghiệp

0112049 - 0112322

Thông báo lỗi sẽ phát sinh nếu: Điều kiện lỗi:

(cid:131) Tên đăng nhập hoặc mật khẩu bị bỏ trống.

(cid:131) Tài khoản không hợp lệ.

(cid:131) Lỗi kết nối đến server.

Tất cả tác nhân. Tác nhân

Bảng 3.12: Thao tác Đăng nhập

1.5.3.5. Change password

Mã: PRD ID: RP014

Tên: Thay đổi mật khẩu

Cho phép người dùng thay đổi mật khẩu hiện tại Mô tả:

Kết quả: Mật khẩu mới được thiết lập.

Tác nhân phải đăng nhập vào hệ thống và có quyền thay Điều kiện tiên

đổi mật khẩu của mình. quyết:

(cid:131) Tác nhân nhập mật khẩu cũ, và nhập hai lần mật Sự kiện chính:

khẩu mới

(cid:131) Hệ thống kiểm tra thông tin về người dùng, so sánh

mật khẩu mới và cập nhật mật khẩu mới cho người

dùng.

(cid:131) Mật khẩu mới không khớp giữa hai lần nhập. Sự kiện rẽ nhánh

(cid:131) Mật khẩu hiện tại không hợp lệ.

(cid:131) Lỗi kết nối đến server.

Bất kì tác nhân nào có quyền thay đổi mật khẩu Tác nhân

Trang 45 / 137

Bảng 3.13: Thao tácThay đổi mật khẩu

Luận văn tốt nghiệp

0112049 - 0112322

1.5.3.6. Search for reports

Mã: PRD ID: RP015

Tên: Tìm kiếm báo cáo

Cho phép người dùng tra cứu báo cáo. Mô tả:

Kết quả: Danh sách các báo cáo tìm được.

Tác nhân phải đăng nhập vào hệ thống và có quyền tra Điều kiện tiên

cứu báo cáo quyết:

(cid:131) Tác nhân xác định các điều kiện tìm kiếm bao gồm: Sự kiện chính:

đơn vị y tế, loại báo cáo hoặc giai đoạn lập báo cáo

và giới hạn thời gian gởi theo năm.

(cid:131) Hệ thống tra cứu báo cáo và phân trang kết quả tìm

được và hiển thị danh sách kết quả tìm được.

(cid:131) Điều kiện tìm kiếm không được xác nhận Sự kiện rẽ nhánh

(cid:131) Không tìm thấy dữ liệu nào.

(cid:131) Lỗi kết nối đến server.

Thông báo lỗi sẽ xuất hiện trong trường hợp sau: Điều kiện lỗi:

(cid:131) Không kết nối được với server.

Tác nhân Bất kì tác nhân nào có quyền tra cứu báo cáo.

Bảng 3.14: Thao tác Tìm kiếm báo cáo

1.6. Mô tả các bước xử lí theo từng yêu cầu

1.6.1. Đăng nhập và đăng kí người dùng:

Nội dung:

Kiểm tra người dùng, nhóm người dùng nhằm cung cấp chức năng sử dụng

hệ thống. Tiếp nhận đăng kí sử dụng hệ thống.

Các bước xử lí đăng nhập

- Nhận thông tin về tên tài khoản và mật khẩu.

- Kiểm tra xem người dùng này có tồn tại trong cơ sở dữ liệu hay không và

Trang 46 / 137

trạng thái của tài khoản này đã được kích hoạt hay chưa. Nếu điều kiện tìm đều

Luận văn tốt nghiệp

0112049 - 0112322

thoả, lưu đối tượng này vào session và trả về trang chủ của hệ thống. Ngược lại trả

về trang đăng nhập với thông báo lỗi.

Các bước xử lí nhận đăng kí sử dụng:

- Nhận thông tin về tên tài khoản, mật khẩu, tên đầy đủ của người đăng kí,

đơn vị y tế trực thuộc, chức vụ của người muốn sử dụng hệ thống.

- Kiểm tra mật khẩu giống nhau giữa hai lần nhập. Nếu không giống nhau

xuất thông báo bằng message box.

- Ngược lại nếu mọi thông tin đều đúng, lưu thông tin đăng kí này vào cơ sở

Trang 47 / 137

dữ liệu nhưng thiết lập trạng thái cho tài khoản này là chưa kích hoạt.

Luận văn tốt nghiệp

0112049 - 0112322

1.6.2. Yêu cầu upload các tập tin báo cáo hoặc các mẫu báo cáo:

Nội dung: đọc tập tin báo cáo hoặc mẫu báo cáo từ máy người dùng, lưu vào

một thư mục đã xác định trước đồng thời lưu lại các thông tin về báo cáo hoặc mẫu

báo cáo này vào trong cơ sở dữ liệu

Các bước xử lí:

- Nhận thông tin về loại báo cáo, loại giai đoạn và khoảng thời gian cụ thể về

báo cáo.

- Đọc tập tin theo đường dẫn mà người dùng xác định vào buffer.

- Lưu thông tin về báo cáo hoặc mẫu báo cáo vừa được gởi vào cơ sở dữ liệu

với tên tập tin được phát sinh tự động dựa trên ngày giờ gửi báo cáo, đơn vị y tế

được lấy là đơn vị y tế của người dùng đang gửi báo cáo.

- Đọc tham số chỉ vị trí lưu các tập tin báo cáo từ tập tin

configuration.properties và lưu tập tin báo cáo tại địa chỉ đó với tên giống như tên

đã được lưu vào trong cơ sở dữ liệu.

- Nếu thành công, trả về trang hiển thị danh sách các báo cáo đã upload của

đơn vị y tế đó. Ngược lại, trả về trang thông báo lỗi.

1.6.3. Yêu cầu tra cứu báo cáo.

Nội dung: tìm kiếm báo cáo theo các điều kiện tìm kiếm riêng biệt và tổ hợp

của nhiều điều kiện tìm kiếm bao gồm: đơn vị y tế, loại báo cáo, loại giai đoạn, và

lọc kết quả tìm kiếm được theo năm ứng với năm gởi báo cáo.

Các bước xử lí:

- Nhận thông tin về đơn vị y tế, kiểm tra xem có phải là tìm trên tất cả các

đơn vị y tế hay không?

- Xác định thông tin về loại báo cáo, và loại giai đoạn. Tương tự xác định

xem có phải tìm kiếm trên tất cả loại báo cáo và tất cả loại giai đoạn hay không?

- Nhận giá trị năm tìm kiếm.

- Tìm kiếm các báo cáo thoả điều kiện.

- Đọc thông tin qui định số dòng dữ liệu trả về trong một trang từ tập tin cấu

hình configuration.properties. Phân trang kết quả tìm được và hiển thị lên trang web

Trang 48 / 137

cùng với giá trị cho biết tổng số kết quả tìm được.

Luận văn tốt nghiệp

0112049 - 0112322

1.6.4. Yêu cầu phân quyền sử dụng hệ thống

Nội dung: xác định các chức năng có thể thực hiện của từng nhóm người

dùng.

Các bước xử lí:

- Đọc danh sách các nhóm người dùng có cấp lớn hơn cấp độ của nhóm

người dùng của người đang sử dụng hệ thống đưa vào combo box.

- Tuỳ theo nhóm người dùng được chọn trong combo box hiển thị danh sách

các chức năng mà nhóm người dùng đó có thể thực hiện và danh sách các chức

năng mà nhóm người dùng đó không được thực hiện.

- Cho phép người dùng di chuyển các chức năng qua lại giữa hai danh sách.

- Khi lệnh cập nhật được yêu cầu, xoá danh sách các chức năng của nhóm

người dùng được chọn trong cơ sở dữ liệu và lưu lại danh sách các chức năng mới

của nhóm người dùng đó vào trong cơ sở dữ liệu.

1.6.5. Yêu cầu kết xuất báo cáo từ các tập tin mẫu

Nội dung: kết xuất báo cáo dựa trên tập tin mẫu báo cáo đã được upload.

Các bước xử lí:

- Nhận thông tin về loại giai đoạn, giai đoạn lập báo cáo và tập tin mẫu báo

cáo từ người dùng.

- Đọc thông tin về người dùng đang sử dụng hệ thống trong session. Lấy đơn

vị y tế là đơn vị y tế của người dùng đang đăng nhập vào trong hệ thống.

- Tương tác với mô đun report generator kết xuất ra tập tin báo cáo và hiển

thị lên trình duyệt.

1.6.6. Yêu cầu quản lí người dùng

Nội dung: quản lí tài khoản, kích hoạt tài khoản đã đăng kí, thêm mới tài

khoản.

Các bước xử lí:

- Một danh sách các tài khoản đã kích hoạt và các tài khoản chỉ mới được

đăng kí tại đơn vị y tế của người đang sử dụng hệ thống được hiển thị và cung cấp

Trang 49 / 137

chức năng kích hoạt tại các tài khoản chỉ mới được đăng kí và xoá các tài khoản.

Luận văn tốt nghiệp

0112049 - 0112322

- Nhận mã tài khoản tương ứng trong các thao tác xoá hay kích hoạt tài

khoản. Xoá thông tin về tài khoản khỏi cơ sở dữ liệu hoặc cập nhật trạng thái của tài

khoản là đã kích hoạt tương ứng với hai thao tác xoá và kích hoạt tài khoản.

Các bước xử lí thêm mới tài khoản:

- Tương tự như quá trình tiếp nhận đăng kí như thông tin người dùng được

lưu vào trong cơ sở dữ liệu, thuộc tính trạng thái sẽ được gán là đã kích hoạt.

1.6.7. Yêu cầu xây dựng tính năng đa ngôn ngữ:

Nội dung: hỗ trợ đa ngôn ngữ trên giao diện cho phép ứng dụng nhằm mở

rộng phạm vị sử dụng của ứng dụng.

Các bước xử lí:

- Xây dựng tập tin ngôn ngữ (mỗi ngôn ngữ là một tập tin riêng).

- Tham chiếu đến tập tin ngôn ngữ khi có yêu cầu thay đổi ngôn ngữ thể

hiện.

- Sử dụng velocity và webwork để hiển thị đa ngôn ngữ trên giao diện.

1.6.8. Kiểm tra quyền hạn và cung cấp chức năng của hệ thống

Một chức năng của hệ thống thuộc về hai thành phần: thành phần thứ nhất là

nhóm người dùng – cho biết nhóm người dùng đó được thực hiện những quyền hạn

gì; thành phần thứ hai là nhóm quyền hạn – liên quan đến việc thể hiện chức năng

đó trên trang web. Nếu một user thuộc một nhóm người dùng này, không có quyền

thao tác trên tất cả các quyền của một nhóm quyền thì nhóm quyền này sẽ không

được cung cấp trên trang hoặc được vô hiệu hoá và hiển thị một tooltip. Các xử lí

kiểm tra quyền và nhóm quyền trên một trang khi nó được load để hiện thị được

Trang 50 / 137

trình bày trong phần sau.

Luận văn tốt nghiệp

0112049 - 0112322

2. Thiết kế lớp

2.1. Mô hình lớp đối tượng cơ sở và các interfaces

org.hisp.dhis.rp.reportfile

org.hisp.dhis.reportgenerator

org.hisp.dhis.rp.user

org.hisp.dhis.rp.reporttype

org.hisp.dhis.datastore

org.hisp.dhis.organizationst ore

2.1.1. Thiết kế các gói (package)

Trang 51 / 137

Hình 3.3: Sơ đồ gói

Luận văn tốt nghiệp

0112049 - 0112322

UserManager interface

ID : string

User

Group

0..*

1

id : int name : string password : string fullname : string pax : string orgUnit : OrganizationUnit status : boolean group : Group

id : int name : string roles : Role description : string

User() User()

Group() Group()

0..*

Role

RoleType

0..*

id : int name : string

id : int name : string roles : Role

1..*

1..*

Role() Role()

RoleType() RoleType()

UserManagerException extends Exception

HibernateUserManager implementation UserManager

UserManagerException() UserManagerException()

getUser() addUser() delUser() getUserActive() getAllUsers() getAllUserByActive() getAllUserByLevelGroupandOrgUnit() getUserByOrgUnit() registerUser() updateGroupOfUser() updateUser() activeUser() getGroup() getAllGroup() getListGroupByLevel() getListGroupMinLevel() addGroup() delGroup() getRole() getAllRoles() addRole() delRole() getRoleType() addRoleType() getAllRoleTypes() delRoleType() addRoleOfRoleType() removeRoleOfRoleType() getRoleOfRoleType() addRoleOfGroup() removeRoleOfGroup() getListRolesOfGroup() getListRoleTypeOfGroup() getListRoleNotOfGroup() listRoleTypeOfRole()

(cid:153) Gói org.hisp.dhis.rp.user

Hình 3.4: Gói User

Các thành phần:

- Các đối tượng: User, Group, Role, RoleType. Là những đối tượng có liên

quan đến vấn đề phân quyền sử dụng, quản lí người dùng và kiểm soát các

chức năng của hệ thống.

- UserManager interface: khai báo các chức năng được cung cấp trên các đối

tượng này.

- HibernateUserManager: bổ sung cho lớp UserManager, định nghĩa cách

thức mà các chức năng được cung cấp trong interface UserManager thực

Trang 52 / 137

hiện.

Luận văn tốt nghiệp

0112049 - 0112322

- UserManagerException: kiểm soát ngoại lệ gây ra bởi các phương thức

trong HibernateUserManager.

ReportTypeManager ID : string

ReportType id : int name : string

ReportType() ReportType()

addReportType() getReportType() getAllReportType() delReportType()

ReportTypeManagerException

HibernateReportTypeManager implementation ReportTypeManager

(cid:153) Gói org.hisp.dhis.rp.reporttype

Hình 3.5: Gói Reporttype

Các thành phần:

- Đối tượng: reporttype. Thể hiện loại báo cáo. Các báo cáo được lập hàng

tháng, hàng quí và hàng năm và được phân loại theo nhiều loại báo cáo khác

nhau, liên quan đến nhiều lĩnh vực, chẳng hạn: báo cáo tổng hợp, báo cáo

tổng kết hoạt động, …

- Interface ReportTypeManager: cung cấp các chức năng thao tác thông tin

về đối tượng này.

- HibernateReportTypeManager: định nghĩa các chức năng được khai báo

trong interface ReportTypeManager.

Trang 53 / 137

- ReportTypeManagerException: kiểm soát ngoại lệ.

Luận văn tốt nghiệp

0112049 - 0112322

ReportFile

ReportManager interface

ID : string

id : int orgUnit : OrganizationUnit period : Period documentFormat : string date : date delStatus : boolean reportType : ReportType reportFileName : string

ReportFile() ReportFile()

addReportFile() getReportFile() getAllReportFiles() searchReportFile() permanentDeleteReport() temporaryDeleteReport() unDeleteReport() getUnDelReport() checkingPeriodRelation() checkingPeriodTypeRelation()

ReportManagerException implementation ReportManager

(cid:153) Gói org.hisp.dhis.rp.reportfile

Hình 3.6: Gói ReportFile

Các thành phần:

- Đối tượng: reportfile. Quản lí thông tin liên quan đến một báo cáo khi được

gởi.

- Interface ReportManager: cung cấp các khả năng thao tác trên đối tượng

này.

- HibernateReportManager: định nghĩa các phương thức được cung cấp bởi

interface ReportManager.

Trang 54 / 137

- ReportManagerException: kiểm soát các ngoại lệ

Luận văn tốt nghiệp

0112049 - 0112322

DataStore

Period

ID : string

id : int startDate : date endDate : date periodType : PeriodType

Period() Period()

0..*0..*

addPeriodType() getPeriodType() delPeriodTYpe() getAllPeriodTypes() addPeriod() getPeriod() getAllPeriods() getAllPeriodsOfPeriodType() delPeriod()

1 1 PeriodType

id : int name : string

PeriodType() PeriodType()

HibernateDataStore implementation DataStore

DataStoreException extends Exception

DataStoreException() DataStoreException()

(cid:153) Gói org.hisp.dhis.datastore

Hình 3.7: Gói DataStore

Các thành phần:

- Đối tượng: Period, PeriodType. Liên quan đến các báo cáo được gởi. Một

báo cáo luôn xác định một khoảng thời gian nhất định và khoảng thời gian

này thuộc về một loại giai đoạn nhất định.

- Interface: DataStore cung cấp các phương thức thao tác trên hai đối tượng

period và periodtype.

- HibernateDataStore: bổ sung cho interface DataStore, định nghĩa các

phương thức được cung cấp trong DataStore.

Trang 55 / 137

- DataStoreException: kiểm soát ngoại lệ.

Luận văn tốt nghiệp

0112049 - 0112322

OrganizationUnit

id : int name : string parent : OrganizationUnit

OrganizationUnitGroup id : int name : string members : Set

1 1

0..* 0..*

OrganizationUnit() OrganizationUnit()

OrganizationStore interface

HibernateOrganizationStore implementation OrganizationStore

OrganizationStoreException extends Exception

(cid:153) Gói org.hisp.dhis.organizationstore:

Hình 3.8: Gói OrganizationStore

Các thành phần:

- Đối tượng: OrganizationUnit. Thể hiện một đơn vị y tế.

- Interface: OrganizationStore: cung cấp các phương thức thao tác trên đối

tượng OrganizationUnit.

- HibernateOrganizationStore: bổ sung cho interface OrganizationStore, định

nghĩa các phương thức được cung cấp trong interface.

Trang 56 / 137

- OrganizationStoreException: kiểm soát ngoại lệ.

Luận văn tốt nghiệp

0112049 - 0112322

Period (from org.hisp.dhi s.datastore)

DataElement id name description active type

1..* 1..*

id : int startDate : date endDate : date periodType : PeriodType

1..* 1..*

1 1

1 1

DataElement()

Period() Period()

1..* 1..*

DataValue dataElement period name source flag value storedBy timestamp comment

DataValue()

ReportGenerator interface

1..*1..*

DataElementGroup id name member flag

DefaultReportGenerator implements ReportGenerator

fillReport() exportToHtml() exportToPdf() exportToXls() exportToCvs() getLocalReports() getReportParameters() getAllOrgUnits() getRootOrgUnits() getAllPeriodsOfPeriodType() getAllPeriodTypes() getRoutineDataValue() getOrgUnitTree()

ReportGeneratorException extends Exception

(cid:153) Gói org.hisp.dhis.reportgenerator:

Hình 3.9: Thiết kế gói reportgenerator.

Các thành phần:

- Đối tượng:

• DataValue: thể hiện một giá trị của phần tử dữ liệu

• DataElement: thể hiện một phần tử dữ liệu.

• DataElementGroup: nhóm các phần tử dữ liệu

- Interface: ReportGenerator – cung cấp các thao tác phát sinh báo cáo và các

thao tác trên các đối tượng trong gói.

- DefaultReportGenerator – định nghĩa cách thức thực hiện các phương thức

trong ReportGenerator interface.

Trang 57 / 137

- ReportGeneratorException: kiểm soát ngoại lệ.

Luận văn tốt nghiệp

0112049 - 0112322

Period (from org.hisp.dhis.datastore)

DataElement (from org.hisp.dhis.reportgenerator)

id : int startDate : date endDate : date periodType : PeriodType

1 1

1..* 1..*

1 1

1..* 1..*

Period() Period()

id name description active type

1..* 1..*

1 1

DataValue (from org.hisp.dhis.reportgenerator) dataElement period name source flag value storedBy timestamp comment

DataElement()

1..* 1..*

DataValue()

0..* 0..*

1..* 1..*

1 1 PeriodType (from org.hisp.dhis.datastore) id : int name : string

ReportFile (from org.hisp.dhis.rp.reportfile)

PeriodType() PeriodType()

DataElementGroup (from org.hisp.dhis.reportgenerator) id name member flag

ReportType (from org.hisp.dhis.rp.reporttype)

1 1

id : int name : string

0..* 0..*

id : int orgUnit : OrganizationUnit period : Period documentFormat : string date : date delStatus : boolean reportType : ReportType reportFileName : string

0..* 0..*

1 1

ReportType() ReportType()

ReportFile() ReportFile()

OrganizationUnit (from org.hisp.dhis.organizationstore) id : int name : string parent : OrganizationUnit

RoleType (from org.hisp.dhis.rp.user)

OrganizationUnit() OrganizationUnit()

1 1

id : int name : string roles : Role

Group (from org.hisp.dhis.rp.user) id : int name : string roles : Role description : string

1..* 1..*

User (from org.hisp.dhis.rp.user)

RoleType() RoleType()

1 1

Group() Group()

1..* 1..*

0..* 0..*

0..* 0..*

1..* 1..*

0..* 0..* Role (from org.hisp.dhis.rp.user) id : int name : string

id : int name : string password : string fullname : string pax : string orgUnit : OrganizationUnit status : boolean group : Group

Role() Role()

User() User()

2.1.2. Sơ đồ lớp:

Trang 58 / 137

Hình 3.10: Sơ đồ lớp

Luận văn tốt nghiệp

0112049 - 0112322

2.1.3. Diễn giải:

2.1.3.1 Danh sách các lớp đối tượng:

Stt Tên đối tượng Ý nghĩa

1 Period Giai đoạn, lớp cơ sở

Cung cấp các thông tin về khoảng thời

gian lập báo cáo.

Các công việc chính: thêm, xoá khoảng

thời gian.

2 PeriodType Loại giai đoạn, lớp cơ sở

Cung cấp các thông tin về loại giai đoạn

của từng giai đoạn.

Các công việc chính: thêm, xoá loại giai

đoạn.

3 OrganizationUnit Đơn vị y tế, lớp cơ sở.

Cung cấp thông tin về các đơn vị y tế

được hỗ trợ bởi hệ thống.

4 OrganizationUnitGr Nhóm đơn vị y tế, lớp cơ sở.

oup Phân nhóm các đơn vị y tế trong hệ thống.

5 ReportType Loại báo cáo, lớp cơ sở.

Cung cấp thông tin về loại báo cáo.

6 ReportFile Báo cáo y tế, lớp cơ sở.

Cung cấp các thông tin liên quan đến một

báo cáo được gởi đến hệ thống

Chức năng chính: thêm, xoá, tìm kiếm báo

cáo…

7 User Người dùng, lớp cơ sở.

Cung cấp các thông tin liên quan đến

người sử dụng hệ thống: tên tài khoản,

Trang 59 / 137

mật khẩu, tên đầy đủ,…

Luận văn tốt nghiệp

0112049 - 0112322

Chức năng chính: kiểm tra đăng nhập,

thêm người dùng, đăng kí người dùng.

8 Group Nhóm người dùng, lớp cơ sở.

Cung cấp các thông tin về nhóm người

dùng, quyền hạn của từng nhóm.

Chức năng chính: thêm mới, phân quyền

cho nhóm người dùng.

9 Role Quyền hạn, lớp cơ sở.

Cung cấp thông tin về các quyền hạn, khả

năng được cung cấp bởi hệ thống.

Đối tượng chỉ đọc.

10 RoleType Nhóm quyền hạn, lớp cơ sở.

Cung cấp thông tin về nhóm quyền hạn,

có liên quan đến vấn đề thể hiện các chức

năng lên trang web.

Đối tượng chỉ đọc.

11 DataElement Phần tử dữ liệu. Cung cấp các đối tượng

phần tử dữ liệu.

12 DataElementGroup Nhóm các phần tử dữ liệu

13 DataValue Giá trị của phần tử dữ liệu.

Bảng 3.1: Danh sách các lớp đối tượng

2.1.3.2 Danh sách các quan hệ:

Stt Tên quan hệ Ý nghĩa

1 Period (1..*) Mỗi giai đoạn đều thuộc về một loại giai

PeriodType (1) đoạn. Ngược lại, mỗi loại giai đoạn có

thể chứa nhiều giai đoạn khác nhau.

2 ReportType (1) Mỗi báo cáo đều thuộc về một loại báo

ReportFile (0..*) cáo duy nhất. Ngược lại, mỗi loại báo

Trang 60 / 137

cáo có thể nhiều hoặc chưa có báo cáo

Luận văn tốt nghiệp

0112049 - 0112322

nào hết.

3 OrganizationUnit (1) Mỗi báo cáo đều có một và chỉ một đơn

ReportFile (0..*) vị y tế chịu trách nhiệm lập báo cáo và

gởi đi. Ngược lại một đơn vị y tế có thể

có nhiều báo cáo khác nhau.

4 Period (1) Mỗi báo cáo thuộc về một giai đoạn cụ

ReportFile (0..*) thể. Ngược lại một giai đoạn có thể có

nhiều hoặc chưa có báo cáo nào.

5 User (0..*) Một người dùng thuộc về duy nhất một

Group (1) nhóm người dùng. Ngược lại, nhóm

người dùng có thể có nhiều hoặc chưa có

người dùng nào.

6 User (1..*) Một người dùng khi được cung cấp tài

OrganizationUnit (1) khoản phải thuộc về một đơn vị y tế nào

đó. Ngược lại, một đơn vị y tế có nhiều

nhóm người dùng khác nhau.

7 Role (0..*) Mỗi quyền hạn thuộc về một hoặc nhiều

Group (0..*) nhóm người dùng khác nhau. Ngược lại

một nhóm người dùng có thể có nhiều

hoặc chưa được cấp bất kì quyền hạn

nào.

8 Role (1..*) Mỗi quyền hạn thuộc về một hoặc nhiều

RoleType (1..*) nhóm quyền hạn. Ngược lại, mỗi nhóm

quyền hạn sẽ có ít nhất là một quyền

hạn.

9 DataValue(1) Mỗi phần tử dữ liệu chỉ có một giá trị.

DataElement(1..*) Ngược lại, mỗi giá trị dữ liệu có thể

thuộc về một hoặc nhiều phần tử dữ liệu

Trang 61 / 137

khác nhau.

Luận văn tốt nghiệp

0112049 - 0112322

Mỗi phần tử dữ liệu thuộc về một hoặc 10 DataElement(1..*)

nhiều nhóm phần tử dữ liệu. Ngược lại, DataElementGroup(1.

mỗi nhóm phần tử dữ liệu có thể có 1 .*)

hoặc nhiều phần tử dữ liệu

11 DataValue(1..*) Mỗi giá trị dữ liệu có thể có nhiều giai

Period(1) đoạn khác nhau. Ngược lại, mỗi giai

đoạn chỉ thuộc một giá trị mà thôi.

Bảng 3.2: Danh sách các quan hệ

2.2. Thiết kế các lớp xử lí action.

org.hisp.dhis.rp.organizationunit. action

org.hisp.dhis.rp. period.action

org.hisp.dhis.reportgener ator.web.action

org.hisp.dhis.rp. report.action

org.hisp.dhis.rp.authorization. action

org.hisp.dhis.rp.user. action

org.hisp.dhis.rp. language

2.2.1. Sơ đồ các gói:

Hình 3.11: Sơ đồ gói

(cid:153) Gói org.hisp.dhis.rp.language:

Cung cấp chức năng đa ngôn ngữ cho hệ thống. Thành phần chính là lớp

Trang 62 / 137

Language.java.

Luận văn tốt nghiệp

0112049 - 0112322

(cid:153) Gói org.hisp.dhis.rp.period.action:

Cung cấp các chức năng liên quan đến vịêc hiển thị giai đoạn trên trang web.

Các đối tượng xử lí bao gồm: AddPeriodAction; DeletePeriodAction;

GetListPeriodAction; PeriodPageLoad.

(cid:153) Gói org.hisp.dhis.rp.report.action:

Cung cấp các chức năng liên quan đến đối tượng reportfile. Các đối tượng xử

lí bao gồm: DeleteReportAction; PermanentDeleteReport; RecoveryPage;

ResetSearchPage; ResetUploadReportPage; SearchPageLoad; SearchReportAction;

UndoDeleteReport; UploadAction; UploadReportPage.

(cid:153) Gói org.hisp.dhis.rp.organizationunit.action:

Cung cấp các chức năng liên quan đến việc hiển thị cấu trúc đơn vị y tế. Các

đối tượng xử lí bao gồm: GetAllRootUnit; GetCityByCountry; GetDistrictByCity;

GetWardByDistrict.

(cid:153) Gói org.hisp.dhis.rp.authorization.action:

Cung cấp các khả năng kiểm tra quyền hạn. Các đối tượng xử lí bao gồm:

CheckingRoleAction; CheckingRoleTypeAction.

(cid:153) Gói org.hisp.dhis.rp.user.action:

Cung cấp các khả năng quản lí người dùng và phân quyền sử dụng. Các đối

tượng xử lí bao gồm: AddRolesForGroupAction; AddUserPageLoad;

DeleteUserAction; GroupAddAction; GroupDeleteAction; GroupListLoadAction;

LoadRolesAddGroupAction; LoadSearchUserPage; LoginAction; LogoutAction;

SearchUserAction; SetActiveUser; UserAddAction; UserEditAction;

UserListAction; UserSaveAction; UserSignUpAction; UserSignUpLoadAction.

(cid:153) Gói org.hisp.dhis.reportgenerator.web.action:

Cung cấp các khả năng kết xuất báo cáo. Các lớp xử lí bao gồm:

FillReportAction, GenerateReportAction và PrepareReportAction.

2.2.2. Nội dung các xử lí chính:

(cid:153) Kiểm tra quyền hạn và hiển thị trang.

Tất cả các xử lí trong hệ thống trước khi trả về một trang html phải gọi bước

Trang 63 / 137

xử lí này. Xử lí này kiểm tra khả năng của người dùng đối với các chức năng trên

Luận văn tốt nghiệp

0112049 - 0112322

trang sắp hiển thị, qua đó quyết định xem sẽ thể hiện những chức năng nào cũng

như làm mờ hay vô hiệu hoá những chức năng nào.

Xử lí này thông qua gói org.hisp.dhis.rp.authorization.action lấy ra danh sách

các chức năng mà người dùng có thể thực hiện (listRole) và danh sách các nhóm

chức năng liên quan đến những chức năng đó (listRoleType) và thực hiện kiểm tra

trên trang bằng velocity.

Việc kiểm tra bao gồm hai phần: kiểm tra trên từng chức năng, và kiểm tra

trên từng nhóm chức năng được hiển thị trên trang. Ví dụ: ta có nhóm chức năng

“Tìm kiếm báo cáo” chức năng này khi được click sẽ hiển thị một trang có các chức

năng như: tìm kiếm báo cáo, download báo cáo,… Do đó, nếu người dùng không có

quyền trên tất cả các chức năng của nhóm chức năng này thì khi hiển thị nhóm chức

năng này sẽ được vô hiệu hoá. Tương tự nếu người dùng không có quyền download

thì khi trang này hiển thị, chức năng download sẽ bị vô hiệu hoá.

#set ($temp = 0)

#foreach($integer in $listRole)

#if($reportsearch_id == $integer.intValue())

#set ($temp = 1)

#end

#end

#if($temp == 1)

value="$locHash.get("searchforuser")" onClick="SearchReport(1)">

#else

value="$locHash.get("searchforuser")" title="noright"> #end

Xử lí kiểm tra chức năng trên trang bằng velocity:

#set($temp = 0)

#foreach($integer in $listRoleType)

#if($periodTypeManagement_id == $integer.intValue())

#set($temp = 1)

#end

Trang 64 / 137

Xử lí kiểm tra nhóm chức năng trên trang bằng velocity:

Luận văn tốt nghiệp

0112049 - 0112322

#end

#if($temp == 1)

value="$locHash.get("addperiodtype")">

#else

type="button" value="$locHash.get("addperiodtype")">

#end

(cid:153) Kết xuất báo cáo.

Khi trang được gọi, hệ thống sẽ yêu cầu xác định tập tin mẫu báo cáo, xác

định khoảng thời gian lập báo cáo, xác định đơn vị y tế liên quan và xác định định

dạng của tập tin báo cáo.

Khi yêu cầu kết xuất báo cáo được phát sinh, hệ thống sẽ tương tác với mô

đun Report generator, phát sinh báo cáo theo định dạng đã xác định, hiển thị báo

cáo và hỗ trợ khả năng cho phép người dùng tải lên hệ thống.

(cid:153) Phân quyền người dùng.

Chức năng này xác lập lại quyền hạn của nhóm người dùng.

Khi trang này được gọi, hệ thống sẽ hiển thị hai danh sách: một bao gồm các

khả năng của người dùng đang có, và một bao gồm các khả năng mà nhóm người

dùng đó không có (Nhóm người dùng được hiển thị trong combo box ở phía trên).

Và tuỳ theo nhóm người dùng sẽ hiển thị nội dung của hai danh sách này khác nhau.

Sử dụng javascript cho phép quản trị viên di chuyển các nội dung giữa hai

danh sách.

Xử lí Phân quyền nhóm người dùng được gọi để cập nhật lại khả năng của

nhóm người dùng khi có yêu cầu cập nhật từ người dùng.

(cid:153) Hiển thị đa ngôn ngữ.

Chức năng đa ngôn ngữ cho phép người dùng lựa chọn ngôn ngữ hiển thị.

Trang 65 / 137

Việc chọn lựa được xác lập trên trang login và ngôn ngữ đó sẽ được hiển thị trong

Luận văn tốt nghiệp

0112049 - 0112322

toàn bộ hệ thống. Chức năng này được thực hiện thông qua xử lí cung cấp bởi lớp

Language.java trong gói org.hisp.dhis.rp.language.

Nội dung các hiển thị được định nghĩa trong các tập tin .properties theo định

dạng sau:

Tên tập tin: DHIS2MessageBundle_en.properties nếu là tiếng Anh.

Và DHIS2MessageBundle_vi.properties nếu là tiếng Việt (hai kí tự đầu)

Nội dung các hiển thị bao gồm hai phần:

Khoá = Nội dung#

Khoá là giá trị duy nhất, để có thể tham chiếu tới nhằm lấy ra kết quả hiển thị

là Nội dung. (Kết thúc nội dung hiển thị bằng kí tự #).

Khi có một yêu cầu chuyển đổi ngôn ngữ được gọi, tập tin ngôn ngữ tương

ứng (tập tin .properties) sẽ được xác định và các nội dung sẽ được hiển thị lên trang

thông qua mã velocity như sau:

$locHash.get(“keyword”)

Với keyword là khoá như đã trình bày ở trên. Và locHash là một đối tượng

kiểu Hashtable trong lớp Language.

(cid:153) Tìm kiếm báo cáo.

Chức năng tìm kiếm báo cáo cho phép người dùng tìm kiếm dựa trên các đơn

vị y tế, theo loại báo cáo và theo khoảng thời gian (giai đoạn). Phạm vi tìm kiếm

được xác định theo từng năm và giá trị năm này được nhập bởi người dùng.

Khi chức năng này được gọi, cấu trúc của các đơn vị y tế được hiển thị trong

4 combo box (xem xử lý hiển thị cấu trúc đơn vị y tế bên dưới) cùng với đó là các

thông tin về loại báo cáo và giai đoạn. Người dùng có thể tìm kiếm dựa trên tất cả

các đơn vị y tế, tất cả các loại báo cáo và tất cả các giai đoạn.

Chức năng tìm kiếm được thực hiện thông qua xử lí SearchReportAction

trong gói: org.hisp.dhis.rp.report.action. Một trong các hàm chính sử dụng trong xử

lí này là phương thức searchReportFile() của đối tượng reportfile

(org.hisp.dhis.rp.reportfile). Phương thức này sử dụng đối tượng cung cấp bởi

Hibernate là query định nghĩa các câu truy vấn có nhận giá trị tham số đầu vào. Tuỳ

Trang 66 / 137

theo điều kiện tìm kiếm của người dùng mà thiết lập đối tượng query và giá trị các

Luận văn tốt nghiệp

0112049 - 0112322

tham số đầu vào được phương thức searchReportFile() thực hiện khác nhau. Kết

quả trả về là một Iterator.

Định nghĩa đối tượng query trong tập tin ánh xạ đối tượng report file

name="org.hisp.dhis.service.report.ReportManager.searchReportFile.

orgunitreporttypeperiod">

report.reportType = ? and report.period in (from Period period where

period.periodType

=

?)and

report.delStatus

=

false

and

year(report.date)= ? order by report.id desc]]>

(ReportFile.hbm.xml)

Giá trị đầu vào của phương thức searchReportFile() bao gồm: mã đơn vị y tế,

mã loại báo cáo, mã giai đoạn và năm (trong trường hợp điều kiện tìm kiếm là tất

cả, thì mã tương ứng có giá trị là -1). Tuỳ theo giá trị của các điều kiện tìm kiếm

này, phương thức searchReportFile sẽ lựa chọn đối tượng query cần thiết và gọi

query

=

session.getNamedQuery("org.hisp.dhis.service.report.ReportManager.

searchReportFile.orgunitreporttypeperiod");

query.setInteger( 0,orgUnit );

query.setInteger( 1,reportTypeId );

query.setInteger( 2,periodId );

query.setInteger( 3,year );

listReport = query.list();

return listReport.iterator();

thực thi:

Kết quả tìm được sẽ được phân trang hiển thị căn cứ theo giá trị của tham số

DefaultMaxRow trong tập tin configuration.properties.

(cid:153) Hiển thị cấu trúc đơn vị y tế.

Cấu trúc các đơn vị y tế được chia thàn 4 cấp: cấp quốc gia, cấp tỉnh/thành

phố trực thuộc trung ương, cấp quận, huyện và thành phố trực thuộc tỉnh, cấp xã,

Trang 67 / 137

phường.

Luận văn tốt nghiệp

0112049 - 0112322

Việc hiển thị các đơn vị y tế được thực hiện thông qua xử lí trên sự kiện

onChange() của combo box và thông qua các xử lí: GetAllRootUnit,

GetCityByCountry, GetDistrictByCity, GetWardByDistrict.

3. Cấu trúc cơ sở dữ liệu

3.1.Ánh xạ các lớp đối tượng sang cơ sở dữ liệu quan hệ.

Lớp đối tượng Cơ sở dữ liệu quan hệ

Thuộc tính Kiểu dữ liệu Thuộc tính Kiểu dữ liệu

Period Period

id int integer id

startDate date date startDate

endDate date date endDate

periodType int periodType PeriodType

PeriodType PeriodType

id int intteger id

name varchar string name

ReportType ReportType

id int integer id

name varchar reportTypeName string

ReportFile ReportFile

id integer id int

documentFormat string documentFormat varchar

reportFileName string reportFileName varchar

date date date date

reportType ReportType reporttype int

orgUnit OrganizationUnit organizationUnit int

period Period period int

delStatus boolean delStatus int

OrganizationUnitGroup OrgUnitGroup

Trang 68 / 137

id integer id int

Luận văn tốt nghiệp

0112049 - 0112322

name string name varchar

OrganizationUnit OrganizationUnit

id integer id int

name string name varchar

OrganizationUnit parent parent int

childrens Set

User User

id integer id int

username string username varchar

password string password varchar

fullname string fullname varchar

rank string rank varchar

orgUnit int OrganizationUnit orgUnitId

group Group groupId int

active boolean active int

Group GroupUser

id integer id int

name string name varchar

level integer level int

description string description varchar

roles Set RolesOfGroup(id,elt)

Role Role

id integer id int

description string description varchar

actionClass string actionClass varchar

RoleType RoleType

id integer id int

Trang 69 / 137

name string name string

Luận văn tốt nghiệp

0112049 - 0112322

roles Set RolesOfRoleType(id,elt)

Trang 70 / 137

Bảng 3.3: Ánh xạ đối tượng sang cơ sở dữ liệu quan hệ

Luận văn tốt nghiệp

0112049 - 0112322

3.2. Cấu trúc của cơ sở dữ liệu sau khi ánh xạ.

3.2.1. Mô hình thực thể kết hợp

Hình 3.11: Mô hình thực thể kết hợp

3.2.2. Thuyết minh cho mô hình

Các thực thể:

BÁO CÁO (REPORTFILE):

Tập tin báo cáo được tạo lập bởi người phụ trách của từng đơn vị. Các báo

cáo này có thể được tạo bởi các công cụ hỗ trợ và sau đó upload lên server (và lưu

thông tin vào cơ sở dữ liệu). Việc tạo lập và upload này nhằm giảm thiểu thời gian

thực hiện việc gửi báo cáo từ cấp này đến cấp kia, đồng thời hỗ trợ người dùng các

thao tác tìm kiếm, download, xem thông tin báo cáo các đơn vị,… một cách nhanh

chóng. Mỗi tập tin báo cáo xác định đơn vị lập báo cáo (Organization Unit) và báo

Trang 71 / 137

cáo khoảng thời gian nào (Period).

Luận văn tốt nghiệp

0112049 - 0112322

LOẠI BÁO CÁO (REPORTTYPE):

Có nhiều loại báo cáo tuỳ thuộc vào nội dung của các báo cáo. Thực tế hệ

thống y tế có các loại báo cáo như Báo cáo tháng, báo cáo quý, báo cáo năm,…Mỗi

báo cáo khi upload phải xác định loại của báo cáo.

GIAI ĐOẠN (PERIOD):

Mỗi giai đoạn (period) xác định khoảng thời gian báo cáo. Mỗi giai đoạn xác

định thời điểm đầu và thời điểm cuối để báo cáo các thông tin, số liệu. Tuỳ thuộc

vào từng loại (periodtype) mà sẽ xác định khoảng thời gian, có thể là 1 tháng, 3

tháng, hoặc 1 năm,…

LOẠI GIAI ĐOẠN (PERIODTYPE):

Mỗi giai đoạn thuộc về một loại giai đoạn nhất. Với từng loại giai đoạn,

dùng để xác định khoảng thời gian cho giai đoạn.

ĐƠN VỊ (ORGANIZATIONUNIT):

Thực thể đơn vị thể hiện cho 1 đơn vị y tế ngoài thực tế. Cấu trúc đơn vị gồm

các cấp quốc gia, thành phố, quận/huyện, phường xã. Mỗi đơn vị cũng có mối quan

hệ với một đơn vị khác. Một đơn vị thuộc về một đơn vị quản lý cấp trên duy nhất

và có thể có nhiều đơn vị cấp con. Mỗi tháng hoặc tương ứng từng khoảng thời gian

yêu cầu báo cáo, các đơn vị tổng hợp báo cáo và upload lên server xem như một

hình thức gửi báo cáo cho cấp trên.

NHÓM ĐƠN VỊ (ORGANIZATIONUNITGROUP):

Mỗi đơn vị thuộc về một nhóm đơn vị (hay còn gọi là cấp của đơn vị) duy

nhất. Có nhiều nhóm đơn vị như Nhóm cấp thành phố, cấp phường xã,…

NGƯỜI DÙNG (USER):

Mỗi người khi sử dụng hệ thống phải có một tài khoản với tên đăng nhập và

mật khẩu đăng nhập. Mỗi người dùng mới nếu muốn sử dụng phải đăng kí với

người quản trị để được cấp tài khoản. Mỗi người dùng sẽ xác định thuộc nhóm

người dùng nào (Group) và là nhân viên của đơn vị nào (Organization Unit). Mỗi

người dùng có quyền thao tác với hệ thống với các mức khác nhau, tuỳ thuộc nhóm

Trang 72 / 137

người dùng nào.

Luận văn tốt nghiệp

0112049 - 0112322

NHÓM NGƯỜI DÙNG (GROUP):

Nhóm người dùng được định nghĩa bởi Admin và xác định cấp (level) của

từng nhóm và được mô tả thông tin (description) về nhóm người dùng này. Ứng với

từng nhóm sẽ có các quyền thao tác khác nhau trên hệ thống.

QUYỀN (ROLE):

Quyền người dùng được định nghĩa tương ứng với từng thao tác(Action)

được xây dựng trong chương trình. Mỗi nhóm người dùng không được cấp quyền

hoặc có thể cấp quyền thực hiện được thực hiện nhiều thao tác. Những người dùng

thuộc nhóm nào thì sẽ đựơc thực hiện các thao tác tương ứng với quyền của nhóm

đó.

LOẠI QUYỀN (ROLETYPE):

Loại quyền liên quan đến user control thể hiện trên giao diện chương trình.

Trang 73 / 137

Một loại quền khi định nghĩa sẽ xác định các quyền chứa trong đó.

Luận văn tốt nghiệp

0112049 - 0112322

3.2.3. Mô hình quan hệ

Trang 74 / 137

Hình 3.12: Lược đồ quan hệ

Luận văn tốt nghiệp

0112049 - 0112322

4. Thiết kế giao diện

4.1. Sơ đồ liên kết các trang

Trang 75 / 137

Hình 3.13: Sơ đồ liên kết các trang

Luận văn tốt nghiệp

0112049 - 0112322

4.2. Nội dung và thiết kế các trang chức năng chính.

4.2.1. Đăng nhập và gởi đăng kí người dùng.

Hình 3.14: Màn hình đăng nhập

Mô tả:

(cid:190) (1) Chọn ngôn ngữ hiển thị trên trang. Hỗ trợ giao diện đa ngôn ngữ với

2 ngôn ngữ: tiếng Việt và tiếng Anh.

(cid:190) (2) “Đăng nhập” nếu người dùng đã được cấp tài khoản (tên đăng nhập

và mật khẩu).

(cid:190) (3) “Đăng kí người dùng” nếu người dùng chưa có tài khoản đăng nhập

và muốn cung cấp thông tin để đăng kí một tài khoản.

Các sự kiện cần xử lý:

Stt Sự kiện Xử lý

1 Trước khi màn hình đăng Lấy tất cả các đơn vị dữ liệu từ sơ sở dữ liệu,

nhập được load hỗ trợ cho chức năng “đăng kí người dùng”

Trang 76 / 137

2 Chọn ngôn ngữ sử dụng Khi người dùng chọn ngôn ngữ, giao diện

Luận văn tốt nghiệp

0112049 - 0112322

chương trình sẽ chuyển đổi ngôn ngữ theo

ngôn ngữ chọn tương ứng.

3 Nhấn nút “Đăng ký” Tất cả các thông tin về người dung cung cấp

khi đăng ký được ghi nhận vào cơ sở dữ liệu

Tuy nhiên tài khoản này chưa được kích hoạt,

sau khi được người quản trị kích hoạt người

dùng mới có thể đăng nhập vào hệ thống bằng

tài khoản này.

4 Nhấn nút “Đăng nhập” Tên đăng nhập và mật khẩu được kiểm tra

xem có tài khoản này đúng và đã được kích

hoạt chưa.

Nếu tài khoản này đúng, sẽ được lưu vào

session.

Nếu tài khoản không đúng, sẽ thông báo lỗi.

Trang 77 / 137

Bảng 3.4: Bảng mô tả màn hình Đăng nhập

Luận văn tốt nghiệp

0112049 - 0112322

4.2.2. Trang chủ

Hình 3.15: Trang chủ

Mô tả:

(cid:190) (1) “Trở ra”: Thoát khỏi hệ thống

(cid:190) (2) “Đổi mật khẩu”: Hỗ trợ người dùng thay đổi mật khẩu đăng nhập

vào hệ thống.

(cid:190) (3) Các thao tác hỗ trợ cho người quản trị (quản lí người dùng, quản lí

hệ thống, lập báo cáo, bảo trì cơ sở dữ liệu)

(cid:190) (4) Liên kết đến các trang khác cùng dự án HISP

(cid:190) (5) Hố trợ các thao tác liên quan đến hoạt động y tế: tìm kiếm, upload

các báo cáo y tế.

Trang 78 / 137

Các sự kiện xử lý:

Luận văn tốt nghiệp

0112049 - 0112322

Stt Sự kiện Xử lý

1 Trước khi trang chủ được Khi đăng nhập thành công, người dùng đăng

hiển thị nhập được lưu xuống session và được kiểm

tra quyền thông qua quyền của nhóm người

dùng mà người dùng đó thuộc về.

Tương ứng với quyền của người dùng mà các

thao tác trên trang được cho phép hay không

cho phép.

2 Liên kết “Trở ra” Người dùng thoát khỏi hệ thống.

Thông tin lưu trữ vể người dùng trên session

sẽ được xoá.

3 Liên kết “Thay đổi mật Lấy thông tin (tên đăng nhập và mật khẩu)

khẩu” của người dùng hiện tại từ session.

Chuyển sang trang thay đổi mật khẩu để nhận

và kiểm tra mật khẩu mới.

Người dùng phải nhập lại mật khẩu cũ để

kiểm tra và nhập 2 lần mật khẩu mới để xác

nhận.

Khi người dùng đồng ý thay đổi mật khẩu, hệ

thống sẽ kiểm tra mật khẩu cũ và xác nhận

mật khẩu mới. Nếu mật khẩu hợp lệ sẽ cập

nhật lại mật khẩu mới cho người dùng.

4 Liên kết “Quản lí người Chuyển sang trang quản lí người dùng. Cho

dùng” phép thực hiện các thao tác Thêm mới tài

khoản, Tra cứu người dùng, hoặc kích hoạt

các tài khoản mà người dùng đã đăng kí. Chỉ

được thao tác trên các người dùng của đơn vị

Trang 79 / 137

y tế của họ.

Luận văn tốt nghiệp

0112049 - 0112322

Các người dùng được thêm mới là những

người dùng của cùng đơn vị y tế với người

quản lí đang đăng nhập và thuộc nhóm người

dùng có cấp thấp hơn cấp của người đang

đăng nhập

5 Liên kết “Quản trị hệ Chuyển sang trang Quản trị hệ thống. Cho

thống” phép thực hiện các thao tác liên quan đến

Nhóm người dùng: Thêm mới nhóm người

dùng, phân quyền cho nhóm người dùng,

Phục hồi các báo cáo đã bị xoá.

6 Liên kết “Bảo trì cơ sở dữ Chuyển sang trang Bảo trì cơ sở dữ liệu. Cho

liệu” phép thực hiện các thao tác liên quan đến dữ

liệu: Giai đoạn, loại giai đoạn, cấu trúc đơn vị

y tế, loại báo cáo. Đây là các trường liên quan

đến các thao tác và các dữ liệu khác của hệ

thống nên ít thay đổi.

Cho phép liên kết đến các trang khác của 7 Các liên kết:

cùng dự án HISP. “Ward Paitent module”

Hisp home: Trang chủ của Hisp “Report engine”

Ward Paitent mô đun: Quản lí bệnh nhân “Hisp home”

8 Liên kết “Tìm kiếm báo Liên kết đến trang tìm kiếm báo cáo. Cho

cáo” phép người dùng tra cứu thông tin, nội dung

báo cáo theo các thông tin cung cấp.

9 Liên kết “Upload” Liên kết đến trang Upload báo cáo. Cho phép

người dùng upload các báo cáo tương ứng với

Loại báo cáo, giai đoạn báo cáo, đơn vị báo

cáo,…

Các tập tin báo cáo sẽ được lưu trữ trên server

Trang 80 / 137

và thông tin của báo cáo được lưu xuống cơ

Luận văn tốt nghiệp

0112049 - 0112322

sở dữ liệu.

Bảng 3.5: Bảng mô tả Trang chủ

4.2.3. Trang tìm kiếm báo cáo

Hình 3.16: Màn hình tìm kiếm báo cáo

Mô tả:

(cid:190) (1) Nhận các thông tin về đơn vị báo cáo

(cid:190) (2) Nhận các thông tin liên quan đến báo cáo như loại báo cáo, giai

đoạn báo cáo, năm báo cáo, …

(cid:190) (3) Tra cứu báo cáo theo các thông tin đã cung cấp

(cid:190) (4) Kết quả tra cứu

Stt Sự kiện Xử lý

Trang 81 / 137

1 Trước khi trang tra cứu báo Lấy thông tin của các đơn vị y tế theo từng

Luận văn tốt nghiệp

0112049 - 0112322

cáo được hiển thị cấp.

Lấy thông tin của đơn vị y tế cấp cao nhất

(Cấp quốc gia)

Từ đơn vị cấp cao nhất sẽ lần lượt lấy được

các đơn vị y tế cấp dưới tương ứng.

Lấy các thông tin về loại báo cáo, các giai

đoạn báo cáo (khoảng thời gian báo cáo)

2 Chọn các thông tin tra cứu Người dùng có thể cung cấp các thông tin cần

tìm kiếm như: Đơn vị y tế, loại báo cáo, giai

đoạn.

Hoặc người dùng có thể để tìm kiếm mặc định

với tất cả đơn vị y tế hoặc với tất cả các loại,

giai đoạn.

3 Nhấn nút “Tra cứu” Hệ thống sẽ tìm kiếm các báo cáo theo các

thông tin mà người dùng đã cung cấp

Danh sách các báo cáo tìm được sẽ hiển thị

bên dưới và được chia theo trang tuỳ thuộc

vào số lượng các báo cáo tìm được.

Danh sách các báo cáo này chỉ cung cấp các

thông tin liên quan đến báo cáo như: Đơn vị,

loại báo cáo,… Muốn xem nội dung báo cáo

hoặc tải báo cáo về, người dùng phải thực

hiện thao tác xem, tải về.

4 Liên kết “Tải về” Hỗ trợ người dùng tải các báo cáo đã tìm

được về máy.

5 Nhấn nút “Xoá” Người dùng có thể xoá các báo cáo tìm được.

Tuy nhiên, để thực hiện được các thao tác này

(tra cứu, xoá hoặc tải báo cáo), người dùng

Trang 82 / 137

phải được cấp quyền thao tác tương ứng với

Luận văn tốt nghiệp

0112049 - 0112322

từng thao tác.

Nếu người dùng không có quyền thực hiện

thao tác nào thì hiển thị của liên kết đó được

ẩn đi, và có hiển thị thông báo “không thực

hiện được thao tác này”.

Bảng 3.6: Bảng mô tả màn hình Tìm kiếm báo cáo

(1)

(2)

(3)

(4)

(5)

4.2.4. Trang phân quyền sử dụng hệ thống.

Hình 3.17: Màn hình phân quyền hệ thống

Mô tả:

(cid:190) (1) Chọn nhóm người dùng để phân quyền.

(cid:190) (2) Nhóm các quyền không thuộc (chưa được cấp) nhóm người dùng

này.

Trang 83 / 137

(cid:190) (3) Nhóm các quyền thuộc (đã được cấp) nhóm người dùng này.

Luận văn tốt nghiệp

0112049 - 0112322

(cid:190) (4) Chọn các quyền cho nhóm người dùng.

(cid:190) (5) Chấp nhận cấp cho nhóm người dùng các quyền đã xác định.

Stt Sự kiện Xử lý

Lấy tất cả các nhóm người dùng, để hiển thị 1 Trước khi trang phân quyền

trên danh sách các nhóm người dùng. nhóm người dùng được

hiển thị

2 Khi trang hiển thị Mặc định hiển thị đơn vị được chọn là đơn

vị của người dùng đang đăng nhập.

Lấy danh sách 2 nhóm quyền: Nhóm quyền

mà nhóm người dùng đã được cấp và Nhóm

quyền mà nhóm người dùng chưa được cấp.

Thêm một quyền cho nhóm người dùng. 3 Nhấn nút “>>”

Xoá một quyền đã cấp cho nhóm người 4 Nhấn nút “<<”

dùng

5 Nhấn nút “Chấp nhận” Hệ thống sẽ cập nhật lại danh sách các

quyền đã được cấp cho nhóm người dùng.

Trang 84 / 137

Bảng 3.7: Bảng mô tả màn hình Phân quyền hệ thống

Luận văn tốt nghiệp

0112049 - 0112322

(2)

(1)

(3)

4.2.5. Trang kết xuất báo cáo.

Hình 3.18: Màn hình kết xuất báo cáo

Mô tả:

(cid:190) (1) Cung cấp các thông tin về báo cáo cần lập (kết xuất)

(cid:190) (2) Chọn tập tin mẫu báo cáo

(cid:190) (3) Kết xuất báo cáo

Các sự kiện xử lý:

Stt Sự kiện Xử lý

1 Trước khi trang kết xuất Lấy tất cả các đơn vị theo các cấp, loại giai

báo cáo được hiển thị đoạn. Tương ứng với từng loại giai đoạn sẽ

hiển thị các giai đoạn

2 Khi trang hiển thị Mặc định hiển thị đơn vị được chọn là đơn

vị của người dùng đang đăng nhập.

3 Nhấn nút “Browse” Xác định tập tin mẫu báo cáo. Đây là những

Trang 85 / 137

mẫu báo cáo được thiết kế sẵn tuỳ theo yêu

Luận văn tốt nghiệp

0112049 - 0112322

cầu nội dung và hình thức báo cáo.

4 Nhấn nút “Lập báo cáo” Từ các thông tin mà người dùng đã xác

định, hệ thống sẽ tìm kiếm các dữ liệu phù

hợp để tổng hợp thành báo cáo theo mẫu đã

chọn.

Trang 86 / 137

Bảng 3.8: Bảng mô tả màn hình Kết xuất báo cáo

Luận văn tốt nghiệp

0112049 - 0112322

CHƯƠNG 4: GIỚI THIỆU CÔNG NGHỆ VÀ MÔI TRƯỜNG

PHÁT TRIỂN

Nội dung phần này chúng em xin trình bày ngắn gọn giới thiệu các công nghệ

được sử dụng để phát triển report portal, vai trò của từng công nghệ và vị trí ứng

dụng chúng trong kiến trúc của report portal. Phần nghiên cứu chi tiết từng công

nghệ chúng em xin trình bày trong phần phụ lục.

1. Spring framework

1.1. Lí do sử dụng Spring?

Spring là một framework hiện rất được sử dụng phổ biến trên thế giới. Đặc

điểm nổi trội của Spring nằm ở tính gọn nhẹ, cung cấp khả năng quản lí các

dependency linh hoạt, thêm nữa Spring có hỗ trợ các công nghệ ánh xạ đối tượng

sang cơ sở dữ liệu như JDO, Hibernate và iBatis, và Spring có hỗ trợ mô hình Web

MVC.

Dự án DHIS 2.0 được phát triển bao gồm 19 mô đun khác nhau, mỗi mô đun

được phát triển gần như đồng thời tại nhiều quốc gia, do đó chính vì đặc điểm này

mà Spring phát huy tính hiệu quả của nó.

1.2. Vấn đề Inversion of Control trong Spring

(cid:153) Khái niệm về IoC.

Inversion of Control hay Dependencies Injection ám chỉ một kĩ thuật đơn

giản trong việc cung cấp các thành phần và các ràng buộc và quản lí các ràng buộc

này trong suốt quá trình tồn tại của đối tượng. Một thành phần mà phụ thuộc vào

các ràng buộc khác được gọi là một target. Theo một cách hiểu khác, IoC cung cấp

các dịch vụ mà qua đó các thành phần có thể truy xuất và tương tác đến các ràng

buộc của nó. Một ví dụ đơn giản là: giả sử ta có một đối tượng A phụ thuộc vào một

thể hiện của đối tượng B, theo cách truyền thống, A phải khởi tạo một thể hiện của

đối tượng B bằng toán tử new. Nhưng với Spring, một thể hiện của B sẽ được cung

Trang 87 / 137

cấp cho đối tượng A vào thời điểm thực thi. Điều này có nghĩa là Spring hay chính

Luận văn tốt nghiệp

0112049 - 0112322

xác hơn là IoC cung cấp cho đối tượng tất cả các ràng buộc, các phụ thuộc của

chúng mà không cần đối tượng phải tự tạo các thể hiện cho các ràng buộc đó.

Inversion of Control được chia thành hai thành phần phụ: Dependency

Injection and Dependency Lookup. Với Dependency Lookup, một thành phần hay

một đối tượng sẽ yêu cầu các ràng buộc hoặc các phụ thuộc của mình trong khi đó,

Dependency Injection thì ngược lại, tất cả các ràng buộc hay phụ thuộc đều được

cung cấp cho đối tượng bởi một khái niệm gọi là Spring container. Dependency

Lookup bao gồm hai dạng: cơ chế đẩy các ràng buộc (Dependency pull) và cơ chế

tra cứu các ràng buộc theo ngữ cảnh (Contextualized Dependency Lookup). Để so

sánh sự tiện lợi và cách thức kiểm soát các thành phần và ràng buộc của các dạng

này, ta xét một ví dụ sau: giả sử ta có một interface tên là MessageOut chứa một

thành phần tên là drawer, khi đó cách thức lấy thành phần này theo các dạng trên

như sau:

public static void main (String [] args) throws Exception

{

//Lấy bean factory.

BeanFactory factory = getBeanFactory();

//Lấy thành phần renderer thông qua factory trên

MessageOut messageOut = ( MessageOut) factory.getBean(“drawer”);

messageOut.drawer();

}

- Dependency pull:

- Contextualized Dependency Lookup:

CDL cũng tương tự như vậy. Tuy nhiên, CDL thực hiện điều đó khác một

chút so với Dependency Pull. Thay vì tìm các thành phần hoặc các ràng buộc

tại một nơi nào đó trong registry, CDL thực hiện bằng cách để thành phần

public interface ManagedComponent

{

public void performLookup( Container container);

}

Trang 88 / 137

này bổ sung cho một interface như sau:

Luận văn tốt nghiệp

0112049 - 0112322

Bằng cách bổ sung cho interface này, thành phần này sẽ được quản lí bởi

container. Khi một container sẵn sàng cung cấp các thành phần cho đối tượng, nó

gọi phương thức performLookup() trên từng thành phần hoặc các ràng buộc, và như

thế các đối tượng chỉ cần tìm trong container để lấy các ràng buộc mà mình cần như

public class ContextualizeDependencyLookup implements

ManagedComponent

{

private Dependency myDep;

public void performLookup( Container container)

{

this.myDep = (Dependency)

container.getDependency(“myDependency”);

}

}

trong ví dụ sau:

- Constructor Dependency Injection: CDI là một dạng của DI, đây là cơ chế

bổ sung các ràng buộc bằng các hàm khởi tạo. Theo đó, bản thân đối tượng khai báo

một và nhiều phương thức khởi tạo mang các tham số là các ràng buộc của chúng,

public class ContructorInjection

{

private DataStore dataStore;

public ContructorInjection ( DataStore dataStore)

{

this.dataStore = dataStore;

}

}

và IoC sẽ cung cấp các ràng buộc này cho đối tượng ngay khi chúng được khởi tạo.

- Setter Dependency Injection: SDI là một dạng tương tự như CDI như thay

vì thông qua các phương thức khởi tạo, việc cung cấp các ràng buộc cho đối tượng

Trang 89 / 137

thông qua phương thức setter.

Luận văn tốt nghiệp

0112049 - 0112322

public class ContructorInjection

{

private DataStore dataStore;

public void setDataStore ( DataStore dataStore)

{

this.dataStore = dataStore;

}

}

- So sánh giữa cơ chế Injection và cơ chế Lookup: mặc dù IoC bao gồm cả

hai cơ chế trên và Spring đều hỗ trợ tất cả nhưng tuỳ trường hợp mà sử dụng một

trong hai cơ chế trên. Nếu bạn sử dung EJB 2.0 và làm việc với J2EE container, bắt

buộc bạn phải sử dung Lookup và trong Spring nếu sử dụng Injection thì “có vẻ tốt

hơn”, các thành phần và các ràng buộc của chúng trở nên liên kết chặt chẽ với nhau

hơn. Thêm vào đó, việc sử dụng Injection làm cho mã nguồn của chương trình trở

nên linh động và đơn giản hơn. Chẳng hạn như trong ví dụ trên trong khi

Dependency pull bắt buộc phải tạo được một tham chiếu đến registry hay một nơi

nào đó chứa các denpendency hoặc đối với Contextualized Dependency Lookup thì

bắt buộc thành phần đó phải bổ sung cho một interface đặc biệt và cung cấp các

ràng buộc một cách thủ công thì ngược lại với Injection, việc duy nhất phải làm là

đối tượng của bạn cho phép lấy các ràng buộc đó thông qua phương thức khởi tạo

hoặc phương thức setters. Thêm một lí do nữa là việc sử dụng Lookup sẽ rất khó

kiểm tra do các mức cô lập khác nhau của container nhưng với Injection tất cả chỉ là

các phương thức khởi tạo và các phương thức setters.

- So sánh giữa Setter và Constructor: cơ chế Constructor đặc biệt hữu dụng

khi bạn chắc chắn rằng phải có một thể hiện của các ràng buộc của đối tượng trước

khi đối tượng hoặc thành phần đó được sử dụng. Tuy nhiên Spring có hỗ trợ một kĩ

thuật đảm bảo ràng các ràng buộc đều được xác định nếu sử dụng phương thức

setter và việc thể hiện của ràng buộc có tồn tại hay không không cần phải quan tâm

đến nữa. Ngoài ra, cách sử dụng phương thức setter cho phép linh động hơn trong

một số trường hợp, đặc biệt là ta có thể sử dụng phương thức này trong các

Trang 90 / 137

interface điều mà phương thức khởi tạo không thể nào làm được. Tuy nhiên cần hạn

Luận văn tốt nghiệp

0112049 - 0112322

chế sử dụng phương thức setter trên các interface vì chẳng có gì đảm bảo ràng các

lớp bổ sung cho interface này sẽ sử dụng tất cả các ràng buộc mà interface đó yêu

cầu cung cấp thông qua phương thức setter. Chỉ sử dụng phương thức setter trong

trường hợp bạn chắc chắn ràng việc yêu cầu các ràng buộc này là tất yếu, tất cả các

lớp bổ sung cho nó đều cần đến và thông thường các ràng buộc này mang ý nghĩa

chứa đựng các thông tin cấu hình, điều khiển hoạt động của hệ thống hoặc các tham

số hệ thống….

1.3. Khái niệm về bean và bean factory.

Thành phần chính yếu của Dependency Injection trong Spring là

BeanFactory. Khái niệm này chỉ một hộp điều khiển có tác dụng quản lí các thành

phần và các ràng buộc và bất kì thành phần nào được quản lí bởi BeanFactory được

gọi là Bean. Ứng dụng của bạn tương tác với Spring DI container thông qua

BeanFactory interface.Tại một thời điểm nào đó, ứng dụng của bạn bắt buộc phải

tạo ra một thể hiện của một lớp bổ sung cho interface này và cấu hình BeanFactory

thông qua các thông tin về các thành phần và ràng buộc cần cung cấp cho đối tượng.

Sau khi việc cấu hình hoàn tất, ứng dụng mới có thể truy xuất đến các Bean thông

qua BeanFactory. Hai lớp bổ sung chính cho BeanFactory là

DefaultListableBeanFactory và XmlBeanFactory.

BeanFactory

DefaultListableBeanFactory XmlBeanFactory

PropertiesBeanDefinitionReader XmlBeanDefinitionReader

Trang 91 / 137

Hình 4.1: Mối quan hệ giữa các lớp hỗ trợ Bean

Luận văn tốt nghiệp

0112049 - 0112322

2. Hibernate

2.1. Lí do sử dụng Hibernate.

Hibernate là một middleware được thiết kế để hổ trợ cho việc ánh xạ đối tượng

sang cơ sở dữ liệu quan hệ. Hibernate đóng vai trò liên kết giữa ứng dụng và

database server, giúp đơn giản code đặc biệt là phần SQL code – trong truy vấn và

các thao tác liên quan đến cơ sở dữ liệu. Ví trí của Hibernate được thể hiện trong

Application Classes

Hibernate

Database Server

mô hình sau:

Hình 4.2: Hibernate trong ứng dụng web

Như trong mô hình trên ta thấy Hibernate nằm giữa các lớp đối tượng Java

truyền thống và hệ quản trị cơ sở dữ liệu. Với Hibernate, chúng ta không cần phải

quan tâm đến việc thông tin của đối tượng được lưu trữ như thế nào? Phải truy vấn

thông tin làm sao? Thay vào đó, chỉ cần xác định đối tượng nào cần được ánh xạ và

ánh xạ đối tượng đó xuống cơ sở dữ liệu như thế nào (cid:198) Độc lập với cơ sở dữ liệu.

Một ích lợi khác là Hibernate giúp giải quyết các vấn đề bất đối xứng giữa

Trang 92 / 137

đối tượng và cơ sở dữ liệu quan hệ như được trình bày sau đây.

Luận văn tốt nghiệp

0112049 - 0112322

2.2. Các vấn đề bất tương xứng giữa đối tượng và cơ sở dữ liệu quan hệ.

2.2.1. Thế nào là tính bền vững:

Hầu hết các ứng dụng đều yêu cầu dữ liệu phải bền vững. “Bền vững” là một

trong những khái niệm cơ bản trong việc phát triển ứng dụng. Nếu dữ liệu không

được hệ thống bảo toàn khi máy chủ tắt, hệ thống có thể sẽ xảy ra sự cố. Tính bền

vững chủ yếu đề cập đến việc lưu trữ dữ liệu trong Cơ sở dữ liệu quan hệ (relaional

database).

(cid:153) Cơ sở dữ liệu quan hệ:

Cơ sở dữ liệu quan hệ được sử dụng phổ biến và thường xuyên. Nhiều đơn

vị, tổ chức đã sử dụng cơ sở dữ liệu quan hệ. Cơ sở dữ liệu quan hệ được thiết lập

do nó có phương thức hoạt động rất mạnh mẽ, rất linh hoạt để quản trị dữ liệu cho

người dùng.

Hệ quản trị cơ sở dữ liệu quan hệ không đặc trưng cho Java và cơ sở dữ liệu

quan hệ cũng không đặc trưng cho một ứng dụng riêng biệt nào. Kỹ thuật “quan hệ”

hỗ trợ cách thức để chia sẻ dữ liệu giữa những ứng dụng khác nhau hoặc giữa

những kỹ thuật khác nhau trên những phần của cùng một ứng dụng.

(cid:153) Tính bền vững trong các ứng dụng hướng đối tượng:

Trong các ứng dụng hướng đối tượng, tính bền vững luôn cho phép các đối

tượng tồn tại lâu hơn thay vì chỉ trong tiến trình tạo ra đối tượng đó. Trạng thái của

đối tượng có thể được lưu trữ trên đĩa cùng với trạng thái cuả nó tại các thời điểm.

Các đối tượng cũng có thể được tái tạo lại để ứng dụng trong các tiến trình sau đó.

Những ứng dụng này không giới hạn những đối được đơn lẻ - những đối

tượng tương thích có thể được tạo lập tính bền vững và sau đó tái tạo lại trong một

tiến trình khác. Hầu hết những đối tượng là không bền vững (đối tượng tạm thời),

một đối tượng tạm thời có thời gian tồn tại giới hạn bởi thời gian của tiến trình tạo

ra nó. Hầu hết các ứng dụng java đều chứa đựng sự kết hợp của các đối tượng bền

vững và các đối tượng tạm thời.

Nhiều cơ sở dữ liệu quan hệ hiện đại cung cấp sự mô tả có cấu trúc dữ liệu

Trang 93 / 137

bền vững, có thể sắp xếp, tìm kiếm, tích hợp dữ liệu. Hệ quản trị cơ sở dữ liệu chịu

Luận văn tốt nghiệp

0112049 - 0112322

trách nhiệm quản lý sự trùng lặp và tính toàn vẹn dữ liệu, kể cả việc cung cấp tính

bảo mật dữ liệu.

Các vấn đề mà hệ quản trị cơ sở dữ liệu quan tâm đến khi được sử dụng:

(cid:131) Cách thức lưu trữ, tổ chức và phục hồi dữ liệu có cấu trúc.

(cid:131) Quản lý sự trùng lặp và tính toàn vẹn dữ liệu.

(cid:131) Đảm bảo chia sẻ dữ liệu.

2.2.2. Mô hình ghép đôi không xứng:

Xét ví dụ: Chúng ta cần 1 lớp để mô tả thông tin cho một đối tượng “User”

và một lớp khác để mô tả cho đối tượng khác “BillingDetails”. Ta phải xác định

mối quan hệ giữa các lớp trong cả 2 phía:

public class User

{

private String userName;

private String name;

private String address;

private Set billingDetails;

….

}

public class BillingDetails

{

private String accountNumber;

private String accountName;

private String accountType;

private User user;

….

}

User Billing Details

Create table USER

(

USERNAME VARCHAR(10) NOT NULL PRIMARY KEY,

Trang 94 / 137

Dùng các câu lệnh SQL để định nghĩa cơ sở dữ liệu:

Luận văn tốt nghiệp

0112049 - 0112322

NAME VARCHARR(50) NOT NULL,

ADDRESS VARCHAR(100)

)

create table BILLINGDETAILS

(

ACCOUNT_NUMBER VARCHAR(10) NOT NULL PRIMARY KEY,

ACCOUNT_NAME VARCHAR(50) NOT NULL,

ACCOUNT_TYPE VARCHAR(15) NOT NULL,

USERNAME VARCHAR(10) FOREIGN KEY REFERENCES USER

)

Mối quan hệ giữa 2 thực thể này được mô tả là khoá ngoại USERNAME

trong bảng BILLINGDETAILS. Việc mô tả như thế không khó khăn cho việc viết

các câu lệnh để insert, update, delete thông tin của User và BillingDetails.

Sự không tương thích sẽ xuất hiện khi thêm nhiều thực thể và thêm các mối

quan hệ giữa các thực thể này vào ứng dụng.

Nếu như bên cạnh lưu trữ thông tin của User, chúng ta cần lưu trữ thêm

thông tin địa chỉ một cách riêng biệt (street, city, state, country, ZIP code). Thực thể

Address được thêm vào như hình vẽ:

User Billing Details Address

Thực tế, chúng ta không cần thêm một bảng Address vì với một câu truy vấn

từ bảng User ta cũng có thể lấy được thông tin về Address của User đó. Chúng ta có

thể chọn phương án định nghĩa một cột hoặc nhiều cột để lưu trữ thông tin về địa

chỉ của User.

(cid:153) Vấn đề về “Tính chia nhỏ”:

Nói đến “tính chia nhỏ” tức là đề cập đến kích thước của các đối tượng trong

ứng dụng. Các đối tượng trong java và các dữ liệu bảng có thể có nhiều cách chia

nhỏ khác nhau. Xét đến ví dụ đã nêu trên, việc thêm một loại dữ liệu để lưu trữ đối

tượng Address trên một cột duy nhất có thể được xem là cách tốt nhất. Tuy nhiên,

Trang 95 / 137

sẽ có một vài vấn đề khi chúng ta cần lấy thông tin riêng lẻ của đối tượng Address.

Luận văn tốt nghiệp

0112049 - 0112322

Để giải quyết yêu cầu này, chúng ta sẽ chia nhỏ việc lưu trữ thông tin Address của

Create table USER(

USERNAME VARCHAR(10) NOT NULL PRIMARY KEY,

NAME VARCHARR(50) NOT NULL,

ADDRESS_STREET VARCHAR(50),

ADDRESS_CITY VARCHAR(15),

ADDRESS_STATE VARCHAR(15),

ADDRESS_ZIPCODE VARCHAR(5),

ADDRESS_COUNTRY VARCHAR(15)

)

user trên nhiều cột. Bảng User được xây dựng lại như sau:

Ở đây, các lớp đối tượng có thể được xây dựng và sắp xếp ở các mức khác

nhau của sự chia nhỏ. Thực thể User được chia nhỏ gồm các thuộc tính (username,

name, address). Sau đó Address lại được chia nhỏ để lưu trữ các thông tin riêng lẻ

(Address_street, Address_city, Address_state, Address_zipcode, Address_country).

(cid:153) Vấn đề về “Lớp kế thừa”:

Trong java, chúng ta thường sử dụng tính kế thừa bằng cách xây dựng các

lớp chính và lớp phụ (lớp kế thừa). Trở lại ví dụ trên, bây giờ lưu trữ thêm thông tin

liên quan đến User là CreditCard và BankAccount. Có nhiều cách để xây dựng đối

tượng User nhưng thông thường chúng ta xây dựng các đối tượng kế thừa. Ở đây, ta

xây dựng thêm 2 lớp CreditCard và BankAccount là 2 lớp kế thừa của

BillingDetails. Khi xây dựng cơ sở dữ liệu, chúng ta định nghĩa bảng

CREDIT_CARD_DETAILS là một bảng phụ nhưng không thể khai báo tính kế

thừa của CreditCard bằng các câu lệnh SQL như CREATE TABLE

CREDIT_CARD_DEATAILS EXTENDS BILLINGDETAILS (…). Trong cơ sở

dữ liệu SQL, các mối quan hệ này được định nghĩa dựa trên các khoá chính, khoá

ngoại đến bảng khác.Vấn đề là chúng ta sẽ dùng cách nào để khai báo các lớp phụ

là kế thừa của các lớp chính khi xây dựng các lớp đối tượng trong java.

(cid:153) Vấn đề về “định danh”:

Thông thường, vấn đề về định danh các đối tượng ít được quan tâm nhưng

trong một vài trường hợp chúng ta phải chú ý đến vấn đề này. Chẳng hạn, khi ta

Trang 96 / 137

quan tâm đến 2 đối tượng là Users và chúng ta phải giải quyết vấn đề về nhận dạng

Luận văn tốt nghiệp

0112049 - 0112322

khi chúng hoàn toàn giống nhau. Có nhiều cách để giải quyết, có thể xác định 2 đối

tượng trong java, nhưng chung 1 cơ sở dữ liệu.

Các đối tượng java định nghĩa 2 khái niệm về sự giống nhau:

• Định danh đối tượng (tương đương về vị trí lưu trữ, xác định bởi biểu

thức a = = b)

• Đẳng thức được xác định bởi phương thức equals().

Định danh trong bảng dữ liệu được thể hiện như là giá trị khoá chính. Vấn đề

là chúng ta sẽ xác định cột nào được xem là khoá chính, để có thể khắc phục được

sự tồn tại các dòng dữ liệu giống nhau.

Trong ví dụ trên, chúng ta xác định USERNAME là khoá chính của bảng

USER. Như vậy, chúng ta sẽ không thể cập nhật lại giá trị của USERNAME trong

bảng USER cũng như giá trị của nó trong khoá ngoại ở bảng BILLINGDETAILS.

Chúng ta sẽ sử dụng khoá thay thế để giải quyết các vấn đề trên và người dùng

không cần quan tâm nhiều đến các khoá thay thế này. Chúng ta có thể xây dựng lại

Create table USER

(

USER_ID BIGINT NOT NULL PRIMARY KEY,

USERNAME VARCHAR(10) NOT NULL UNIQUE,

NAME VARCHARR(50) NOT NULL,

….

)

create table BILLINGDETAILS

(

BILLING_DETAILS_ID BIGINT NOT NULL PRIMARY KEY,

ACCOUNT_NUMBER VARCHAR(10) NOT NULL UNIQUE,

ACCOUNT_NAME VARCHAR(50) NOT NULL,

ACCOUNT_TYPE VARCHAR(15) NOT NULL,

USER_ID BIGINT FOREIGN KEY REFERENCES USER

)

Trang 97 / 137

cấu trúc của bảng USER như sau:

Luận văn tốt nghiệp

0112049 - 0112322

Các cột USER_ID và BILLING_DETAILS_ID là các giá trị tự động phát

sinh trong hệ thống. Khi xây dựng như trên, không xảy ra hiện tượng trùng lặp dữ

liệu. Username trong hệ thống là duy nhất và chúng ta có thể cập nhật khi cần thiết.

(cid:153) Vấn đề về “ Sự kết hợp”

Sự kết hợp được thể hiện bởi các mối quan hệ giữa các thực thể. Các lớp

User, Address, BillingDetails đều có mối kết hợp với nhau. Tuy nhiên, lớp

BillingDetails có thể đứng 1 mình, được lưu trữ bởi bảng riêng lẻ các thông tin của

chúng, không bị ảnh hưởng bởi sự tồn tại của các bảng khác. Để xác định các mối

kết hợp, chúng ta có thể sử dụng đối tượng quan hệ và định nghĩa các cột là khoá

ngoại liên quan giữa các bảng.

Ví dụ, mối kết hợp có thể được xác định trực tiếp từ đối tượng này đến đối

Public class User

{

private Set billingDetails;

}

public class BillingDetails

{

private User user;

}

tượng khác. Trong mỗi lớp đối tượng đều thể hiện được mối kết hợp này.

Trong trường hợp khác, khoá ngoại cũng không được thể hiện một cách trực

tiếp mà chúng ta sẽ tạo ra các mối kết hợp với việc kết bảng và tính chất chiếu.

public class User

{

private Set billingDetails;

}

public class BillingDetials

{

private Set User users;

}

Trang 98 / 137

Ví dụ về xây dựng mối kết hợp nhiều - nhiều (many-to-many):

Luận văn tốt nghiệp

0112049 - 0112322

Khi ta xác định mối quan hệ nhiều-nhiều cho 2 đối tượng User và

Create table USER_BILLING_DETAILS

(

USER_ID BIGINT FOREGIN KEY REFERENCES USER,

BILLING_DETAILS_ID FOREGIN KEY REFERENCES BILLING_DETAILS,

PRIMARY KEY (USER_ID, BILLING_DETAILS_ID)

)

BillingDetails, chúng ta cần xác định sự liên kết bảng trong cơ sở dữ liệu như sau:

(cid:153) Vấn đề về “Định hướng đồ thị đối tượng”:

Có nhiều cách khác nhau để truy xuất đến các đối tượng trong java và trong

cơ sở dữ liệu quan hệ. Ví dụ, trong java, chúng ta có thể truy xuất đến thông tin

billing của user bằng cách gọi aUser.getBillingDetails().getAccountNumber(). Đây

là cách thức thông dụng nhất để truy xuất các thông tin đối tượng, từ đối tượng này

đến đối tượng khác.

Tuy nhiên, đó không phải là cách hiệu quả để lấy dữ liệu từ cơ sở dữ liệu.

Trong cơ sở dữ liệu, cách thức để lấy dữ liệu hiệu quả là sử dụng các phép kết các

bảng lại với nhau.

Khi cần lấy thông tin User:

Select * from USER u where u.USER_ID = 123

Hoặc khi cần lấy các thông tin BillingDetails của 1 User:

Select *

From USER u

Left outer join BILLING_DETAILS bd on bd.USER_ID = u.USER_ID

Where u.USER_ID = 123

Như vậy, trong ngữ cảnh cơ sở dữ liệu quan hệ, việc truy xuất đến dữ liệu

đòi hỏi phải xác định đồ thị đối tượng cho đối tượng trước khi định hướng cho đồ

thị đối tượng đó.

Sự không tương xứng ở đây chính là vấn đề về cách thức truy xuất đến dữ

liệu trong java và trong cơ sở dữ liệu quan hệ.

Trang 99 / 137

Tóm lại:

Luận văn tốt nghiệp

0112049 - 0112322

Khi xây dựng và phát triển các ứng dụng java, việc xây dựng các đối tượng

trong java và việc lưu trữ trên cơ sở dữ liệu quan hệ thường xảy ra hiện tượng

“không tương xứng”. Sự “không tương xứng” này xuất phát từ nhiều nguyên nhân,

có thể do cách định nghĩa các đối tượng, hoặc do việc xác định các mối quan hệ

giữa các đối tượng mà gây ảnh hưởng đến việc lưu trữ, truy xuất thông tin đối tượng

trên java và trên cơ sở dữ liệu không tương thích với nhau. Các vấn đề này phải

được giải quyết để hạn chế tối đa về chi phí khắc phục khi gặp sự cố.

3. Webwork, Velocity

3.1. Webwork framework.

3.1.1. Giới thiệu webwork framework.

Webwork là một web framework khá phổ biến hiện nay trên thế giới, có

chức năng tương tự với một web framework khá nổi tiếng khác của Jakarta là

Struts. Ngoài ra Webwork còn cung cấp thêm ba chức năng khác là: dispatcher,

Web-specific result và một tập các tag được sử dùng ở tầng view của mô hình

MVC.

Những ưu điểm của Webwork:

(cid:190) Các câu lệnh đơn giản, dễ đọc.

(cid:190) Dễ mở rộng các tùy chỉnh: Mã nguồn nhỏ và dễ thiết kế. Nếu Webwork

không chạy đúng như những gì bạn muốn, bạn có thể dễ dàng chỉnh sửa

hoặc mở rộng.

(cid:190) Interface được sử dụng trong Webwork , tất cả đều rõ ràng sẽ đơn giản

(cid:190) Hoàn toàn tách biệt với tầng Web trong mô hình MVC. Dễ dàng dùng lại

các hành động (actions) trong các ứng dụng Swing, Applets, Web

Services, EJBs, custom workflow engines, hay các unit test.

(cid:190) Vì tính đơn giản và phân chia thành các tầng, việc phát triển kiểm thử

cũng trở nên dễ dàng.

3.1.2. Xwork và cấu hình Webwork thực thi các actions

Xword là một framework điều khiển chung được sử dụng để thực thi các

hành động. Xwork rất đơn giản và dễ dùng. Nó chỉ gồm một interface đơn là

Trang 100 / 137

com.opensymphony.xwork.Action.

Luận văn tốt nghiệp

0112049 - 0112322

Khi mỗi hành động thi hành, nó sẽ trả code về cho XWork framework. Code

này đơn giản chỉ là một chuỗi (kiểu String) như: “success” hay “error” framework

sẽ cho biết là kết quả của hành động là gì. Kết quả đó có thể là một hành động khác,

hay một trang web (thường là JSP, Velocity, HTML). Mặc định thì chỉ có một lớp

kết quả kèm theo trong XWork là ActionChainResult. Công dụng của nó là sẽ

chuyển kết quả từ action này sang action kế tiếp. Với chuỗi nhiều action kế tiếp

nhau, các mô hình logic phức tạp sẽ có thể được xây dựng từ những action đơn

giản. Tất cả các kết quả sẽ dựa vào các tham số trong XWork.xml để quyết định kết

quả của hành động.

Bên cạnh kết quả của hành động, XWork còn cung cấp nhiều tính năng cao

cấp khác như diễn đạt ngôn ngữ, xác nhận tính hợp lệ của framework, cũng như hỗ

trợ bộ chận (interceptor).

Tương tự như vậy Webwork cung cấp các lớp implement từ Result Interface và

giúp cho ứng dụng web kết hợp với các action trở nên đơn giản. Các kết quả được

kèm theo trong WebWork là:

Servlet cung cấp • ServletDispatcherResult:

javax.servlet.http.HttpServletRequest để hỗ trợ RequestDispatchers. Một

RequestDispatchers cho phép tồn tại HTTP request được sử dụng để

request luân phiên nội dung trên ứng dụng web server. Sử dụng hiệu ứng

này, bạn có thể biểu diễn kết quả với JSP hay HTML trong khi URL của

request gốc vẫn trong vị trí của trình duyệt. Kết quả sẽ chuyển request

đến vị trí được đặc tả.

• ServletRedirectResult – Servlet này giống như kết quả dispatcher. Ngoài

việc chuyển request đến vị trí được đặc tả, sẽ có một quá trình hồi đáp

được chuyển ngược lại cho trình duyệt.

• Velocity Result: Webwork hỗ trợ nhiều công nghệ cho tầng View. Nếu

tầng View của bạn là Velecity template, bạn có thể sử dụng kết quả

dispatcher hoặc redirect để biểu diễn trang web. Tuy nhiên bạn phải tính

Trang 101 / 137

toán và xử lý nhiều hơn vì cú pháp của Velocity vẫn còn hạn chế. Việc sử

Luận văn tốt nghiệp

0112049 - 0112322

dụng kết quả Velocity sẽ đọc velocity template ngay lập tức và trả kết quả

output trực tiếp đến HttpServletResponse.

Ghi chú: Velocity là template được sử dụng phổ biến trong cộng đồng những

người sử dụng Webwork, và cũng rất nổi tiếng cho những người sử dụng mô hình

MVC như Struct. Webwork đòi hỏi phải có Velocity vì Velocity nằm trong

Webwork, tuy nhiên nó không đòi hỏi phải sử dụng Velocity trong tầng View của

bạn

Trước tiên chúng ta phải cấu hình Webwork. Để làm điều này, chúng ta cần

phải bảo đảm đã có xwork-1.0.jar và webwork-2.0.jar trong WEB-INF/lib và sau đó

A WebWork Example

webwork

com.opensymphony.webwork.dispatcher.ServletDispatcher

velocity

com.opensymphony.webwork.views.velocity.WebWorkVelocity

Servlet

1

velocity

*.vm

webwork

*.action

webwork

Trang 102 / 137

thêm vào trong Web.xml nội dung như sau:

Luận văn tốt nghiệp

0112049 - 0112322

/WEB-INF/lib/webwork.jar

location>

Lưu ý:

(cid:190) Dispatcher đầu tiên của Webwork là Servlet. Trong file cấu hình trên, nó

được ánh xạ đến *.action, nhưng việc ánh xạ này hoàn toàn phục thuộc vào

bạn. Nhiều người thích *.jspa hoặc *.do hơn.

(cid:190) Webwork đòi hỏi velocity phải được khởi tạo đúng trước khi có thể được

sử dụng. Bạn phải đảm bảo rằng WebworkVelocityServlet phải được

thiết lập tham số cho load-on-startup. Nếu bạn không có muốn sử dụng

velocity bạn có thể bỏ qua bước này.

(cid:190) Cuối cùng, để sử dụng JSP taglib bạn phải đặc tả chúng trong web.xml

như trên.

3.2. Velocity template

3.2.1. Giới thiệu Velocity template.

Velocity là một ngôn ngữ template được tạo ra nhằm cung cấp một cách

tiếp cận dễ dàng hơn trong việc xử lí, thể hiện các thông tin động trên một trang

web. Tương tự như JSP, ASP, ASP.Net, về tính năng nhưng velocity nổi trội hơn ở

kích thước gọn nhẹ, cú pháp đơn giản và hoàn toàn tách biệt giữa thành phần View

và các thành phần khác trong mô hình MVC (Model View Controller).

Ngoài ra, Velocity có thể truy xuất các phương thức public của một đối

tượng Java, hỗ trợ thao tác trên thông tin dựa vào một tập các cú pháp lặp, điều kiện

và phép gán….Tính năng này thực sự hấp dẫn các nhà lập trình và những người

thiết kế web. Theo đó, velocity giúp tách biệt mối quan hệ giữa một người thiết kế

web và một lập trình viên. Velocity không những chỉ được sử dụng trên các trang

web mà còn được tham chiếu vào trong các lớp đối tượng Java. Do đó, lập trình

viên không cần phải quan tâm đến việc thể hiện của dữ liệu sau khi xử lí như thế

Trang 103 / 137

nào, và người thiết kế web cũng không cần quan tâm đến việc thông tin được xử lí

Luận văn tốt nghiệp

0112049 - 0112322

như thế nào mà chỉ tập trung vào việc thể hiện luồng thông tin động có được cho

người dùng.

(cid:57) Cú pháp lặp, phép gán và toán tử điều kiện trong Velocity:

Velocity cung cấp một tập các toán tử đơn giản phục vụ hiệu quả cho việc

hiển thị dữ liệu động lên trang web. Sau đây là các toán tử đơn giản và thông dụng

nhất.

Toán tử lặp:

#foreach ($name in $listName)

#end

Thực hiện duyệt từng đối tượng trong danh sách $listName, kiểu dữ liệu

của danh sách có thể là Set, List hoặc Collection. Mỗi đối tượng lấy ra trong biến

#name có thể lấy các thuộc tính của đối tượng thông qua phương thức get của mỗi

đối tượng.

Toán tử gán:

#set ($temp = 1)

#if ($temp == 1)

#else #end

Toán tử điều kiện:

3.2.2. Sử dụng velocity và webwork trong môi trường Java và trên

trang HTML.

public class User {

private String name;

public getName(){

return name;

}

}

Trang 104 / 137

Xét một đối tượng Java sau:

Luận văn tốt nghiệp

0112049 - 0112322

Giả sử ta muốn hiển thị một danh sách các người dùng hiện tại. Ta định

public class ListUsers

extends ActionSupport

{

private List listUsers;

public String execute()

{

listUsers = UserManager.getAllUser();

return SUCCESS;

}

public List getListUsers();

{

return listUsers;

}

}

nghĩa một lớp action lấy danh sách người dùng như sau:

user.htm

error.htm

Nội dung cấu hình action trong tập tin xwork.xml như sau:

#foreach ($user in $listUsers)

$user.name

#end

Trên trang user.htm hiển thị danh sách người dùng như sau:

Trong ví dụ trên, khi action getlist được gọi, nó sẽ lấy ra danh sách các

người dùng và trả về trang user.htm. Trên trang user.htm, biến $listUsers tham

chiếu trực tiếp đến thuộc tính listUsers trong lớp GetList và thông qua phương thức

getListUsers của lớp này, velocity sẽ lấy được danh sách người dùng và trong biến

$listUsers. Sau đó, vòng lặp #foreach…#end duyệt từng đối tượng user trong danh

Trang 105 / 137

sách và thực hiện lấy giá trị name của từng đối tượng. Biến $user.name có nghĩa là

Luận văn tốt nghiệp

0112049 - 0112322

velocity tự động thực hiện gọi phương getName() hoặc getname() để lấy giá trị

Trang 106 / 137

name của đối tượng user cho biến $user.name và hiển thị lên trang web.

Luận văn tốt nghiệp

0112049 - 0112322

CHƯƠNG 5: CÀI ĐẶT VÀ THỬ NGHIỆM

1. Cài đặt

1.1 Môi trường phát triển

Công cụ soạn thảo (IDE): Eclipse.

Ngôn ngữ lập trình: Java

Các công nghệ sử dụng: Spring framework, Hibernate, Webwork, Velocity.

1.2 Mô tả chi tiết từng xử lí trong các lớp đối tượng

1.2.1. Interface ReportManager

Gói org.hisp.dhis.rp.report

Lớp định nghĩa các phương thức: HibernateReportManager

Tên phương thức Vào / Ra Mô tả xử lí

addReportFile()

Vào: mã đơn vị y tế, định dạng tập tin báo cáo, ngày gởi báo cáo, mã giai

đoạn, mã loại báo cáo.

Ra: mã báo cáo vừa được lưu vào.

Xử lí:

- Đọc đối tượng period theo mã giai đoạn.

- Đọc đối tượng reporttype theo mã loại báo cáo.

- Đọc đối tượng organizationunit theo mã đơn vị y tế.

- Lấy đối tượng session.

- Khởi tạo đối tượng report với các thuộc tính ở trên.

- Lưu đối tượng report vào cơ sở dữ liệu.

getReportFile()

Vào: mã báo cáo cần lấy.

Ra: đối tượng report.

Xử lí:

Trang 107 / 137

- Lấy đối tượng session.

Luận văn tốt nghiệp

0112049 - 0112322

- Duyệt cơ sở dữ liệu lấy ra đối tượng report có id bằng với mã báo cáo.

getAllReportFile()

Vào: không có.

Ra: iterator các đối tượng report tìm được.

Xử lí:

- Lấy đối tượng session.

- Đọc cơ sở dữ liệu lấy ra tất cả các đối tượng report và đưa vào một iterator.

searchReportFile()

Vào: mã đơn vị y tế, mã giai đoạn, mã loại báo cáo, năm.

Ra: iterator các đối tượng report tìm được.

Xử lí:

- Lấy đối tượng session.

- Tuỳ theo giá trị của các tham số đầu vào, xác định điều kiện tìm kiếm và

đối tượng query phù hợp.

.searchReportFile.orgunitreporttypeperiod> trong tập tin cấu hình ánh

- Đọc đối tượng query

xạ.

- Gọi phương thức list() của đối tượng query ở trên.

- Lấy iterator từ List trả về bởi phương thức ở trên và trả về cho người dùng.

permanentDeleteReport()

Vào: mã báo cáo cần xoá.

Ra: mã lỗi thông báo thành công hoặc thất bại.

Xử lí:

- Lấy đối tượng session.

- Đọc đối tượng report theo điều kiện mã báo cáo truyền vào.

- Xoá đối tượng này khỏi cơ sở dữ liệu.

- Huỷ tập tin liên quan đến đối tượng này trong ổ cứng.

temporaryDeleteReport()

Trang 108 / 137

Vào: mã báo cáo cần xoá.

Luận văn tốt nghiệp

0112049 - 0112322

Ra: mã lỗi thông báo thành công hoặc có phát sinh lỗi.

Xử lí:

- Lấy đối tượng session.

- Đọc đối tượng report trong cơ sở dữ liệu theo mã báo cáo truyền vào.

- Cập nhật thông tin trạng thái xoá của đối tượng này.

- Lưu đối tượng này vào trong cơ sở dữ liệu.

unDeleteReport()

Vào: mã báo cáo.

Ra: mã lối cho biết đã thực hiện thành công hay có lỗi phát sinh.

Xử lí:

- Lấy đối tượng session.

- Đọc đối tượng report có id là mã báo cáo truyền vào từ cơ sở dữ liệu.

- Cập nhật trạng thái xoá cho đối tượng này là false.

- Lưu đối tượng vào cơ sở dữ liệu.

getUnDeleteReport()

Vào: không có

Ra: iterator các đối tượng report có trạng thái xoá là true.

Xử lí:

- Lấy đối tượng session.

- Đọc tất cả các đối tượng trong cơ sở dữ liệu có trạng thái xoá là true vào

trong một iterator.

- Trả kết quả tìm được về cho người dùng hoặc các xử lí khác.

checkingPeriodRelation()

Vào: mã loại giai đoạn

Ra: 0: không tồn tại đối tượng report nào liên quan đến đối tượng period có

id bằng giá trị của tham số mã giai đoạn ở trên. Ngược lại là 1.

Xử lí:

- Lấy đối tượng session.

Trang 109 / 137

- Gọi đối tượng query

Luận văn tốt nghiệp

0112049 - 0112322

.checkingPeriodRelation.period> đã được định nghĩa trong tập tin cấu

hình ánh xạ ReportFile.hbm.xml.

- Gọi phương thức list() của đối tượng query ở trên. Nếu List trả về không

có chứa bất kì đối tượng nào thì trả về 0. Ngược lại trả về 1.

checkingPeriodTypeRelation()

Vào: mã loại giai đoạn.

Ra: 0: không tồn tại đối tượng report nào liên quan đến bất kì đối tượng

period nào thuộc về đối tượng periodtype có id bằng giá trị của tham số mã loại

giai đoạn ở trên. Ngược lại là 1.

Xử lí:

- Lấy đối tượng session.

checkingPeriodTypeRelation.periodtype> đã được định nghĩa trong tập

- Gọi đối tượng query

tin cấu hình ánh xạ ReportFile.hbm.xml.

- Gọi phương thức list() của đối tượng query ở trên. Nếu List trả về không

có chứa bất kì đối tượng nào thì trả về 0. Ngược lại trả về 1.

Bảng 5.1: Chú giải interface ReportManager

1.2.2. Interface ReportTypeManager

Gói org.hisp.dhis.rp.reporttype

Lớp định nghĩa các phương thức: HibernateReportTypeManager

Tên phương thức Vào / Ra Mô tả xử lí

addReportType()

Vào: tên loại báo cáo.

Ra: mã loại báo cáo vừa được lưu vào.

Xử lí:

- Lấy đối tượng session.

- Khởi tạo đối tượng reporttype với name là giá trị đầu vào.

- Lưu đối tượng reporttype này vào cơ sở dữ liệu.

Trang 110 / 137

getReportType()

Luận văn tốt nghiệp

0112049 - 0112322

Vào: mã loại báo cáo cần lấy.

Ra: đối tượng reporttype.

Xử lí:

- Lấy đối tượng session.

- Duyệt cơ sở dữ liệu lấy ra đối tượng reporttype có id bằng với mã báo cáo.

getAllReportType()

Vào: không có.

Ra: List các đối tượng reporttype tìm được.

Xử lí:

- Lấy đối tượng session.

- Đọc cơ sở dữ liệu lấy ra tất cả các đối tượng reporttype trả về List các đối

tượng tìm được cho người dùng.

delReportType()

Vào: mã loại báo cáo cần xoá.

Ra: mã lỗi cho biết đã xoá thành công hay có lỗi phát sinh.

Xử lí:

- Lấy đối tượng session.

- Xoá đối tượng reporttype có id bằng với mã loại báo cáo truyền vào bằng

phương thức delete() của session.

Bảng 5.2: Chú giải interface ReportTypeManager

1.2.3. Interface OrganizationStore

Gói: org.hisp.dhis.organizationstore.

Lớp định nghĩa các phương thức: HibernateOrganizationStore

Tên phương thức Vào / Ra Mô tả xử lí

addOrgUnit()

Vào: tên đơn vị y tế, mã đơn vị y tế cấp cha của nó (nếu có)

Ra: mã đơn vị y tế vừa được lưu vào.

Xử lí:

Trang 111 / 137

- Lấy đối tượng session.

Luận văn tốt nghiệp

0112049 - 0112322

- Khởi tạo đối tượng organizationunit với name bằng giá trị của tham số

truyền vào.

- Lưu đối tượng orgunit trên vào cơ sở dữ liệu.

getOrgUnit()

Vào: mã đơn vị y tế cần lấy

Ra: đối tượng organizationunit

Xử lí:

- Lấy đối tượng session.

- Duyệt cơ sở dữ liệu lấy ra đối tượng organizationunit có id bằng với mã

báo cáo.

getAllOrganizationUnit()

Vào: không có.

Ra: iterator các đối tượng organizationunit tìm được.

Xử lí:

- Lấy đối tượng session.

- Đọc cơ sở dữ liệu lấy ra tất cả các đối tượng organizationunit và đưa vào

một iterator.

getAllRootOrgUnit()

Vào: không có

Ra: iterator các đối tượng organizationunit tìm được.

Xử lí:

- Lấy đối tượng session.

- Lấy các đối tượng organizationunit trong cơ sở dữ liệu có parent là null và

trả về một List cho người dùng.

delOrgUnit()

Vào: mã đơn vị y tế cần xoá.

Ra: mã lỗi thông báo thành công hoặc thất bại.

Xử lí:

Trang 112 / 137

- Lấy đối tượng session.

Luận văn tốt nghiệp

0112049 - 0112322

- Xoá đối tượng organizationunit có id bằng với mã đơn vị y tế truyền vào

khỏi cơ sở dữ liệu.

Bảng 5.3: Chú giải interface OrganizationStore.

1.2.4. Interface DataStore

Gói org.hisp.dhis.datastore

Lớp định nghĩa các phương thức: HibernateDataStore

Tên phương thức Vào / Ra Mô tả xử lí

addPeriodType()

Vào: tên loại giai đoạn.

Ra: mã loại giai đoạn vừa được thêm vào trong cơ sở dữ liệu

Xử lí:

- Lấy đối tượng session.

- Khởi tạo đối tượng periodtype với name bằng với giá trị của tham số

truyền vào.

- Lưu đối tượng periodtype vào cơ sở dữ liệu.

getPeriodType()

Vào: mã loại giai đoạn.

Ra: đối tượng periodtype.

Xử lí:

- Lấy đối tượng session.

- Duyệt cơ sở dữ liệu lấy ra đối tượng periodtype có id bằng với mã báo cáo.

getAllPeriodType()

Vào: không có.

Ra: List các đối tượng report tìm được.

Xử lí:

- Lấy đối tượng session.

- Đọc cơ sở dữ liệu lấy ra tất cả các đối tượng periodtype và trả về kết quả

cho người dùng hoặc cho các xử lí khác.

Trang 113 / 137

delPeriodType()

Luận văn tốt nghiệp

0112049 - 0112322

Vào: mã loại giai đoạn

Ra: mã lỗi cho biết thành công hay có lỗi phát sinh.

Xử lí:

- Lấy đối tượng session.

- Xoá đối tượng periodtype trong cơ sở dữ liệu thoả điều kiện căn cứ theo

giá trị của tham số truyền vào.

addPeriod()

Vào: ngày bắt đầu, ngày kết thúc, mã loại giai đoạn.

Ra: mã giai đoạn của đối tượng period vừa được lưu vào trong cơ sở dữ liệu.

Xử lí:

- Lấy đối tượng session.

- Khởi tạo đối tượng period bao gồm giá trị của các tham số truyền vào ở

trên.

- Lưu đối tượng period này vào trong cơ sở dữ liệu.

getPeriod()

Vào: mã giai đoạn cần lấy

Ra: đối tượng period.

Xử lí:

- Lấy đối tượng session.

- Đọc đối tượng report trong cơ sở dữ liệu theo mã giai đoạn truyền vào.

- Trả về đối tượng period tìm được cho người dùng.

delPeriod()

Vào: mã giai đoạn.

Ra: mã lối cho biết đã thực hiện thành công hay có lỗi phát sinh.

Xử lí:

- Lấy đối tượng session.

- Xoá đối tượng period trong cơ sở dữ liệu có id bằng với giá trị của tham số

truyền vào.

Trang 114 / 137

getAllPeriodsOfPeriodType()

Luận văn tốt nghiệp

0112049 - 0112322

Vào: mã loại giai đoạn

Ra: List các đối tượng period tìm được.

Xử lí:

- Lấy đối tượng session.

- Đọc đối tượng periodtype trong cơ sở dữ liệu có id bằng giá trị của tham

số truyền vào.

- Đọc tất cả các đối tượng period trong cơ sở dữ liệu có thuộc tính

periodtype bằng với đối tượng periodtype vừa được đọc ở trên.

- Trả kết quả tìm được về cho người dùng hoặc các xử lí khác.

getAllPeriod()

Vào: Không có

Ra: List các đối tượng period tìm được.

Xử lí:

- Lấy đối tượng session.

- Đọc tất cả các đối tượng period trong cơ sở dữ liệu và trả về một List các

đối tượng cho người dùng hoặc cho các xử lí khác.

Bảng 5.4: Chú giải interface DataStore.

1.2.5. Interface UserManager

Lớp định nghĩa các phương thức: HibernateUserManager

Tên phương thức Vào / Ra Mô tả xử lí

addUser()

Vào: tên tài khoản, mật khẩu, tên đầy đủ, chức vụ, mã nhóm người dùng, mã

đơn vị y tế, active

Ra: Mã người dùng của đối tượng user vừa được lưu vào cơ sở dữ liệu.

Xử lí:

- Đọc đối tượng group theo mã nhóm người dùng.

- Đọc đối tượng organizationUnit theo mã đơn vị y tế.

- Lấy đối tượng session.

Trang 115 / 137

- Khởi tạo đối tượng user với các thuộc tính đã nêu.

Luận văn tốt nghiệp

0112049 - 0112322

- Lưu đối tượng user vào cơ sở dữ liệu.

getUser()

Vào: mã người dùng

Ra: đối tượng người dùng

Xử lý:

- Lấy đối tượng session

- Đọc đối tượng user theo mã người dùng cung cấp

-Trả đối tượng user tìm được cho người dùng.

delUser()

Vào: mã người dùng

Ra: mã lỗi cho biết thực hiện thành công hay không thành công.

Xử lý:

- Lấy đối tượng session.

- Xoá đối tượng user có id là mã người dùng truyền vào.

getUserActive()

Vào: tên tài khoản, mật khẩu

Ra: Đối tượng người dùng

Xử lí:

- Lấy đối tượng session

- Đọc đối tượng session đã được kích hoạt (active =true) có username và

password là tên tài khoản và mật khẩu đã cung cấp

- Trả về đối tượng người dùng tìm được.

getAllUser()

Vào: Không có

Ra: iterator các đối tượng người dùng

Xử lí:

- Lấy đối tượng session

- Đọc tất cả các user trong cơ sở dữ liệu và trả về danh sách các đối tượng

Trang 116 / 137

người dùng, đưa vào iterator.

Luận văn tốt nghiệp

0112049 - 0112322

getAllUserByActive()

Vào: điều kiện lọc: active

Ra: iterator các đối tượng thoả điều kiện active

Xử lí:

- Lấy đối tượng session

- Đọc tất cả các đối tượng user trong cơ sở dữ liệu thoả điều kiện active và

trả về danh sách các đối tượng và đưa vào iterator.

getAllUserByLevelGroupandOrgUnit()

Vào: mã nhóm người dùng và mã đơn vị y tế

Ra: list các người dùng thuộc đơn vị y tế và thuộc nhóm người dùng có cấp

thấp hơn cấp của nhóm người dùng này.

Xử lí:

- Đọc đối tượng group theo mã nhóm người dùng cung cấp.

- Đọc đối tượng organizationunit theo mã đơn vị y tế cung cấp.

- Lấy biến session

- Đọc tất cả các đối tượng user có group.level < level của nhóm người dùng

nêu trên, và các đối tượng user này thuộc đơn vị y tế nêu trên.

getUserByOrgUnit()

Vào: mã đơn vị y tế

Ra: list các đối tượng user

Xử lí:

- Đọc đối tượng organizationunit theo mã đơn vị y tế

- Lấy biến session

- Đọc tất cả các đối tượng user có orgunitid là mã đơn vị y tế nêu trên.

registerUser()

Vào: tên tài khoản, mật khẩu, tên đầy đủ, chức vụ, mã đơn vị y tế

Ra: Mã người dùng mới được lưu vào.

Xử lí:

Trang 117 / 137

- Đọc đối tượng organizationunit theo mã đơn vị y tế nhận vào

Luận văn tốt nghiệp

0112049 - 0112322

- Lấy biến session

-Khởi tạo đối tượng user mới theo các thuộc tính đã cung cấp (mặc định là

group: null và active là false

- Lưu đối tượng user vừa tạo vào cơ sở dữ liệu.

updateUser()

Vào: mã người dùng, mật khẩu cũ, mật khẩu mới, xác nhận mật khẩu mới

Ra: Đối tượng user đã cập nhật

Xử lí:

- Đọc đối tượng user có mã người dùng đã cung cấp.

- Lấy biến session

- Kiểm tra mật khẩu cũ với mật khẩu người dùng nhập vào.

- Kiểm tra và xác nhận mật khẩu mới.

- Lưu đối tượng user với mật khẩu mới.

activeUser()

Vào: mã người dùng

Ra: đối tượng người dùng đã được kích hoạt

Xử lý:

- Đọc đối tượng user theo mã người dùng đã cung cấp

- Lấy biến session

- Cập nhật thuộc tính active của user thành true

- Lưu đối tượng user lại với trạng thái mới.

getGoup()

Vào: mã nhóm người dùng

Ra: đối tượng nhóm người dùng

Xử lí:

- Lấy biến session

- Đọc đối tượng group theo mã nhóm người dùng đã cung cấp.

Trang 118 / 137

- Trả đối tượng group tìm được cho người dùng

Luận văn tốt nghiệp

0112049 - 0112322

getAllGroup()

Vào: Không có

Ra: list các đối tượng nhóm người dùng

Xử lí:

- Lấy biến session

- Đọc tất cả các đối tượng group có trong cơ sở dữ liệu, và trả về list các đối

tượng nhóm người dùng.

getListGroupByLevel()

Vào: cấp của nhóm người dùng

Ra: list các đối tượng nhóm người dùng có cấp thấp hơn cấp nêu trên.

Xử lí:

- Lấy biến session

- Đọc tất cả cá đối tượng group có trong cơ sở dữ liệu mà có level lớn hơn level

truyền vào, trả về list các đối tượng.

getListGroupMinLevel()

Vào: Không có

Ra: list các đối tượng nhóm người dùng có cấp thấp nhất

Xử lí:

- Lấy biến session

- Tìm cấp thấp nhất của tất cả các nhóm người dùng

- Đọc tất cả các đối tượng group mà có level là thấp nhất tìm được ở trên, trả về

list các đối tượng.

addGroup()

Vào: tên nhóm người dùng, mô tả nhóm người dùng, cấp của nhóm

Ra: Mã nhóm người dùng mới được lưu vào

Xử lí:

- Lấy đối tượng session

- Khởi tạo đối tượng group theo các thông tin về tên, mô tả và cấp nêu trên

Trang 119 / 137

- Lưu đối tượng nhóm người dùng mới vừa được tạo.

Luận văn tốt nghiệp

0112049 - 0112322

delGroup()

Vào: mã nhóm người dùng

Ra: mã lỗi thông báo thực hiện thành công hay không thành công

Xử lí:

- Lấy đối tượng session.

- Xoá đối tượng group có id là mã nhận vào ở trên

getRole()

Vào:mã quyền sử dụng

Ra: Đối tượng quyền sử dụng

Xử lí:

- Lấy biến session

- Đọc và trả về đối tượng role tìm được tương ứng với mã quyền ở trên.

getAllRole()

Vào: Không có

Ra: list các đối tượng quyền sử dụng

Xử lí:

- Lấy biến session

- Đọc tất cả các đối tượng role có trong cơ sở dữ liệu và trả về list các đối tượng.

addRole()

Vào: tên quyền, lớp action

Ra: Mã quyền mới được lưu vào

Xử lí:

- Lấy biến session.

- Khởi tạo đối tượng role mới với thuộc tính đã nêu.

- Lưu đối tượng vào cơ sở dữ liệu.

delRole()

Vào: mã qụyền

Ra: Mã lỗi xác định thực hịên thành công hay không.

Trang 120 / 137

Xử lí:

Luận văn tốt nghiệp

0112049 - 0112322

- Lấy biến session.

- Xoá đối tượng role có id là mã quyền truyền vào. Trả về mã lỗi.

getRoleType()

Vào:mã nhóm quyền sử dụng

Ra: Đối tượng nhóm quyền sử dụng

Xử lí:

- Lấy biến session

- Đọc và trả về đối tượng roletype tìm được tương ứng với mã nhóm quyền ở

trên.

getAllRoleType()

Vào: Không có

Ra: list các đối tượng nhóm quyền sử dụng

Xử lí:

- Lấy biến session

- Đọc tất cả các đối tượng roletype có trong cơ sở dữ liệu và trả về list các đối

tượng.

addRoleType()

Vào: tên nhóm quyền

Ra: Mã nhóm quyền mới được lưu vào

Xử lí:

- Lấy biến session.

- Khởi tạo đối tượng roletype mới với thuộc tính đã nêu.

- Lưu đối tượng vào cơ sở dữ liệu.

delRoleType()

Vào: mã nhóm qụyền

Ra: Mã lỗi xác định thực hịên thành công hay không.

Xử lí:

- Lấy biến session.

Trang 121 / 137

- Xoá đối tượng roletype có id là mã nhóm quyền truyền vào. Trả về mã lỗi.

Luận văn tốt nghiệp

0112049 - 0112322

addRoleOfRoleType()

Vào: mã nhóm quyền, mã quyền

Ra: đối tượng nhóm quyền

Xử lí:

- Đọc đối tượng roletype có id là mã nhóm quyền truyền vào.

- Đọc đối tượng role có id là mã quyền truyền vào.

- Lấy biến session.

- Thêm đối tượng role vào đối tượng roletype tại roles.

- Lưu các nội dung cập nhật của roletype.

removeRoleOfRoleType()

Vào: mã nhóm quyền, mã quyền

Ra: đối tượng nhóm quyền

Xử lí:

- Đọc đối tượng roletype có id là mã nhóm quyền truyền vào.

- Đọc đối tượng role có id là mã quyền truyền vào.

- Lấy biến session.

- Xoá bớt đối tượng role trong đối tượng roletype tại roles.

- Lưu các nội dung cập nhật của roletype.

addRoleOfGroup()

Vào: mã nhóm người dùng, mã quyền

Ra: đối tượng nhóm người dùng

Xử lí:

- Đọc đối tượng group có id là mã nhóm người dùng truyền vào.

- Đọc đối tượng role có id là mã quyền truyền vào.

- Lấy biến session.

- Thêm đối tượng role vào đối tượng group tại roles.

- Lưu các nội dung cập nhật của group.

removeRoleOfGroup()

Trang 122 / 137

Vào: mã nhóm người dùng, mã quyền

Luận văn tốt nghiệp

0112049 - 0112322

Ra: đối tượng nhóm người dùng

Xử lí:

- Đọc đối tượng group có id là mã nhóm người dùng truyền vào.

- Đọc đối tượng role có id là mã quyền truyền vào.

- Lấy biến session.

- Xoá đối tượng role trong đối tượng group tại roles.

- Lưu các nội dung cập nhật của group.

getListRoleOfGroup()

Vào: mã nhóm người dùng

Ra: list các quyền

Xử lí:

- Đọc đối tượng group có id là mã nhóm người dùng truyền vào.

- Lấy biến session

- Lấy danh sách các đối tượng role trong đối tượng group, đưa vào Set, từ đó

chuyển sang dạng list các đối tượng role.

getListRoleTypeOfGroup()

Vào: mã nhóm người dùng

Ra: list các nhóm quyền mà nhóm người dùng có được.

Xử lí:

- Đọc đối tượng group có id là mã nhóm người dùng truyền vào.

- Lấy biến session

- Lấy list các đối tượng role mà nhóm người dùng có thể thực hiện.

- Lấy list các đối tượng roletype tương ứng với từng role tìm được trên.

- Trả về list các đối tượng roletype mà nhóm người dùng có thể thực hiện thông

qua đối tượng trung gian là role.

getListRoleNotOfGroup()

Vào: mã nhóm người dùng

Ra: list các quyền

Trang 123 / 137

Xử lí:

Luận văn tốt nghiệp

0112049 - 0112322

- Đọc đối tượng group có id là mã nhóm người dùng truyền vào.

- Lấy biến session

- Lấy danh sách các đối tượng role không thuộc đối tượng group, trả về list các

đối tượng role.

getListRoleOfRoleType()

Vào: mã nhóm quyền

Ra: list các quyền

Xử lí:

- Đọc đối tượng roletype có id là mã nhóm quyền truyền vào.

- Lấy biến session

- Lấy danh sách các đối tượng role trong đối tượng roletype, đưa vào Set, từ đó

chuyển sang dạng list các đối tượng role.

Trang 124 / 137

Bảng 5.5: Chú giải interface UserManager.

Luận văn tốt nghiệp

0112049 - 0112322

1.3. Nội dung xây dựng các tập tin ánh xạ đối tượng sang cơ sở dữ liệu quan

hệ.

name="periodType"

class="org.hisp.dhis.datastore.PeriodType"/>

1.3.1. Đối tượng period (Period.hbm.xml)

1.3.2. Đối tượng periodtype (PeriodType.hbm.xml)

name="org.hisp.dhis.data.reportType.ReportType"

table="ReportType">

Trang 125 / 137

1.3.3. Đối tượng reporttype (ReportType.hbm.xml)

Luận văn tốt nghiệp

0112049 - 0112322

name="org.hisp.dhis.service.report.ReportFile"

table="ReportFile">

column="reporttype"

class="org.hisp.dhis.data.reportType.ReportType"

cascade="save-update"/>

name="period"

class="org.hisp.dhis.datastore.Period"/>

column="OrganizationUnit"

class="org.hisp.dhis.organizationstore.OrganizationUnit"

cascade="save-update"/>

from ReportFile as report where report.orgUnit= ? and

report.reportType = ?

and

report.period

in

(from

Period

period

where

period.periodType = ?)

and report.delStatus = false and year(report.date)= ?

order by report.id desc]]>

Trang 126 / 137

1.3.4. Đối tượng reportfile (Report.hbm.xml)

Luận văn tốt nghiệp

0112049 - 0112322

name="org.hisp.dhis.service.report.ReportManager.searchReportFile

.orgunitreporttype">

from ReportFile as report

where report.orgUnit= ? and report.reportType= ?

and report.delStatus = false and year(report.date)= ?

order by report.id desc]]>

from ReportFile as report

where report.orgUnit= ? and report.period in (from Period period

where period.periodType = ?)

and report.delStatus = false and year(report.date)= ?

order by report.id desc]]>

name="org.hisp.dhis.service.report.ReportManager.searchReportFile

.reporttypeperiod">

from ReportFile as report

where report.reportType= ? and report.period in

(from Period period where period.periodType = ?)

and report.delStatus = false and year(report.date)=

?

order by report.id desc]]>

from ReportFile as report

where report.orgUnit=? and report.delStatus = false

and year(report.date)= ?

order by report.id desc]]>

from ReportFile as report

where report.period in (from Period period where

period.periodType = ?)

and report.delStatus = false and year(report.date)=

?

Trang 127 / 137

Luận văn tốt nghiệp

0112049 - 0112322

order by report.id desc]]>

from ReportFile as report

where report.reportType= ? and report.delStatus = false

and year(report.date)= ?

order by report.id desc]]>

from ReportFile as report

where report.delStatus = false and year(report.date)= ?

order by report.id desc]]>

from ReportFile as report

where report.delStatus = false and report.period

in (from Period period where period.periodType = ?)]]>

from ReportFile as report

where report.period = ? and report.delStatus = false]]>

from ReportFile as report

where report.reportType.id = ? and report.delStatus

= false]]>

name="org.hisp.dhis.organizationstore.OrganizationUnit"

table="orgunit">

Trang 128 / 137

1.3.5. Đối tượng organizationunit (OrganizationUnit.hbm.xml)

Luận văn tốt nghiệp

0112049 - 0112322

class="org.hisp.dhis.organizationstore.OrganizationUnit"/>

class="org.hisp.dhis.organizationstore.OrganizationUnit"/>

table="orgunitgroup">

table="groupmember">

class="org.hisp.dhis.organizationstore.OrganizationUnit"/>

Trang 129 / 137

1.3.6.Đối tượng organizationunitgroup OrganizationUnitGroup.hbm.xml)

Luận văn tốt nghiệp

0112049 - 0112322

cascade="save-update"

class="org.hisp.dhis.rp.user.Group"/>

cascade="save-update"

class="org.hisp.dhis.organizationstore.OrganizationUnit"/>

Trang 130 / 137

1.3.7. Đối tượng user (User.hbm.xml)

Luận văn tốt nghiệp

0112049 - 0112322

table="RolesOfGroup">

1.3.8. Đối tượng group (Group.hbm.xml)

Trang 131 / 137

1.3.9. Đối tượng role (Role.hbm.xml)

Luận văn tốt nghiệp

0112049 - 0112322

table="RolesOfRoleType">

1.3.10. Đối tượng roletype (RoleType.hbm.xml)

2. Thử nghiệm

Bạn có thể download Jetty tại địa chỉ:

http://sourceforge.net/project/showfiles.php?group_id=7322&package_id=132252

• Cài đặt jetty 5.1.4: Bạn chỉ cần tạo một thư mục và bung nén tất cả vào đó

• Chép file dhis-rp-beta.war vào thư mục webapps của Jetty

• Chép thư mục chứa file đa ngôn ngữ (src/main/resources/org...) vào trong

Trang 132 / 137

thư mục cài Jetty

Luận văn tốt nghiệp

0112049 - 0112322

• Chạy trình chủ: Chọn Start -> Run -> gõ cmd để vào cửa sổ dòng lệnh.

Đến thư mục cài jetty và gõ: java -jar start.jar để chạy trình chủ Web

server.

Nếu muốn tắt trình chủ, nhấn Ctr+C •

Nội dung dữ liệu thử nghiệm chương trình được trình bày trong phần phụ lục.

Để chạy chương trình, trước tiên ta phải thực hiện các bước cài đặt như đã trình bày

ở trên. Sau đó, chạy trình duyệt IE hoặc Mozilla. Trên thanh address bar gõ địa chỉ:

Trang 133 / 137

http://localhost:8080/initdatabase.action.

Luận văn tốt nghiệp

0112049 - 0112322

Mục đích của action này là khởi tạo cơ sở dữ liệu trên bộ nhớ chính. Sau đó người

dùng có thể đăng nhập vào hệ thống bằng username: admin/ password: admin để

Trang 134 / 137

kiểm tra tất cả các chức năng hiện có của hệ thống.

Luận văn tốt nghiệp

0112049 - 0112322

CHƯƠNG 6: NHẬN XÉT VÀ ĐÁNH GIÁ

1. Đánh giá ưu và khuyết điểm.

1.1 Ưu điểm.

- Hệ thống được phát triển bằng Java và các công nghệ mã nguồn mở nên không

phải quan tâm đến vấn đề bản quyền.

- Được xây dựng theo mô hình ba lớp với sự tách biệt về vai trò và chức năng

giữa các lớp rất rõ ràng nên dễ bảo trì, sử đổi.

- Cung cấp đầy đủ chức năng hỗ trợ người dùng trong việc xây dựng và chia sẻ

báo cáo.

- Cơ chế phân quyền và kiểm tra quyền hạn người dùng linh hoạt, có thể thay

đổi tuỳ thích.

- Riêng đối với công việc triển khai hệ thống DHIS 1.3 có thể nói bước đầu đã

thành công. Hiện nay tại thành phố đã có 6 quận và 2 bệnh viện thí điểm sử dụng

DHIS 1.3 và sử dụng công cụ kết xuất báo cáo (viết bằng VB mà chúng tôi đã thực

hiện) để phát sinh báo cáo cho chương trình Bà mẹ.

1.2 Khuyết điểm.

- Do đây là lần đầu tiên chúng em đựơc tham gia vào một dự án thực sự mà lại

của nước ngoài nên gặp không ít khó khăn về các nguyên tắc làm việc, trao đổi ý

kiến. Thêm vào đó là việc tiếp cận cùng lúc rất nhiều công nghệ mới nên kiến thức

thu được chỉ đủ để thực hiện đề tài, không mang tính chuyên sâu.

- Khả năng áp dụng thực tiễn của chương trình là khá cao. Tuy nhiên, chương

trình cần phải được sửa đổi lại để có thể phù hợp với cách thức làm việc và các yêu

cầu thực tế phát sinh khác. Vấn đề này nguyên nhân là do hiện nay việc chia sẻ báo

cáo trong thực tế được thực hiện thủ công hoặc qua thư từ, chưa thực sự ứng dụng

internet hay LAN, do đó khái niệm gửi báo cáo, chia sẻ báo cáo thông qua internet

là còn mới mẻ. Chính điều này gây không ít khó khăn cho việc xác định yêu cầu

Trang 135 / 137

thực tế của người dùng.

Luận văn tốt nghiệp

0112049 - 0112322

- Khả năng kết xuất báo cáo chưa được hoàn chỉnh do mô đun Report Generator

chưa được hoàn thành.

2. Hướng phát triển trong tương lai.

Theo kế hoạch của dự án, hiện nay hệ thống DHIS 1.3 đã và đang được triển

khai trong toàn thành phố Hồ Chí Minh và Huế (quá trình triển khai kéo dài từ

tháng 2 đến hết tháng 7 năm 2005). Hệ thống DHIS 1.3 sẽ bắt đầu được sử dụng sau

tháng 7 và kéo dài đến hết năm 2006. Cuối năm 2006, dự án mới có kế hoạch có

triển khai hệ thống DHIS 2.0 ở Việt Nam hay không. Một trong những nguyên nhân

là tốc độ internet hiện nay ở Việt Nam không cao và cơ sở vật chất về công nghệ

thông tin, nguồn nhân lực, chi phí đều rất khó khăn, thói quen của người sử dụng

cũng là một trở ngại rất lớn. Do đó, mô đun report portal chỉ dừng lại ở tính năng

chia sẻ báo cáo và hỗ trợ kết xuất báo cáo. Trong tương lai, report portal sẽ tích hợp

luôn cả chức năng ghi nhận số liệu báo cáo hàng ngày, số liệu thống kê hàng tháng,

hàng quí,… phục vụ cho quá trình kết xuất báo cáo (Hiện nay, khả năng kết xuất

báo cáo được tách riêng ra một cơ sở dữ liệu khác.). Tương lai, report portal sẽ thực

sự trở thành một cổng phân tích dữ liệu y tế hoàn chỉnh với đầy đủ chức năng lưu

Trang 136 / 137

trữ số liệu y tế, kết xuất báo cáo và chia sẻ báo cáo giữa các đơn vị y tế.

Luận văn tốt nghiệp

0112049 - 0112322

TÀI LIỆU THAM KHẢO

1. Hibernate in Action – Christian Bauer – Gavin King (MANNING 2004)

2. Professional Hibernate – Eric Pugh, Joseph D.Gradecki (WILEY 2005)

3. Better, Faster, Lighter Java – Bruce A. Tate and Justin Gehtland (O’REILLY

2004)

4. Pro Spring

5. Java™ Open Source Programming With XDoclet, JUnit,WebWork,

Hibernate - Joe Walnes, Ara Abrahamian, Mike Cannon-Brookes, Pat

Lightbody - Copyright © 2004 by Wiley Publishing, Inc., Indianapolis,

Indiana

6. Java eXtreme Programming Cookbook – Eric M.Burke & Brian M.Coyner,

O’Reilly

7. Professional Java Tools for Extreme Programming – Copyright 2004 by

Wily Dreamtech India(P) Ltd – Richard Hightower, Warner Onstine, Paul

Visan, Damon Payne, Joseph D. Gradecki, Kate Rhodes, Robert Watkins,

Erik Mede.

Các website tham khảo:

1. http://www.hibernate.org

2. www.hisp.info

3. www.opensymphony.com/webwork

4. http://www.junit.org

Trang 137 / 137

5. www.springframework.org