Bởi vì Server - máy chủ luôn luôn trong trạng thái sẵn sàng để nhận request từ client nên chỉ cần client gửi yêu cầu tín hiệu vàchấpnhậnyêucầuđóthìserver sẽtrảkếtquả vềphíaclienttrong th
Trang 1ĐẠIHỌCBÁCHKHOAHÀNỘI TRƯỜNGĐIỆN-ĐIỆN TỬ
Trang 6Lời NóiĐầu
chínhphủViệtNamquantâmhơnbaogiờhết.Nạnchặtphácâyrừngđểlấygỗ,săn bắt động vậttrái phép để buôn bán vẫn đang là vấn đề đáng báo động Nó gây ra những hệ lụy tiêucực như biến đổi khí hậu, phá hủy hệ sinh thái, cắt đứt chuỗi thực ăn,…và những hệlụy kéo theonhư nước biểndâng, thiêntai;cuộc sốngcon người bị đe dọa cả về điềukiện sống và tính mạng Ngoài ra, như đã biết, chính phủ Việt Nam đang quyết tâmthực hiện mục tiêu Net zero (đưa mức phác thải dòng về 0) thìviệcbảovệtàinguyênthiênnhiênnhưrừng,độngvậtlạicàngtrởlênquantrọnghơn bao giờ hết Vìvậy, bài toán đặt ra là phải có những cách quản lý tài nguyên thiên nhiên Từ đó, có nhữngbiện pháp kịp thời để bảo vệ và phát triển tài nguyên thiên nhiên nước nhà.
Hiện nay, khoa học công nghệ phát triển nhanh như vũ bão, đặc biệt là lĩnh vựccông nghệ thông tin Có thể nói, công nghệ và chuyển đổi số đã được ứng dụng vàohầu hết tất cả mọi lĩnh vực trong cuộc sống Trong đó, công nghệ phần mềm luônđóng vai trò tiên phong, dẫn đầu trong quá trình đó Các phần mềm đã, đang vàsẽđược ứng dụng ngày càng nhiều trong công việc cũng như cuộc sống thường ngàycủa con người.
vật,câytrồng,cơsởsảnxuấtchếbiếngỗ.Dựavàophầnmềm,cáccấpquảnlý,những hộgiađình,nhữngcá thể có thểtruycập thôngtin dễ dàng,có cái nhìntrực quan và quản lý dễdàng tài nguyên thiên nhiên Từ đó, đề ra được những chính sách đúng đắn, nhữnghành động kịp thời để bảo vệ, ngăn chặn kịp thời những ảnh hướng tiêu cực và pháttriển tài nguyên của quốc gia.
Trang 7Đây là phần mềm đầu tiên mà nhóm 6 – Nature Care thực hiện nên không thểtránhkhỏinhữnghạnchếvàthiếusót,kínhmonggiảngviênvàcácbạnbổsung,góp ý để phầnmềm ngày càng hoàn thiện và thực sự hữu ích với người sử dụng.
Nhóm6xinchânthànhcảmơn!
Trang 8nhiên” là công trình nghiên cứu của chính chúng tôi Những phần có sử dụng tài
liệu thamkhảo cótrongbáo cáo đãđượcliệt kêvànêu rõratại phầntàiliệutham khảo Đồng thời những số liệu hay kết quả trình bày trong đồ án đều mang tính
Nếunhưsai,chúngtôixinhoàntoànchịutráchnhiệmvớigiảngviênbộmôn và nhà trường.
Trang 9Ở chương 1, đề cập đến các nội dung bao gồm nêu ra bài toán quản lý tài nguyên, đưarahướnggiảiquyếtlàsửdụngcôngnghệ,tạoramộtphầnmềmvớicáctínhnăngphùhợp Tiếp theo lànhững cái mà xã hội đã và đang làm, nhược điểm của các phương pháp quản lý truyền thống vàđưa ra những ưu điểm của sử sụng công nghệ phần mềm Tiếp đến là những công cụ hỗ trợ xâydựng phần mềm được sử dụng (JavaScript, HTML, Springboot, );những môhình ápdụngchobàitoán(client-server); biểuđồtrựcquan hóa bài toán, dữ liệu.
Quảnlýcơsởlưutrữđộngvật
1.3 Nhữngcáclàmhiệnnay
Nhữngphầnmềmquảnlýhiệnnay:quảnlýbánhàng,quảnlýsổtaychỉtiêu,… Nhữngcáicáchmàngườitadùngđểquảnlýgỗ,độngvật,cây
1.4 Cáccôngcụđượcsửdụngtrongđềtài
1.4.1 Môhìnhclient-server[1]
Mô hình Client Server là mô hình mạng máy tính trong đó các máy tính con được đóngvaitrònhưmộtmáykhách, chúnglàmnhiệmvụgửiyêucầuđếncácmáychủ.Để máy chủ xử lý yêu cầu và trả kết quả về cho máy khách đó.
Trang 10TrongmôhìnhClient-Server,serverchấpnhậntấtcảcácyêucầuhợplệtừmọinơi khác nhau trên Internet, sau đó trả kết quả về máy tính đã gửi yêu cầu đó
Máy tính được coi là máy khách khi chúng làm nhiệm vụ gửi yêu cầu đến các máy chủ và đợi câu trả lời được gửi về Để máy khách và máy chủ có thể giao tiếp được với nhauthìgiữachúngphảicómộtchuẩnnhấtđịnh,vàchuẩnđóđược gọilàgiaothức.Một số giao thứcđược sử dụng phổ biến hiện nay như: HTTPS, TCP/IP, FTP,
Nếumáykháchmuốntruyxuấtcác thôngtintừ máychủ,chúngphải tuântheo một
giaothứcmàmáychủ đóđưara.Nếuyêucầuđóđượcchấpnhậnthìmáychủsẽ thuthập thông tin và trả về kết quả cho máy khách yêu cầu Bởi vì Server - máy chủ luôn luôn trong trạng thái sẵn sàng để nhận request từ client nên chỉ cần client gửi yêu cầu tín hiệu vàchấpnhậnyêucầuđóthìserver sẽtrảkếtquả vềphíaclienttrong thờigian ngắnnhất.
Giúp chúng ta có thể làm việc trên bất kì một máy tính nào có hỗ trợ giao thứctruyềnthông.Giaothứcchuẩnnàycũnggiúpcácnhàsảnxuấttíchhợplênnhiều sản phẩmkhác nhau mà không gặp phải khó khăn gì.
Có thể có nhiều server cùng làm một dịch vụ, chúng có thể nằm trên nhiều máytính hoặc một máy tính.
Chỉmangđặcđiểmcủaphầnmềmmàkhông hềliênquanđếnphần cứng,ngoài yêu cầuduy nhất là server phải có cấu hình cao hơn các client.
Hỗ trợ người dùng nhiều dịch vụ đa dạng và sự tiện dụng bởi khả năng truy cậptừ xa.
Cung cấp một nền tảng lý tưởng, cho phép cung cấp tích hợp các kỹ thuật hiệnđại như mô hình thiết kế hướng đối tượng, hệ chuyên gia, hệ thông tin địalý(GIS).
Nhượcđiểm:
Trang 11 Vấnđề bảomậtdữliệuthôngtinđôikhicònchưađượcan toàndophảitrao đổidữliệugiữa2máytínhkhácnhauở2khuvựcđịalýcáchxanhau.Vàđâycũng
nhượcđiểmduynhấtcủamôhìnhnày.Tuynhiênvấnđềnàycómộtsốgiaothức đã hỗ trợ bảomật dữ liệu khi truyền tải Giao thức được sử dụng phổ biến nhưHTTPS.
TừmôhìnhClient–Server,giớilậptrìnhviênhiệnđạiđãphântrangwebralàm hai phần để thuận tiện phát triển và quản lý: Front-end -B a c k - e n d
Phầnfront-endcủamộttrangweblàphầntươngtácvớingườidùng.Tấtcảmọithứ ta nhìn thấykhi điều hướng trên Internet, từ các font chữ, màu sắc cho tới các menu xổ xuống và các thanh trượt, là một sự kết hợp của HTML, CSS, và JavaScript được điều
Đâu là những phần giúp phần front-end của một trang web có thể hoạt động được? Tất cả dữ liệu sẽ được lưu trữ ở đâu? Đó là phần việc của back end Phần back end của một trang web bao gồm một máy chủ, một ứng dụng, và một cơ sở dữ liệu Một lập trình viênback-endxâydựngvàduytrì côngnghệ màsứcmạnhcủanhữngthànhphầnđó,cho phép phần giao diện người dùng của trang web có thể tồn tại được.
1.4.2 Back-end:JavavàSpringFramework1.4.2.1 Java[2]
JavađượcpháttriểnbởimộtnhómdoJamesGoslinglãnhđạotạiSunMicrosystems.Sun
Microsystems đã được Oracle mua lại vào năm 2010 Ban đầu có tên là Oak, Java được thiết kế vào năm 1991 để sử dụng trong chip nhúng cho các thiết bị điện tử Vào năm 1995, sau khi đổi tên thành Java, nó đã được thiết kế lại để phát triển ứng dụng Web.
Javađãtrở nêncựckỳ phổbiến Sự tăngtrưởngnhanhchóngvà bao phủrộngrãicủanó đến từ các đặc tính thiết kế Java đơn giản, hướng đối tượng, phân tán, diễn giải, mạnh
mẽ,antoàn,khôngphụthuộckiếntrúc,diđộng,hiệusuấtcao,đaluồngvàlinhhoạt,đặc biệt Java
được tạo ra với tiêu chí “Viết (code) một lần, thực thi khắp nơi” (Write Once, Run
Anywhere– W O R A )
Java là một ngôn ngữ lập trình đa chức năng, tổng quát, được sử dụng để phát triển các ứngdụngquantrọng.Ngàynay,nókhôngchỉđượcsửdụngcholậptrìnhWebmàcònđể phát triển các ứng dụng độc lập hoạt động trên nhiều nền tảng trên máy chủ, máy tính để bàn và thiết bị di động.
Trang 121.4.2.2 SpringFramework[3]
triệulậptrìnhviênlựachọnđểsửdụng.Nhờnómàcáclậptrìnhviêncóthểpháttriểnứng dụng Java mộtcách dễ dàng với tốc độ cao đáng kinh ngạc.
Spring khá nhẹ (version chỉ khoảng 2MB với kích thước nhỏ) và trong suốt (hoạt độngtrong suốt với lập trình viên) Spring cũng cung cấp và hỗ trợ các cơ sở hạ tầng đã đượcxácđịnhrõràngđểpháttriểnứngdụngtrongJava.Nóidễhiểuhơn,Springxửlýcơsởhạ tầng để bạntập trung tối đa vào việc phát triển ứng dụng.
NhữngtínhnăngcốtlõicủaSpringphùhợpđểsửdụngởnhiềumảngkhácnhau.Nócó thể hỗ trợtốt từ các ứng dụng mobile, desktop đến các ứng dụng Java web.
1.4.3 Front-end:HTML,CSS,JavascriptvàVuejs1.4.3.1 HTML[4]
HTMLlàviếttắtcủacụmtừHypertextMarkupLanguage(tạmdịchlàNgônngữđánh dấu siêu văn bản).HTMLđược sử dụng để tạo và cấu trúc các thành phần trong trang web hoặc ứng dụng, phân chia các đoạn văn, heading, titles, blockquotes…
MộttàiliệuHTMLđượchìnhthànhbởicácphầntửHTML(HTML Elements)đượcquy định bằngcác cặp thẻ (tag và attributes) Các cặp thẻ này được bao bọc bởi một dấu
ngoặcngọn (vídụ<html>)vàthườnglàsẽđượckhaibáothànhmộtcặp,baogồmthẻmởvàthẻđóng.Vídụ,chúngtacóthể tạomộtđoạnvănbằng cáchđặt vănbảnvàotrongcặp tag mở và
1.4.3.2 CSS[5]
CSSlà chữ viết tắt của Cascading Style Sheets, nó là một ngôn ngữ được sử dụng đểtìm và định dạnglại các phần tử được tạo ra bởi các ngôn ngữ đánh dấu (HTML) Nói ngắn gọn hơn là ngôn ngữ tạo phong cách cho trang web Bạn có thể hiểu đơn giản rằng, nếu
HTMLđóngvaitròđịnhdạngcácphầntửtrên websitenhưviệctạoracácđoạnvănbản,
Trang 13cáctiêuđề,bảng,…thìCSSsẽgiúpchúngtacóthểthêmstylevàocácphầntửHTMLđó như đổi bố cục, màu sắc trang, đổi màu chữ, font chữ, thay đổi cấu trúc…
CSSđượcpháttriểnbởiW3C(WorldWideWebConsortium)vàonăm1996,vìHTML không được thiết kế để gắn tag để giúp định dạng trang web.
PhươngthứchoạtđộngcủaCSSlànósẽtìmdựavàocácvùngchọn,vùngchọncóthểlà tên một thẻ HTML, tên một ID, class hay nhiều kiểu khác Sau đó là nó sẽ áp dụng các thuộc tính cần thay đổi lên vùng chọn đó.
MốitươngquangiữaHTMLvàCSSrất mậtthiết.HTML làngôn ngữ markup(nềntảngcủasite)vàCSSđịnhhìnhphongcách(tấtcảnhữnggìtạonêngiaodiệnwebsite),chúng là khôngthể tách rời.
mộtframeworklinhđộngdùngđểxâydựnggiaodiệnngườidùng(userinterfaces).Khác với các framework nguyên khối (monolithic), Vue được thiết kế từ đầu theo hướng cho phép và khuyến khích việc phát triển ứng dụng theo từng bước Khi phát triển lớp giao
diện(viewlayer),ngườidùngchỉcầndùngthưviệnlõi(core library) củaVue,vốnrấtdễ học và tíchhợp với các thư viện hoặc dự án có sẵn Cùng lúc đó, nếu kết hợp với những kĩ thuật hiện đại nhưSFC (single file components)vàcác thư viện hỗ trợ, Vue cũng đáp ứng được dễ dàngnhu cầu xây dựng những ứng dụng một trang (SPA - Single-Page
Applications)vớiđộphứctạpcaohơnnhiều.1.4.4 Cơsởdữliệuvàhệquảntrịcơsởdữliệu[7]
Cơ sở dữ liệu có tên tiếng anh là Database, viết tắt là CSDL Là một tập hợp các dữ liệucótổchức,đượclưutrữvàtruycậptừhệ thốngmáytính.Khicơsởdữliệu phứctạp hơn, chúng sẽ được phát triển bằng cách sử dụng các thiết kế và mô hình hóa hình thức Tóm lại, có sở dữ liệu là hệ thống gồm rất nhiều thông tin, dữ liệu được xây dựng theo một cấu trúc nhất định để đáp ứng nhu cầu khai thác, sử dụng của nhiều người hay chạy nhiều chương trình cùng một lúc Khi áp dụng hình thức lưu trữ này, sẽ khắc phục được những điểm yếu của việc lưu file thông thường trên máy tính Các thông tin dữ liệu đảm bảo được sự nhất quán, hạn chế được việc trùng lặp thông tin.
Từ SQL là viết tắt của cụm Structured Query Language, có nghĩa là loại ngôn ngữ truy vấncócấutrúc.Đây làmộtloạingônngữmáytínhgiúphỗtrợcácthaotáclưutrữ,truy xuất dữ liệu cùng một cơ sở dữ liệu quan hệ một cách nhanh chóng Ngôn ngữ này đã
đượcANSI–việntiêuchuẩnquốcgiacủaHoaKỳđặttiêuchuẩnhóa,vàtrởthànhmột ngôn ngữ được sử dụng phổ biến.
HệquảntrịcơsởdữliệuMySQLđượcsửdụngtrongdựánnày.
Trang 14Hình 2-1.DFDmứcngữcảnh
Trongphầnnày,trìnhbàyrõràngcácbướctừthiêtkế,phântíchhệthống.Cácnộidung gồm có sơ đồDFD (DFD mức 1, DFD mức dưới đỉnh, DFD mức đỉnh, DFD mức ngữ
2.1.1 DFDmứcngữcảnh
Hình2.1DFDmứcngữcảnh
Trang 152.1.2 DFDmứcđỉnh
Hình2.2DFDmứcđỉnh
Trang 18Hình 2.8 DFD quản lý hệ thống
2.1.3.5 Chứcnăng 5: Quản lýhệthống
Hình2.7DFDquảnlýhệthống
Trang 19Hình2.9Sơđồquản trịhệthống
Hình2.10Sơđồchứcnăngphânquyền
Trang 20Hình2.12Sơđồ Quảnlí lịchsử
Trang 21Hình2.13Sơđồ Báo cáo thốngkê
Hình2.14Sơđồ quản lítàikhoản
Trang 22Hình2.15Sơđồquản lítàinguyên
Hình2.16Sơđồ quản lísản xuấtgỗ
Trang 23Hình2.17Sơđồquản lílưutrữđộngvật
Hình2.18Sơđồquản lícâygiống
Trang 24Hình 2.19SơđồERD
Nhưvậy,ởchương2,đãhoànthànhbướcphântíchthiếtkế,bao gồmvẽcáccơ đồ DFD (mức đỉnh, mức 1, mức dưới đỉnh), DFD và ERD Từ đó, có một cái nhìn tổng thể, bao quát về những gì phải làm ở bước tiếp theo – bước triển khai.
Trang 25Sau khi đã phân tích, thiết kế hệ thống ở chương 2, sẽ đến bước triển khai ở chương 3 Ở chươngnày,cáccông việcbaogồmthiếtkếcơsởdữliệu (lậpcácbảngthựcthểvàthuộc tính, từ điểndữ liệu pha phân tích, bảng database, pha thiết kế); viết code và trình bày giao diện web
3.1 Thiếtkếcơsởdữliệu
3.1.1 Cácthựcthểvàthuộctính
Administrationscode,name,surbordinate,administrativeLevel
Usersusername, password , firstName , lastName , avatar , email, b i r t h D a t e , a d d r e s s , i s A c t i v e , r o l e , ot p ,
otpGeneratedTime,administration
Coordinateslat,lng ,facilities
Fluctuationid,name ,characteristics
AnimalSpeciesname,animalType,image,mainFood,mainDisease,fluctuation
Trang 263.1.2 Từđiểndữliệuphaphântích:
CấpđộhànhchínhAdministrativeLevels Lưutrữtênvàcáccấpcủacấpđộhànhchính
tài khoản , mật khẩu , email , vaitròvàcơsởhành chính củangười
cơsở,sứcchứa,cơsởhànhchính của cơ sở
Hìnhthứchoạtđộng
Trang 27SốliệuthốngkêStatisticsLưutrữđơnvị,sốlượngvàngàycủasốliệu thốngkê
trồng, loài động vật và loạihìnhsảnxuất
3.1.3 Bảngdatabase
Hình3.1Bảngthiếtkếdatabase
Trang 283.1.4 Phathiếtkế
Bảng3.3Cácthuộctínhbảngadministrative_levels(CĐHC – cấp độ hành chính)
Bảng3.5Cácthuộctínhbảngroles(VT–Vaitrò)
Trang 29Thờigian tạomã
Bảng3.7Cácthuộctínhbảngfacility_types(LCS–loạicơsở)
Trang 30Bảng3.9Cácthuộctínhbảngoperation_types(HTHĐ–hìnhthứchoạtđộng)
Trang 31Bảng3.12Cácthuộctínhbảnganimal_species(LĐV–loàiđộngvật)
Trang 32Sâu bệnhchính
NOT NULL
NOT NULL
Trang 33NOTNULL
Trang 35.orElseThrow(()->newDataNotFoundException("Not found administrationw i t h c o d e = " +c o d e ) ) ;
&&a d m i n i s t r a t i o n g e t A d m i n i s t r a t i v e L e v e l ( ) g e t L ev e l ( ) ! = a d m i n i s t r a t i v e L e v e l g e t L e v e l ( ) ) {
thrownewInvalidDataException("Đơn vịhành chính cấp Tỉnh không thể đổi c ấ p ");
&&a d m i n i s t r a t i o n g e t A d m i n i s t r a t i v e L e v e l ( ) g e t L e
Trang 36v e l ( ) ! = a d m i n i s t r a t i v e L e v e l g e t L e v e l ( ) ) {
Trang 37&&a d m i n i s t r a t i o n g e t A d m i n i s t r a t i v e L e v e l ( ) g e t L ev e l ( ) ! = a d m i n i s t r a t i v e L e v e l g e t L e v e l ( ) ) {
"ĐơnvịhànhchínhcấpPhường,Thịtrấn,Xãchỉcóthểđổic h o nhau");
Strings u b o r d i n a t e =
a d m i n i s t r a t i o n D T O g e t S u b o r d i n a t e C o d e ( ) = = n u l l ?"":administrationDTO.getSubordinateCode();
if(administration.getAdministrativeLevel().getLevel()==1){thrown e wInvalidDataException(
"Đơnvịhànhchính cấ pTỉnh khôngthể trựcthuộcđơnvịhànhchínhkhác");
{t h r o w n e wInvalidDataException(
"ĐơnvịhànhchínhcấpPhường,Thịtrấn,Xãchỉcóthểt r ự c t h u ộ c đ ơ n v ị h à n h c h í n h c ấ p t h à n h p h ố , huyện");
Trang 38administration.setSubordinate(subordinateAdministration);}
Trang 39thrown e w I n v a l i d D a t a E x c e p t i o n ("Kícht h ư ớ c ả n h đ ạ i d i ệ n p h ả inhỏ
StringfileName=StringUtils.cleanPath(avatarFile.getOriginalFilename());
Trang 40PathuploadPath=Path.of(uploadDir.toString(),uniqueFileName); Files.copy(avatarFile.getInputStream(),uploadPath,
Trang 41Useru s e r=this.userRepository.findByEmail(verifyOtpDTO.getEmail())
3.2.3 Cơsởlưutrữđộngvật–AnimalStorageFacilities
Thêmmột cơsởlưutrữđộngvật
Trang 42AnimalStorageFacilitiesanimalStorageFacilities=n e wAnimalStorageFacilities();
animalStorageFacilities.setAdministration(administration);}c a t c h ( Exceptione x c e p t i o n )
}
Trang 43}
Trang 443.2.5 Loàiđộngvật–AnimalSpecies
Stringi m a g e=t h i s.saveImage(imageFile);Fluctuationfluctuation=
AnimalSpeciesanimalSpecies=AnimalSpecies.builder()
Trang 45->newDataNotFoundException("Khôngtìmthấyloạib i ế n đ ộ n g v ớ i i d = " +i d ) ) ;}
3.2.7 Thốngkêtheotháng/quý/năm
publicL o n g g e t M o n t h Q u a n t i t y O f F a c i l i t i e s ( Stringn a m e , i n t m o n t h , i n t y ea r ){Y e a r M o n t h yearMonth = YearMonth.of(year, month);
intd a y= yearMonth.lengthOfMonth();
LocalDatel o c a l D a t e = L o c a l D a t e o f ( y e a r , m o n t h ,d a y ) ;Dated a t e =