wiki:AdvancedApplicationDevelopment

Version 3 (modified by 211228, 2 days ago) ( diff )

--

Напреден апликативен развој

Имплементирани се сите сценарија од фаза 3 со дополнителни подобрувања како:
Подобрување на начинот на избор на доделување на соба од страна на вработениот доколку студентот нема посебно барање за соба сега не е по случаен избор туку вработениот има уреден преглед до капацитетот на блоковите, спратовите, и зафатеност на соби ( дали се резервирани или не ) и врз основа на тоа го сместува студентот. За ова подобрување е додадена само една нова колона во табелата Block ( total_rooms ) која ја искористив за пресметка на капацитет по спратовите во блокот

Имплементирана е нова функционалност која не е дефинирана во фаза 3 а тоа е можност за барање на прекин на престој во собата од страна на студентот.
За оваа функционалност се додадени две нови колони во StudentTookRoom (end_stay_requested од тип boolean и requested_end_date од тип date)

Тригери

Автоматско зголемување на капацитет на собата доколку има внесено краен датум на собата во која престојувал.

CREATE OR REPLACE FUNCTION update_room_on_end_stay()
RETURNS TRIGGER AS $$
BEGIN
    IF NEW.end_date IS NOT NULL THEN
        UPDATE project.room
        SET project.capacity = capacity + 1,
            project.is_available = TRUE
        WHERE project.room_number = NEW.room_num
          AND project.block_id = NEW.block_id::char(1);
    END IF;

    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_update_room_on_end_stay
AFTER UPDATE OF end_date
ON project.studenttookroom
FOR EACH ROW
EXECUTE FUNCTION update_room_on_end_stay();

Автоматско менување на статусот на собата доколку некој од прегледаните документи се со статус Declined

CREATE OR REPLACE FUNCTION update_room_request_on_doc_decline()
RETURNS TRIGGER AS $$
BEGIN
    IF NEW.d_status = 'Declined' THEN
        UPDATE roomrequest
        SET status = 'Declined'
        WHERE student_id = NEW.student_id
    END IF;

    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_update_room_request
AFTER UPDATE OF d_status
ON dorm_document
FOR EACH ROW
EXECUTE FUNCTION update_room_request_on_doc_decline();

Трансакции

Апликацијата користи трансакции во следните два фајла:

За доделување на соба на студентот src/main/java/org/example/dormallocationsystem/Service/Impl/EmployeeServiceImpl.java

За плаќање на станарината за месец. src/main/java/org/example/dormallocationsystem/Service/Impl/PaymentServiceImpl.java

Индекси

Бидејќи PostgresSQL има систем за креирање на индекси самостојно, во некои случаи каде одредени прашалници беа користени по често немаше потреба да креирам индекс, но во следните два случаеви PostgresSQL користеше секвенцијален scan (односно пребаруваше низ целата табела) во следниве два прашалниците кои се често употребуваат и исто така може значително да ја влијаат на перформансите доколку има повеќе податоци во нив:

Случај 1.

Употребуван прашалник за преглед на документите на студентот:

select *
from project.dorm_document
where student_id = [id];

Анализа пред креиран индекс

Креиран индекс:

create index idx_dorm_document_student_id on project.dorm_document(student_id);

Анализа после креиран индекс

Случај 2.

Употребуван прашалник за преглед на уплатената станарина од страна на студент

select distinct s.u_id, s.faculty_name, s.gender, s.is_exempt, s.year_of_studies
from project.student s
where exists (
    select 1
    from project.payment p
    where s.u_id = p.student_id
);

Анализа пред креиран индекс

Креиран индекс:

create index idx_payment_student_id on project.payment(student_id);

Анализа после креиран индекс

Напредни прашалници

Имплементирани се прашалниците за

Бројка на соби кои поради претходна зафатеност не се доделени на студентите кои ги побарале
Извештај за блокот (слободни соби и број на барања за соба во секој од блоковите)

Истите се наоѓаат во src/main/java/org/example/dormallocationsystem/Web/EmployeeController.java фајлот

    @GetMapping("/dashboard")
    public String employeeDashboard(@RequestParam Long employeeId, Model model) {
        List<Student> studentsAddedToRoom = studentService.getStudentsAddedToRoom();
        List<Student> studentsThatNeedToBeReviewed = studentService.getStudentsWithNotReviewedDocs();
        List<Studenttookroom> endStayRequests = studentTookRoomService.getPendingEndStayRequests();
        List<BlockRoomReportDTO> blockReport = blockService.getBlockRoomReport();
        List<RoomMismatchDTO> roomMismatches = roomRequestService.findRoomMismatches();

        model.addAttribute("employeeId", employeeId);
        model.addAttribute("addedToRoomStudents", studentsAddedToRoom);
        model.addAttribute("studentsToReview", studentsThatNeedToBeReviewed);
        model.addAttribute("endStayRequests", endStayRequests);
        model.addAttribute("blockReport", blockReport);
        model.addAttribute("roomMismatches", roomMismatches);

        return "employee-dashboard";
    }

Attachments (5)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.