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
Giớithiệuchung
Bàitoánsửdụngphần mềmquảnlý→quảnlýtàinguyênnhưcsdxgiốngcâytrông,cơ sở sản xuất gỗ, cơ sở lưu trữ động vật → kiểm soát số lượng, thống kê, so sánh,….
Cáchoạtđộngtrongkhuônkhổđềtài
Nhữngcáclàmhiệnnay
Cáccôngcụđượcsửdụngtrongđềtài
Môhìnhclient-server
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 đó.
Trongmô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. Ưuđiểmcủamôhình:
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ức truyềnthông.Giaothứcchuẩnnàycũnggiúpcácnhàsảnxuấttíchhợplênnhiều sản phẩm khá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áy tí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ầu duy 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ập từ 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 địa lý(GIS).
Vấnđề bảomậtdữliệuthôngtinđôikhicònchưađượcan toàndophảitrao đổi dữ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ảo mậ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ấy khi đ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 khiểnbởitrìnhduyệtmáytínhcủata. Đâ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.
Back-end:JavavàSpringFramework
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
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.
SpringFrameworkđượcpháttriểnvàonăm2003bởiRodJohnson.Đâylàmộttrongnhững mãnguồnmởđượcxâydựngdựatrênngônngữlậptrìnhJava.Đếnnay,Springđượchàng 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ột cá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 động trong 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 đã được xácđịnhrõràngđểpháttriểnứngdụngtrongJava.Nóidễhiểuhơn,Springxửlýcơsởhạ tầng để bạn tậ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.
Front-end:HTML,CSS,JavascriptvàVuejs
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… vàHTMLkhôngphảilàngônngữlậptrình.
MộttàiliệuHTMLđượchìnhthànhbởicácphầntửHTML(HTML Elements)đượcquy định bằng cá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ụ)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à đóng văn bản
và
:Nhưngmộtsốthẻđặc biệtlạikhôngcóthẻđóngvàdữliệuđượckhaibáosẽnằmtrong các thuộc tính (ví dụ như thẻ).
ChađẻcủaHTMLlàTimBerners-Lee,cũnglàngườikhaisinhraWorldWideWebvà chủ tịch củaWorld Wide Web Consortium(W3C – tổ chức thiết lập ra các chuẩn trên môi trường Internet) Các thiết lập và cấu trúc HTML được vận hành và phát triển bởi World Wide Web Consortium (W3C).
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
12 cá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ảng củasite)vàCSSđịnhhìnhphongcách(tấtcảnhữnggìtạonêngiaodiệnwebsite),chúng là không thể tách rời.
GọitắtlàVue(phátâmlà/vjuː/,giốngnhưviewtrongtiếngAnh),Vue.jslà 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ích hợ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àng nhu cầu xây dựng những ứng dụng một trang (SPA - Single-Page
Cơsởdữliệu vàhệquảntrịcơsởdữliệu
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.
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ữ cảnh),sơđồFHD,sơđồERD.
DFD(DataFlowDiagram)
DFDmứcngữcảnh
DFDmứcđỉnh
DFDmứcdướiđỉnh
2.1.3.4 Chứcnăng 4: Quản lý cơ sở sảnxuất
Hình 2.8 DFD quản lý hệ thống
FHD(FunctionHierarchyDiagram)
Hình2.13Sơđồ Báo cáo thốngkê
Hình2.16Sơđồ quản lísản xuấtgỗ
ERD(EntityRelationDiagram)
Kếtluận
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.
Sau 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ển dữ 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
Thiếtkếcơsởdữliệu
Cácthựcthểvàthuộctính
Administrations code,name,surbordinate,administrativeLevel
Users username, 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 , o t p , otpGeneratedTime,administration
Facilities code,name,establishmentDate,capacity,isActive, facilitiesType,adminstration,operationType
AnimalSpecies name,animalType,image,mainFood,mainDisease, fluctuation
ProductionType id,woodType,image,capacity
PlantSeed name , type , image , soilType , mainPest , harvestingPeriod,plantSeason
Statistics id,unit,quantity,date,aggregates
Aggregates rowId,isActice,facilities ,plantSeed, animalSpecies
AccessHistory id,type,decription,username
Từđiểndữliệuphaphântích
Cấpđộhànhchính AdministrativeLevels Lưutrữtênvàcáccấpcủacấpđộ hànhchính Hànhchính Administrations Lưutrữtên,cơsởtrựcthuộc,cấp độhànhchínhcủacơsởhànhchính
Ngườidùng Users Lưu trữ các thông tin cơ bản , tên tài khoản , mật khẩu , email , vai tròvàcơsởhành chính củangười dùng
Cơsở Facilities Lưutrữcácthôngtincơbản,loại cơsở,sứcchứa,cơsởhànhchính của cơ sở
Tọađộ Coordinates Lưutrữkinhđộ,vĩđộcủatọađộ vàcơsởcó tọađộđó Loạibiếnđộng Fluctuation Lưutrữtênvàđặctrưng củaloại biếnđộng Loàiđộngvật AnimalSpecies Lưutrữcácthôngtincơbản,ảnh, loạibiếnđộngcủaloàiđộngvật Loạihìnhsảnxuất ProductionType Lưutrữcácthôngtincơbảnvàảnh củaloạihìnhsảnxuất Giốngcâytrồng PlantSeed Lưutrữcácthôngtincơbảnvàảnh củagiống câytrồng
Sốliệuthốngkê Statistics Lưutrữđơnvị,sốlượngvàngày củasốliệu thốngkê Nhómthốngkê Aggregates Môtảquanhệgiữacơsởvớigiống cây trồng, loài động vật và loại hìnhsảnxuất
Lịchsửtruycập AccessHistory Lưutrữlịchsửtruy cập củangười dùng
Bảngdatabase
Phathiếtkế
HC – cấp độ hành chính)
Giátrịmẫ u Môtả Ghichú id INT 1 MãCĐ
NOT NULL name VARCHAR 100 Tỉnh Tên
Giátrịmẫ u Môtả Ghichú code VARCHAR 50 HC2 MãHC NOT
NULL name VARCHAR 100 HàNam TênHC NOT
NULL surbordinate VARCHAR 50 HC1 Trựcth uộc
NOT NULL administrative_level INT 1 CấpđộHC NOT
Giátrịmẫ u Môtả Ghichú id INT 1 MãVT NOT
NULL name VARCHAR 100 admin TênVT NOT
Chiều dài Giátrịmẫu Môtả Ghi chú username VARCHAR 100 admin Tênđăngn hập
NOT NULL first_name VARCHAR 100 Nguyễn Họ NOT
NULL last_name VARCHAR 100 VănA Tên NOT
NULL password VARCHAR 200 Abc123 Mậtkhẩu NOT
NULL avatar VARCHAR 150 (link_avatar) Avatar NULL birth_date DATE 2023:01:15 Ngàysinh NULL address VARCHAR 100 HàNam Địachỉ NULL is_active TINYINT 1 1 Trạngthái hđ
NOT NULL role INT 1 VaitròcủaN
NOT NULL otp VARCHAR 20 123456 MãOTP NULL otp_generated_time DATE 2023:01:30
Thờigian tạo OTP mã NULL administration_code VARCHAR 50 HC1 Mãhànhc hính
Bảng3.7Cácthuộctínhbảngfacility_types(LCS–loạicơsở)
Môtả Ghichú id INT 1 MãLCS NOT
NULL name VARCHAR 100 Lưu trữ độngvật TênLCS NOT
Giátrịmẫu Môtả Ghi chú code VARCHAR 50 CS1 MãCS NOT
NULL name VARCHAR 100 Cơ sở1 TênCS NOT
NULL establishment_date DATE 2003:01:30 Ngàythàn hlập
NOT NULL capacity INT 10000 Sứcchứa NOT
NULL is_active TINYINT 1 1 Trạng thái
NOT NULL type INT 1 Loạicơ sở NOT
NULL administration_code VARCHAR 50 HC1 Mãhànhch ính
NOT NULL operation_type INT 1 Hình thứchđ NULL
Bảng3.9Cácthuộctínhbảngoperation_types(HTHĐ–hìnhthứchoạtđộng)
Môtả Ghichú id INT 1 MãHTHĐ NOT
NULL name VARCHAR 50 Dândụng Tên
NULL characteristics VARCHAR 100 Dândụng Đặctrưng NOT
Thuộctính Kiểudữliệu Chiềudài Giátrịmẫu Môtả Ghichú lat DEMICAL 1874.667 Vĩđộ NOT
NULL lng DEMICAL 869.352 Kinhđộ NOT
NULL facility_code VARCHAR 50 CS1 Mã cơ sở củatọađộ
Thuộctính Kiểudữliệu Chiềudài Giátrịmẫu Môtả Ghichú
Name VARCHAR 50 Theochukỳ TênLBĐ NOT
NULL Characteristics VARCHAR 100 BĐtheo chu kỳ Đặctrưng NOT
Bảng3.12Cácthuộctínhbảnganimal_species(LĐV–loàiđộngvật)
Chiềudài Giátrịmẫu Môtả Ghichú name VARCHAR 50 Hổ TênLĐV NOT
NULL type VARCHAR 50 ĐVănthịt KiểuLĐV NOT
NULL main_food VARCHAR 50 Thịt Thứcănchín h
NOT NULL main_disease VARCHAR 45 Sốt Bệnh chính
NOT NULL image VARCHAR 100 (link_image) Ảnh NULL fluctuation INT 1 Loạibiếnđộ ng
Bảng3.13Cácthuộctínhbảngproduction_type(LHSX–loạihìnhsảnxuất)
Chiềudài Giátrịmẫu Môtả Ghichú id INT 1 MãLHSX NOT
NULL wood_type VARCHAR 50 Gỗlim Loạigỗ NOT
NULL capacity INT 1000 Khảnăng sản xuất
NOT NULL image VARCHAR 100 (link_image) Ảnh NULL
Bảng3.14Cácthuộctínhbảngplant_seed(GCT–giốngcâytrồng)
Thuộctính Kiểudữliệu Chiều dài Giátrịmẫu Môtả Ghi chú name VARCHAR 50 Nhãn Tên
NOT NULL type VARCHAR 50 Câyănquả Kiểu
NOT NULL soil_type VARCHAR 59 Đấtmàumỡ Loạiđất NOT
NULL main_pest VARCHAR 100 Bọxít
NOT NULL harvesting_period VARCHAR 150 1tháng
NOT NULL planting_season VARCHAR 50 Mùaxuân Mùavụ NOT
NULL image VARCHAR 100 (link_image) Ảnh NULL
Thuộctính Kiểudữliệu Chiềudài Giátrịmẫu Môtả Ghichú id INT 1 MãSLTK NOT
NULL unit VARCHAR 50 Cây Đơnvị NOT
NULL quantity INT 50 Sốlượng NOT
NULL date DATE 2013:05:15 Ngày thốngkê NOT
NULL aggregates_id INT 1 Nhóm thốngkê NOT
Thuộctính Kiểudữ liệu Chiềudài Giátrị mẫu Môtả Ghichú row_id INT 1 MãNTK NOT
NULL is_active TINYINT 1 0 Trạngthái hđ
NOT NULL facility_code VARCHAR 50 CS1 Mã cơsở NOT
NULL seed_name VARCHAR 50 Nhãn Têngiống câytrổng
NOT NULL animal_name VARCHAR 50 Hổ Tênloài độngvật
NOT NULL production_type VARCHAR 50 Gỗlim Loạihình sảnxuất
Bảng3.17C á c thuộctínhaccess_history(LSTC–lịchsửtruycập)
Thuộctính Kiểudữ liệu Chiềudài Giátrị mẫu Môtả Ghichú id INT 1 MãLSTC NOT
NULL type VARCHAR 100 KiểuLSTC NOT
NULL description VARCHAR 200 Chitiết NOT
NULL username VARCHAR 100 admin Têntài khoản
Phầncode
Đơnvịhànhchính-Administration
{Administrationa d m i n i s t r a t i o n = t h i s administratio nRepository. findById(code).orElseThrow(()-> newDataNotFoundException("Notfound administrationw i t h c o d e = " + c o d e ) ) ; returnadministration;
{ Administrationa d m i n i s t r a t i o n = this.administrationRepository.findByName(name)
orElseThrow(()->newDataNotFoundException("Not found administration with name: "+ n a m e ) ) ; returnadministration;}
ListretrieveAllSubAdministr ations(Stringc o d e ) {
orElseThrow(()->newDataNotFoundException("Not found administrationw i t h c o d e = " + c o d e ) ) ; res.add(newAdministrationHierarchyResponse(tmp));fi ndChildren(res); returnres;
= administrationDTO.getAdministrativeLevelName(); if(! administration.getAdministrativeLevel().getName().equals(administrativeLevelNa m e ) ) {
findByName(administrationDTO.getAdministrativeLevelName()) orElseThrow(()->newDataNotFoundException(
+ administrationDTO.getAdministrativeLevelName())); if(administration.getAdministrativeLevel().getLev el()==1
&&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 v 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 ( ) ) { thrownew InvalidDataException("Đơn vịhành chính cấp Tỉnh không thể đổi c ấ p " );
} if(administration.getAdministrativeLevel().getLev el()==2
"ĐơnvịhànhchínhcấpPhường,Thịtrấn,Xãchỉcóthể đổic h o nhau");
= = n u l l ? "":administrationDTO.getSubordinateCode(); if(administration.getSubordinate()!=null&&
!administration.getSubordinate().getCode().equals(subordinate)){ if(administration.getAdministrativeLevel().getLevel()==1) {thrown e w InvalidDataException(
"Đơnvịhànhchính cấ pTỉnh khôngthể trựcthuộcđơnvị hànhchínhkhác");
"Khôngtìmthấyđơnvịhànhchínhvớimã:"+ subordinate)); if(administration.getAdministrativeLevel().getLevel()==2){if (subordinateAdministration.getAdministrativeLevel().getLevel()! = 1 )
"Đơn vị hành chính cấp Thành phố, Huyện chỉ có thểtrựcthuộcđơnvịhànhchínhcấptỉnh");
} if(administration.getAdministrativeLevel().getLevel()==3){if (subordinateAdministration.getAdministrativeLevel().getLevel()! = 3 )
"Đơ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");
} administration.setName(administrationDTO.getName());administrati onministrationRepository.save(administration);returnadminis tration;
Ngườidùng–User
//Kiểmtrakíchthướcfile if(avatarFile.getSize()>10*1024*1024){//kíchthướcfilephải
newDataNotFoundException("Usernamehoặcmậtkhẩu không chính xác")); if(user.isActive() !=true||
!user.getPassword().equals(loginDTO.getPassword())){ thrownewInvalidDataException("Usernamehoặcmậtkhẩukhôngchính xác");
{Useru s e r = this.userRepository.findByEmail(resetPasswordDTO.getEmail())
Stringotp =otpUtil.generateOtp(); user.setOtp(otp);user.setOtpGeneratedTime(LocalDat eTime.now());this.userRepository.save(user);this.e mailUtil.sendOtpEmail(user.getUsername(), resetPasswordDTO.getEmail(),otp);
Useru s e r = this.userRepository.findByEmail(verifyOtpDTO.getEmail())
Stringotp =user.getOtp(); if(otp.equals(verifyOtpDTO.getOtp())
&&Duration.between(LocalDateTime.now(),u ser.getOtpGeneratedTime()).toSeconds() newDataNotFoundException("cơ sở lưu trữnày khôngc ó l o à i đ ộ n g v ậ t n à o " )); returnlistAnimalSpecies;
Loạibiếnđộng–Fluctuation
Thốngkêtheotháng/quý/năm
Hàmhỗtrợthốngkê 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 e a r ) { Y e a r M o n t h yearMonth = YearMonth.of(year, month); intd a y = yearMonth.lengthOfMonth();
D a t e v a l u e O f ( l o c a l D a t e ) ; returnthis.asfAsRelationshipRepository.getMonthQuantityOfFacilities(name, date)
"Không tồntạidữliệucủa"+name +"trong tháng"+ month +"năm"+ year));
} 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 , L o c a l D a t e d a t e ) { LocalDatedate2=this.caculateDate(date);
= Date.valueOf(date2);try{ longquantity
=this.asfAsRelationshipRepository.getMonthQuantityOfFacilitiesNew(name,date
= Date.valueOf(date2);try{ longquantity
=this.asfAsRelationshipRepository.getMonthQuantityOfFacilitiesNew(name,date
ListfacilitiesQuantities=this.asfAsRelationshipRepos itory
selectAllQuantityOfFacilities(Date.valueOf(date)); if(facilitiesQuantities.isEmpty()){ thrownewDataNotFoundException(
"Dữ liệu trongtháng "+ date.getMonthValue() + " năm
Lista l l D a t a = n e w A r r a y L i s t (); beginDate =t h i s caculateDate(beginDate); endDate= t h i s caculateDate(endDate);i f ( e n d D a t e i s A f t e r ( L o c a l
D a t e n o w ( ) ) ) { endDate= LocalDate.now(); while( b e g i n D a t e i s B e f o r e ( e n d D a t e p l u s D a y s ( 1))) {Listd a t a = this.getQuantityOfFacilitiesBeforeTime(beginDate);
= FacilitiesQuantityInMoth.builder().date(beginDate).data(data).build(); allData.add(tmp); beginDate = beginDate.plusMonths(1); beginDate =t h i s caculateDate(beginDate);
} Listdata=this.getQuantityOfFacilitiesBeforeTime(en dDate);
= FacilitiesQuantityInMoth.builder().date(endDate).data(data).build(); allData.add(tmp);
}e l s e { while( b e g i n D a t e i s B e f o r e ( e n d D a t e p l u s D a y s ( 1))) {Listd a t a = this.getQuantityOfFacilitiesBeforeTime(beginDate);
= FacilitiesQuantityInMoth.builder().date(beginDate).data(data).build(); allData.add(tmp); beginDate = beginDate.plusMonths(1); beginDate =t h i s caculateDate(beginDate);
Stringc h a n g e T o Q u a r t e r ( LocalDated a t e ) { intmonth = date.getMonthValue(); inty e a r = date.getYear(); return(month>=1&&month=4&&month=7&&month
{ LocalDatef i r s t D a y O f Q u a r t e r = date.with(date.getMonth().firstMonthOfQuarter())
with(TemporalAdjusters.lastDayOfMonth());re turnlastDayOfQuarter;
{ LocalDatef i r s t D a y O f Q u a r t e r = date.with(date.getMonth().firstMonthOfQuarter())
with(TemporalAdjusters.firstDayOfMonth());re turnfirstDayOfQuarter;
findAllFacilitiesNameBeforeTime(Date.valueOf(lastDayOfQuarter) ); for( Stringa s f : l i s t A S F )
{ longsum=0; inti=0; for(intj=1;jnewDataNotFoundException("cơ sở sản xuất này không cóg i ố n g c â y t r ồ n g n à o " )); returnplantSeeds;
Cơsởsảnxuấtchếbiếngỗ-WoodFacilities
Thêm1cơsởchếbiếngỗ publicW o o d F a c i l i t i e s a d d W o o d F a c i l i t i e s ( WoodFacilitiesDTOw o o d F a c i l i t i e s D T O , Stringcode){
WoodFacilitiesw o o d Fa ci li t i e s = n e w WoodFacilities();
=this.woodFacilitiesRepository.findById(code); if(tmp1.isPresent()){ thrownewDataAlreadyExistsException( "Đãcócơsởsảnxuấtgỗvới code="+code);
Optionaltmp2=this.woodFacilitiesRepository
findByName(woodFacilitiesDTO.getName());i f(tmp2.isPresent()){ thrownewDataAlreadyExistsException(
"Đã có cơ sở sản xuấtgỗ với tên
retrieveAdministrationByCode(woodFacilitiesDTO.getAdminstr ationCode()); woodFacilities.setAdministration(administration);
= this.getOperationFormByName(woodFacilitiesDTO.getOperationFormName()); woodFacilities.setCode(code);woodFacilities.setName(woodFacilitiesDTO.get Name()); woodFacilities.setCapacity(woodFacilitiesDTO.getCapacity());woodFacilities.se tDate(woodFacilitiesDTO.getDate());woodFacilities.setOperationForm(opera tionForm);
WoodFacilitiesw o o d F a c i l i t i e s = t h i s getWoodFacilitiesByCode(cod e);this.woodFacilitiesRepository.deleteById(woodFacilities.getCode());
Loạihìnhsảnxuất–ProductionType
Thêm1loạihìnhsảnxuất publicProductionTypeaddProductionType(ProductionTypeDTOproductionTypeDTO,Multip artFileimageFile){
=this.productionTypeRepository.findById(productionTypeDTO.getWoodType()); if(tmp.isPresent()){ thrownewDataAlreadyExistsException(
woodType(productionTypeDTO.getWoodType()) capacity(productionTypeDTO.getCapacity()) image(image)
ProductionTypeproductionType=this.getProductionTypeByWoodName(name);thi s.productionTypeRepository.deleteById(productionType.getWoodType());}
52 Truyxuấttoànbộloạihìnhsảnxuấttrong1cơsởchếbiếngỗ publicL i s t g e t A l l P r o d u c t i o n T y p e B y F a c i l i t i e s C o d e ( Stringco de)
ListproductionTypes=this.wfPtRelationshipRepository
selectAllProductionTypeByFacilitiesCode(code) orElseThrow(()->newDataNotFoundException("cơ sở sản xuất nàyk h ô n g c ó l o ạ i h ì n h s ả n x u ấ t n à o " )); returnproductionTypes;
Hìnhthứchoạtđộng–OperationForm
Optionaltmp=this.operationFormRepository.findById(operatio nFormDTO.getName()); if(tmp.isPresent()){ thrownewDataAlreadyExistsException(
name(operationFormDTO.getName()) description(operationFormDTO.getDescription()) build(); returnoperationFormRepository.save(operationForm);
Xóa1hìnhthứchoạtđộng publicvoiddeleteOperationFormByName(Stringname){try{
OperationFormoperationForm=this.getOperationFormByName(name);this.o perationFormRepository.deleteById(operationForm.getName());
}c a t c h ( Exceptione ) { thrownewInvalidDataException("Hình thức hoạt độngnày vẫn đang được sử dụngt r o n g c á c c ơ s ở " );}}
Giaodiệntrựcquan
Giaodiệnđăngnhập
Hình 3.4 Trang chủ, logo dự án
Hình 3.5 Quản lý hành chínhHình3-4Trangchủ,logodựán
Giaodiệnchính
Hình 3.6 Giao diện các loại động vật
Hình 3.7 Giao diện cơ sơ lưu trữ động vật
Giaodiệnquảnlýđộngvật
Hình 3.8 Giao diện biểu đồ thống kê tổng số lượng động vật tại các cơ sở
Hình 3.9 Giao diện các Loại cây trồng
Hình 3.10 Giao diện cơ sở sản xuất giống cây trồng
Giaodiệnquảnlýgiốngcâytrồng
Hình 3.11 Giao diện các Loại hình sản xuất gỗ
Hình 3.12 Giao diện các Hình thức hoạt động cơ sở sản xuất gỗ
Giaodiệnquảnlýcơsởsảnxuấtgỗ
Hình 3.14 Giao diện Biểu đồ tổng số lượng gỗ lưu trữ tại các cơ sở
Hình 3.13 Giao diện các Cơ sở sản xuất gỗ
Hình 3.15 Giao diện Bản đồ phân bố của các cơ sở
GiaodiệnBảnđồ
Hình 3.16 Giao diện tài khoản người dùng
Hình 3.17 Giao diện quản lý Users
Kếtluậnchung
Nhưvậy,ởphần3này, côngviệcđãđượctriểnkhaivàhoànthành.Kếtquảchorađược là một trang web với đầy đủ các tính năng như đã đưa ra ở pha phân tích thiết kế.
Trong môn học Kĩ thuật phần mêm, nhóm đã xây dựng được một hệ thống quản lý tài nguyên thiên nhiên Thông qua việc nghiên cứu phân tích, phát triển và triển khai hệ thống,nhómđãcó kiếnthứcvềcácbướcphân tíchvấnđề;cácphathiếtkế,triểnkhaihệ thống; có khả năng sử dụng những công cụ lập trình hiện nay như JavaScript, Java, HTML, CSS, Spring Framework Ngoài ra là kĩ năng quản lý dự án mềm, teamwork, cáchviếtbáocáo,thuyếttrình.
Hệthốngđượcxâydựngđãđápứngđượchầuhếtcácyêucầuđặtra banđầu.Hệ thống đã được đặt thử nghiệm tại địa chỉ:tại đây(Liên hệ với nhóm để được cấp tài khoản) Tuy nhiên hệ thống còn một vài hạn chế như sau:
Giaodiệnhệthốngcònđơngiản,chưathểsosánhvớinhữngtrangwebđược thực hiện bởi các công ty outsource có tiếng