Các Procedure Trigger sẽ sử dụng trong projectThêm dự án mới Stored Procedure Create Procedure sp_insert_duanin idDuan int, in ngayBatdau DATE, in ngayKetthuc DATE, in hanHoanthanh DATE
Trang 1Trường Đại học xây dựng Hà Nội Khoa: Công nghệ thông tin
GV hướng dẫn: Nguyễn Đình Anh
Báo cáo phân tích đồ án buổi 3
Trang 2Phân công công việc
Nguyễn Trọng Huấn
87063 Nhân Viên, phân việc, công việc
Đồng Xuân Luyện
Thay đổi trong csdl
Thêm bảng phân việc để thể hiện mối quan hệ giữa nhân viên và công việc đồng thời cũng là
cơ sở để đánh giá mức độ trong nhân viên Loại bỏ tiêu chí nhiệt tình giờ đây đánh giá nhân viên sẽ thông qua hai tiêu chí: tiến độ hoàn thành và chất lượng công việc
Loại bỏ bảng đánh giá giờ đây tất cả đánh giá đều được sử dụng thông qua bảng phân việc
Ở bảng công việc thêm trường trangthai để xác định công việc này là dành cho dev hay tester
Mô tả mqh giữa nhân viên công việc và dự án
Trang 4Các Procedure Trigger sẽ sử dụng trong project
Thêm
dự án
mới
Stored Procedure Create Procedure sp_insert_duan(in idDuan int, in ngayBatdau DATE, in ngayKetthuc DATE, in hanHoanthanh
DATE, in moTa VARCHAR, in ghiChu VARCHAR, in idnhanvienLead int, in idDoitac int)
BeginIf Exists(Select iddoitac from doitac where iddoitac = idDoitac) Then
If Exists(Select idnhanvien from nhavien where idnhanvien = idnhanvienlead) Then
Begin Insert into duan
(idduan,ngaybatdau,ngayketthuc,ngayhoanthanh,mota,ghichu,idnhanvienlead)
values (idDuan,ngayBatdau,ngayKetthuc,hanHoanthanh,moTa, ghiChu
, idnhanvienLead );
Insert into cungcap(iddoitac,idduan) values (idDoitac,idDuan);
EndElseSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Mã NV không hợp lệ !';
End if;
ElseSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Mã ĐT không hợp lệ !';
End if;
Trang 5Cập
nhập
dự án
Stored Procedure Create Procedure sp_update_duan(in idDuan int, in
ngayBatdau DATE, in ngayKetthuc DATE, in hanHoanthanh DATE, in moTa VARCHAR, in ghiChu VARCHAR, in idnhanvienLead int)
Begin
If Exists(Select idnhanvien from nhavien where idnhanvien = idnhanvienlead) Then
Begin Update doitac Set
idduan=idDuan,ngaybatdau=ngayBatdau,ngayketthuc=ngayKetthuc,ngayhoanthanh=hanHoanthanh,mota=moTa,ghichu=ghiChu ,idnhanvienlead=idnhanvienLead
where idduan = idDuan;
End;
ElseSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Mã
Delete from doitac where idduan=idDuan;
Delete from cung cap where idduan = idDuan;
End;
Trang 6Stored Procedure Create Procedure sp_duan_maduan(in idDuan int)Begin
If Exists(Select idduan from duan where idduan=idDuan) Then
Select
idduan,ngaybatdau,ngayketthuc,ngayhoanthanh,mota,ghichu,idnhanvienlead,iddoitac
From duan inner join cungcap on duan.idduan = cungcap.idduan Where duan.idduan=idDuan ;
Else SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT =
Stored Procedure Create Procedure sp_duan_madoitac(in idDoitac int)Begin
If Exists(Select iddoitac from doitac where iddoitac=idDoitac) Then
Select
idduan,ngaybatdau,ngayketthuc,ngayhoanthanh,mota,ghichu,idnhanvienlead,iddoitac
From duan inner join cungcap on duan.idduan =
cungcap.idduan Where iddoitac=idDoitac ; Else
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT =
'Unknown idoitac!!!';
End if;
End;
Trang 7Stored Procedure Create Procedure sp_duan_getAll()Begin
Select * From duan inner join cungcap on duan.idduan = cungcap.idduan
Stored Procedure Create Procedure sp_doitac_getAll()Begin
Select iddoitac, tennguoilienhe, diachi, sdtfrom doitac;
where iddoitac=idDoiTac;
End
Xóa
đối tác Stored Procedure Create Procedure sp_delete_doitac(in idDoiTac int)Begin
Delete from doitac wherer iddoitac=idDoiTac;
End
Trang 8Stored Procedure Create Procedure sp_doitac_byid(in idDoiTac int)Begin
If Exists(Select iddoitac from nhdoitac where iddoitac=idDoiTac) Then
Select iddoitac, tennguoilienhe,sdt,diachi
From doitac Where iddoitac=idDoiTac;
Else SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT =
'Unknown iddoitac!!!';
End if;
End;
Trang 9Phân việc
cho Dev Stored Procedure DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE
`sp_phanviec_dev_byIdNhanVienIdViec`(in idnv int,in idcv int)
End;
End if;
END ;;
DELIMITER ;
Trang 10Phân việc
cho test Stored Procedure DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE
`sp_phanviec_test_byIdNhanVienIdViec`(in idnv int,in idcv int, in numTest int)
End;
End if;
END ;;
Trang 11CREATE DEFINER=`root`@`localhost` PROCEDURE
`sp_select_congviec_byduan`(in idda int)BEGIN
If exists(select idduan from DuAn where idduan = idda) Then
Begin Select * FROM CongViec where idduan = idda;
end;
Else SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Du an khong ton tai';
end if;
END ;;
DELIMITER ;
Trang 12CREATE DEFINER=`root`@`localhost` PROCEDURE
`sp_select_congviec_byidnhanvienlead`(in idnvlead int)BEGIN
Declare maduan int;
if (idnvlead <2) Then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'nhan vien khong co quyen xem';
ElseBegin Select cv.* From Congviec cv
inner join duan da on cv.idduan = da.idduan where da.idnhanvien_lead = idnvlead;
CREATE DEFINER=`root`@`localhost` PROCEDURE
`sp_select_phanviec_by_idnhanvien`(in idnv int)BEGIN
select pv.* from phanviec pv
right outer join congviec cv on pv.idcongviec = cv.idcongviec
where pv.idnhanvien = idnv;
END ;;
DELIMITER ;
Trang 13CREATE DEFINER=`root`@`localhost` PROCEDURE
`sp_select_phanviec_danglam_by_idnhanvien`(in idnv int)BEGIN
select pv.* from phanviec pv
right outer join congviec cv on pv.idcongviec = cv.idcongviec
where pv.idnhanvien = idnv and cv.trangthai = 1;END ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE
`sp_submit_dev`(in idcv int)BEGIN
update phanviec pv set pv.LastSubmitTime
= now() where idcongviec = idcv and _role = 0;
END ;;
DELIMITER ;
Trang 14Submit cho
nhân viên
test
Stored Procedure DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE
`sp_submit_test`(in idcv int, in testpass int)BEGIN
declare numTest int;
set numTest = (select totaltest from phanviec whereidcongviec = idcv and _role = 1);
if(testpass > numTest) Then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'khong hop le';
else update phanviec set totalpassed = testpass where idcongviec = idcv and _role = 1;
Trigger CREATE DEFINER=`root`@`localhost` TRIGGER
`tg_after_insert_congviec` AFTER INSERT ON
`phanviec` FOR EACH ROW BEGIN
Declare idcv int;
set idcv = (Select idcongviec From phanviec where idcongviec = new.idcongviec and _role=0);
Update congviec set trangthai = 1 where idcongviec
Trigger CREATE DEFINER=`root`@`localhost` TRIGGER
`tg_after_insert_congviec` AFTER INSERT ON
`phanviec` FOR EACH ROW BEGIN
Declare idcv int;
set idcv = (Select idcongviec From phanviec where
Trang 15đang làm
sàng hoàn
thành
idcongviec = new.idcongviec and _role=0);
Update congviec set trangthai = 1 where idcongviec
in startDate date, in endDate date)begin
declare passed, total int;
set passed = (select sum(totalpassed) from phanviec where LastSubmitTime between
startDate and endDate and idnhanvien = idNV);
set total = (select sum(totaltest) from phanviec where LastSubmitTime between startDate and endDate and idnhanvien = idNV );
select ((passed / total) * 100) as result;end
Login Stored
Procedure CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_login`(in user_id char(50), in
pass_hash char(128))begin
select nhanvien.* from nhanvien inner join login on nhanvien.idnhanvien = login.idnhanvien
where login.user_name = user_id and login.hashed_code = pass_hash;
end
Trang 16Tạo nhóm Stored
Procedure CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_create_nhom`(in idNVLEAD
int, in idDuAn int, in ten_nhom char(100))begin
if (select count(idduan) from duan where idduan = idNVLEAD) = 0 then
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT =
Trang 18Thêm nhân viên
vào nhóm Stored Procedure CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_add_nhanvien_to_nhom`(in
idNV int, in idNhom int)begin
if (select count(idnhom) from nhom where idnhom = idNhom) = 0 then
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'id_not_found_error';
end
Trang 19Xóa nhân viên
khỏi nhóm Stored Procedure CREATE DEFINER=`root`@`localhost` PROCEDURE
`sp_delete_nhanvien_from_nhom`(in idNV int, in idNhom int)
= 1 where idnhanvien = idNV;
Trang 20`sp_hard_delete_nhom_by_duan`(in idDuan int)begin
delete from chitiet nhom where idnhom in (select idnhom from nhom where idduan = idDuan);
delete from nhom where udnhom in (selectidnhom from nhom where idduan = idDuan);end
Đổi tên nhóm Stored
Trang 21Đổi trưởng nhóm
cho nhóm Stored Procedure CREATE DEFINER=`root`@`localhost` PROCEDURE
`sp_change_idnvlead_phongban`(in idphongban_change int, in idnhanvien_new int)stage_1: BEGIN
DECLARE idnhanvien_temp INT DEFAULT 0;
IF (SELECT idnhanvien FROM nhanvien WHERE idnhanvien = idnhanvien_new) IS NULLTHEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'can not find idnhanvien';
LEAVE stage_1;
END IF;
SET FOREIGN_KEY_CHECKS = 0;UPDATE phongban
SET idnhanvienlead = idnhanvien_new;
SET FOREIGN_KEY_CHECKS = 1;END
Tạo phòng ban Stored
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'con_not_find_id_error';
END IF;
insert into phongban (idnhanvienlead, tenphongban, delete_flag) values (idNV, NewName, 0);
Trang 22SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'con_not_find_id_error';
ban Stored Procedure delimiter $$
create procedure sp_change_name_phongban (in idPhongBan int, in NewName char(100))
begin
IF (SELECT idphongban FROM phongban WHERE idphongban = idPhongBan) ISNULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'con_not_find_id_error';
END IF;
update phongban set tenphongban = NewName where idphongban = idPhongBan;end $$