Commit f8495cf7 authored by đinh thị đầm's avatar đinh thị đầm

Merge branch 'master' into dinhdam

parents 76fed51a d87c8887
...@@ -24,14 +24,12 @@ ...@@ -24,14 +24,12 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId> <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> </dependency>
<<<<<<< HEAD
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-security</artifactId>-->
<!-- </dependency>-->
=======
>>>>>>> master <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
...@@ -58,21 +56,7 @@ ...@@ -58,21 +56,7 @@
<artifactId>log4j</artifactId> <artifactId>log4j</artifactId>
<version>1.2.17</version> <version>1.2.17</version>
</dependency> </dependency>
<<<<<<< HEAD
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.security</groupId>-->
<!-- <artifactId>spring-security-test</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
=======
>>>>>>> master
</dependencies> </dependencies>
<build> <build>
......
package com.itsol.quantrivanphong.access.homepage.controller; package com.itsol.quantrivanphong.access.homepage.controller;
import com.itsol.quantrivanphong.access.homepage.business.CatalogiBusiness; import com.itsol.quantrivanphong.access.homepage.business.CatalogiBusiness;
......
package com.itsol.quantrivanphong.access.register.bussiness;
import com.itsol.quantrivanphong.access.register.dto.EmailDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
@Component
public class EmailBussiness {
@Autowired
private JavaMailSender sender;
public boolean sendEmail(EmailDTO emailDTO) {
boolean check;
// MimeMessage message = sender.createMimeMessage();
// MimeMessageHelper helper = new MimeMessageHelper(message);
//
//
// try {
// helper.setTo(emailDTO.getRecipientEmail());
// helper.setText(emailDTO.getMessage(),"text/html");
// helper.setSubject(emailDTO.getSubject());
// sender.send(message);
// check = true;
// } catch (Exception e) {
// e.printStackTrace();
// check = false;
// }
// Recipient's email ID needs to be mentioned.
String to = emailDTO.getRecipientEmail();
// Sender's email ID needs to be mentioned
String from = "hieunv2496@gmail.com";
final String username = "hieunv2496@gmail.com";//change accordingly
final String password = "anhieu1996";//change accordingly
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
// Get the Session object.
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create license default MimeMessage object.
Message message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
// Set Subject: header field
message.setSubject(emailDTO.getSubject());
// Send the actual HTML message, as big as you like
message.setContent(
emailDTO.getMessage(),
"text/html");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return true;
}
}
package com.itsol.quantrivanphong.access.register.bussiness;
import com.itsol.quantrivanphong.access.register.dto.EmailDTO;
import com.itsol.quantrivanphong.access.register.dto.VerifyDTO;
import com.itsol.quantrivanphong.access.register.repository.RegisterRepository;
import com.itsol.quantrivanphong.model.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.nio.charset.Charset;
import java.util.Random;
@Service
public class GeneratePasswordBussiness {
@Autowired
private RegisterRepository registerRepository;
@Autowired
private EmailBussiness emailBussiness;
public String getAlphaNumericString(){
// length is bounded by 256 Character
byte[] array = new byte[256];
new Random().nextBytes(array);
int n = 8;
String randomString = new String(array, Charset.forName("UTF-8"));
// Create license StringBuffer to store the result
StringBuffer pass = new StringBuffer();
// Append first 20 alphanumeric characters
// from the generated random String into the result
for (int k = 0; k < randomString.length(); k++) {
char ch = randomString.charAt(k);
if (((ch >= 'a' && ch <= 'z')
|| (ch >= 'A' && ch <= 'Z')
|| (ch >= '0' && ch <= '9'))
&& (n > 0)) {
pass.append(ch);
n--;
}
}
return pass.toString();
}
public String insertPassword(String username){
String mess;
Employee employee = registerRepository.findByUsername(username);
if(employee == null){
mess = "Không tìm thấy Username";
}else {
if(employee.isStatus()) {
mess = "Tài khoản đã được kích hoạt từ trước";
}else {
VerifyDTO verifyDTO = new VerifyDTO();
verifyDTO.setId(employee.getId());
verifyDTO.setPassword(getAlphaNumericString());
verifyDTO.setEmailAddress(employee.getEmailAddress());
verifyDTO.setStatus(true);
registerRepository.insertPassword(verifyDTO.getPassword(),verifyDTO.isStatus(),verifyDTO.getId());
EmailDTO emailDTO = new EmailDTO();
emailDTO.setSubject("Your Password");
emailDTO.setMessage("Your password is: "+verifyDTO.getPassword()+ " You are ready to login!!!!");
emailDTO.setRecipientEmail(verifyDTO.getEmailAddress());
emailBussiness.sendEmail(emailDTO);
mess = "Kích hoạt thành công, kiểm tra email để lấy mật khẩu.";
}
}
return mess;
}
}
package com.itsol.quantrivanphong.access.register.bussiness;
import com.itsol.quantrivanphong.access.register.dto.EmailDTO;
import com.itsol.quantrivanphong.access.register.dto.RegisterDTO;
import com.itsol.quantrivanphong.access.register.repository.RegisterRepository;
import com.itsol.quantrivanphong.model.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class RegisterBussiness {
@Autowired
private RegisterRepository registerRepository;
@Autowired
private EmailBussiness emailBussiness;
public String register(RegisterDTO registerDTO) {
String mess;
//lấy thông tin employee trong DB thông qua usernameDTO
Employee employee = registerRepository.findByUsername(registerDTO.getUsername());
//Nếu Username không tồn tại thì cho đăng ký
if (employee == null){
//Kiểm tra Email được đăng ký hay chưa
Employee employee1 = registerRepository.findByEmailAddress(registerDTO.getEmailAddress());
if (employee1 == null){
Employee employee2 = new Employee();
//Đổ dữ liệu từ DTO vào Empl
employee2.setUsername(registerDTO.getUsername());
employee2.setFirstName(registerDTO.getFirstName());
employee2.setLastName(registerDTO.getLastName());
employee2.setPicture(registerDTO.getPicture());
employee2.setEmailAddress(registerDTO.getEmailAddress());
employee2.setPhoneNumber(String.valueOf(registerDTO.getPhoneNumber()));
employee2.setSkype(registerDTO.getSkype());
employee2.setFacebookProfile(registerDTO.getFacebookProfile());
employee2.setPosition(registerDTO.getPosition());
employee2.setHomeTown(registerDTO.getHomeTown());
employee2.setEducation(registerDTO.getEducation());
employee2.setSchool(registerDTO.getSchool());
employee2.setDepartment(registerDTO.getDepartment());
employee2.setGraduationYear(String.valueOf(registerDTO.getGraduationYear()));
employee2.setChecked(false);
employee2.setStatus(false);
//Xử lý việc thêm mới
Employee employee3 = registerRepository.save(employee2);
if (employee3 != null){
EmailDTO emailDTO = new EmailDTO();
emailDTO.setRecipientEmail(employee3.getEmailAddress());
emailDTO.setMessage("Link: <a href = 'http://localhost:8081/verify/"+employee3.getUsername()+"'> Register verify account...</a>");
emailDTO.setUsername(employee3.getUsername());
emailDTO.setSubject("Confirm register:"+employee3.getUsername());
emailBussiness.sendEmail(emailDTO);
mess = "Đk thành công => Check email xác nhận mật khẩu";
}else {
mess = "ĐK không thành công";
}
}else {
mess = "Email đã được đăng ký với tài khoản khác chọn lại email";
}
//Nếu Username tồn tại
}else {
//Kiểm tra tiếp email nếu tồn tại
if (employee.getEmailAddress().equals(registerDTO.getEmailAddress())){
//Kiểm tra tiếp trạng thái kích hoạt
if (employee.isStatus()){
mess = "Username đã tồn tại => Đăng nhập";
}else {
mess = "Username đã tồn tại => Kích hoạt";
}
//Nếu email không tồn tại
}else {
mess = "username đã tồn tại chọn username khác!";
}
}
return mess;
}
}
package com.itsol.quantrivanphong.access.register.controller;
import com.itsol.quantrivanphong.exception.InputException;
import com.itsol.quantrivanphong.access.register.bussiness.RegisterBussiness;
import com.itsol.quantrivanphong.access.register.dto.RegisterDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.InputMismatchException;
@RestController
@RequestMapping(path = "/user")
public class RegisterController {
@Autowired
private RegisterBussiness registerBussiness;
@PostMapping(path = "/register", consumes = "application/json", produces = "application/json")
public String register(@RequestBody RegisterDTO registerDTO) {
String mess ;
try {
if(registerDTO.getUsername().trim().equals("")) throw new InputException("Username is not null");
if(registerDTO.getUsername().length()< 5 || registerDTO.getUsername().length() > 18) throw new InputException("Username in 5 - 18 characters");
if(registerDTO.getLastName().equals("")) throw new InputException("Last name is not null");
if(registerDTO.getEmailAddress().equals("")) throw new InputException("Email address is not null");
if(registerDTO.getGraduationYear() < 0) throw new InputException("lỗi năm < 0") ;
mess = registerBussiness.register(registerDTO);
}catch (InputException e){
mess = e.getMessage();
}catch (InputMismatchException e){
mess = e.getMessage();
}catch (Exception e){
mess = e.getMessage();
}
return mess;
}
}
package com.itsol.quantrivanphong.access.register.controller;
import com.itsol.quantrivanphong.access.register.bussiness.GeneratePasswordBussiness;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(path = "/verify")
public class VerifyAccountController {
@Autowired
private GeneratePasswordBussiness generatePasswordBussiness;
@GetMapping(path = "/{username}")
public String verifyPassword(@PathVariable("username") String username){
String mess = generatePasswordBussiness.insertPassword(username);
return mess;
}
}
package com.itsol.quantrivanphong.access.register.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class EmailDTO {
private String subject;
private String message;
private String username;
private String recipientEmail;
}
package com.itsol.quantrivanphong.access.register.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RegisterDTO {
private String username;
private String firstName;
private String lastName;
private String picture;
private String emailAddress;
private int phoneNumber;
private String skype;
private String facebookProfile;
private String position;
private String homeTown;
private String education;
private String school;
private String department;
private int graduationYear;
}
package com.itsol.quantrivanphong.access.register.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class VerifyDTO {
private int id;
private String password;
private String emailAddress;
private boolean status;
}
package com.itsol.quantrivanphong.access.register.repository;
import com.itsol.quantrivanphong.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
public interface RegisterRepository extends JpaRepository<Employee, Integer> {
Employee findByUsername(String username);
Employee findByEmailAddress(String emailAddress);
@Transactional
@Modifying(clearAutomatically = true)
@Query(value = "UPDATE employee e SET e.password = ?1, e.status = ?2 where e.id = ?3", nativeQuery = true)
void insertPassword(String password, boolean status, int id);
}
package com.itsol.quantrivanphong.access.register;
public class test {
}
package com.itsol.quantrivanphong.exception; package com.itsol.quantrivanphong.exception;
public class InputException extends Exception { public class InputException extends Exception {
public InputException(String message) {
public InputException(String message){
super(message); super(message);
} }
@Override @Override
public String getMessage() { public String getMessage() {
return "Error: "+super.getMessage(); return "Error: "+super.getMessage();
} }
} }
...@@ -2,8 +2,11 @@ package com.itsol.quantrivanphong.manager.employee.repository; ...@@ -2,8 +2,11 @@ package com.itsol.quantrivanphong.manager.employee.repository;
import com.itsol.quantrivanphong.model.Employee; import com.itsol.quantrivanphong.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
@Repository @Repository
public interface EmployeeRepository extends JpaRepository<Employee,Integer > { public interface EmployeeRepository extends JpaRepository<Employee,Integer > {
public Employee findEmployeeByUsername(String username); public Employee findEmployeeByUsername(String username);
...@@ -14,5 +17,26 @@ public interface EmployeeRepository extends JpaRepository<Employee,Integer > { ...@@ -14,5 +17,26 @@ public interface EmployeeRepository extends JpaRepository<Employee,Integer > {
Employee findByEmailAddress(String emailAddress); Employee findByEmailAddress(String emailAddress);
//==================================================================================================================
//Emplyee Repository Of Hieunv
@Query(value = "SELECT e.username FROM employee e JOIN eproject ep ON e.id = ep.employee_id JOIN project p ON ep.project_id = p.id WHERE p.id = ?1 AND ep.position = 'team_lead' GROUP BY e.id",nativeQuery = true)
String findTeamLeader(int projectId);
@Query(value = "SELECT COUNT(e.id)FROM employee e JOIN eproject ep ON e.id = ep.employee_id JOIN project p ON ep.project_id = p.id WHERE p.id = ?1 AND ep.position = 'member'", nativeQuery = true)
int numberOfMember(int projectId);
@Query(value = "SELECT e.username FROM employee e JOIN eproject ep ON e.id = ep.employee_id JOIN project p ON ep.project_id = p.id WHERE p.id = ?1 AND ep.position = 'team_lead' GROUP BY e.id",nativeQuery = true)
List<Employee> listEmployeeLackOfReport(int projectId);
@Query(value = "SELECT * FROM employee e JOIN eproject ep ON e.id = ep.employee_id JOIN project p on p.id = ep.project_id JOIN timesheet ts ON ep.id = ts.eproject_id WHERE p.id = ?1 AND ts.status = false AND ts.created_at Like ?2%", nativeQuery = true)
List<Employee> listLackOfReport(int projectId, String createDate);
//==================================================================================================================
//Emplyee Repository Of PhiCho
Employee findEmployeeById(int id); Employee findEmployeeById(int id);
} }
package com.itsol.quantrivanphong.manager.project.project.repository;
import com.itsol.quantrivanphong.model.Project;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface ProjectRRepository extends JpaRepository<Project, Integer> {
@Query(value = "SELECT p.id, p.name, p.descriptions, p.start_date, p.end_date, p.status FROM project p where p.status = 2", nativeQuery = true)
List<Project> listProjectWorking();
@Query(value = "SELECT p.name FROM project p where p.id = ?1", nativeQuery = true)
String ProjectName(int projectId);
}
package com.itsol.quantrivanphong.manager.reportdetail.bussiness;
import com.itsol.quantrivanphong.manager.employee.repository.EmployeeRepository;
import com.itsol.quantrivanphong.manager.project.project.repository.ProjectRRepository;
import com.itsol.quantrivanphong.manager.reportdetail.dto.request.ReportDTO;
import com.itsol.quantrivanphong.manager.reportdetail.dto.request.TimesheetRequestDTO;
import com.itsol.quantrivanphong.manager.reportdetail.repository.ProjectReportRepository;
import com.itsol.quantrivanphong.model.*;
import com.itsol.quantrivanphong.report.timesheet.repository.EProjectRepository;
import com.itsol.quantrivanphong.report.timesheet.repository.TimeSheetRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class ReportProjectBussiness {
@Autowired
private ProjectRRepository projectRepository;
@Autowired
private EmployeeRepository employeeRepository;
@Autowired
private ProjectReportRepository projectReportRepository;
@Autowired
private EProjectRepository eProjectRepository;
@Autowired
private TimeSheetRepository timeSheetRepository;
//======================================================================================================================
public List<Project> listProjectWorking(){
List<Project> projectList = projectRepository.listProjectWorking();
if(projectList.isEmpty()){
return null;
}else
return projectList;
}
//======================================================================================================================
public List<TimeSheet> findAllTimesheetStatusTrue(ReportDTO reportDTO){
List<TimeSheet> timeSheetList = timeSheetRepository.findAllTimesheetStatusTrue(reportDTO.getProjectId(), reportDTO.getCurrentDate());
return timeSheetList;
}
public String updateTimesheetStatus(ReportDTO reportDTO){
String mess;
try {
List<Eproject> eprojectList = eProjectRepository.listEprojectLack(reportDTO.getProjectId(), reportDTO.getCurrentDate());
List<Integer> list = new ArrayList<>();
for (Eproject eproject: eprojectList) {
list.add(eproject.getId());
}
for (Integer i: list){
timeSheetRepository.updateLack(i,false,"checked");
}
mess = "OK !";
}catch (Exception e){
mess = e.getMessage();
}
return mess;
}
public String updateTimesheetChecked(TimesheetRequestDTO timesheetRequestDTO){
String mess;
try {
timeSheetRepository.updateTimesheetChecked(timesheetRequestDTO.getChecked(),timesheetRequestDTO.getId());
mess = "OK !";
}catch (Exception e){
mess = e.getMessage();
}
return mess;
}
//======================================================================================================================
public List<ProjectReport> allProjectReport(ReportDTO reportDTO){
List<ProjectReport> projectReportList = projectReportRepository.allProjectReport(reportDTO.getProjectId());
if (projectReportList.isEmpty()){
return null;
}else
return projectReportList;
}
public ProjectReport latestReport(ReportDTO reportDTO){
return projectReportRepository.latestReport(reportDTO.getProjectId());
}
public List<Employee> listLackOfReport(ReportDTO reportDTO){
List<Employee> employeeList = employeeRepository.listLackOfReport(reportDTO.getProjectId(), reportDTO.getCurrentDate());
return employeeList;
}
// public String insertProjectReport(ReportDTO reportDTO){
// ProjectReport projectReport = new ProjectReport();
// projectReport.setProjectName(projectRepository.ProjectName(reportDTO.getProjectId()));
// projectReport.setTeamLeader(employeeRepository.findTeamLeader(reportDTO.getProjectId()));
// projectReport.setNumberOfMember(employeeRepository.numberOfMember(reportDTO.getProjectId()));
// projectReport.setCalendarEffort(10);
// projectReport.set
// }
//
}
package com.itsol.quantrivanphong.manager.reportdetail.controller;
import com.itsol.quantrivanphong.manager.reportdetail.bussiness.ReportProjectBussiness;
import com.itsol.quantrivanphong.manager.reportdetail.dto.request.ReportDTO;
import com.itsol.quantrivanphong.manager.reportdetail.dto.request.TimesheetRequestDTO;
import com.itsol.quantrivanphong.model.Employee;
import com.itsol.quantrivanphong.model.Project;
import com.itsol.quantrivanphong.model.ProjectReport;
import com.itsol.quantrivanphong.model.TimeSheet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping(path = "/admin/report")
public class ReportProjectController {
@Autowired
private ReportProjectBussiness reportProjectBussiness;
//======================================================================================================================
//Danh sách các dự án đang trong thời gian triển khai
@GetMapping(path = "/project/all",consumes = "application/json", produces = "application/json")
public ResponseEntity<List<Project>> listProjectWorking(){
List<Project> projectList = reportProjectBussiness.listProjectWorking();
return ResponseEntity.ok(projectList);
}
//======================================================================================================================
//Hiển thị danh sách timesheet của các thành viên đã viết báo cáo trong ngày hôm đó
@GetMapping(path = "/project/timesheet",consumes = "application/json", produces = "application/json")
public ResponseEntity<List<TimeSheet>> findAllTimesheetStatusTrue(@RequestBody ReportDTO reportDTO){
List<TimeSheet> timeSheetList = reportProjectBussiness.findAllTimesheetStatusTrue(reportDTO);
return ResponseEntity.ok(timeSheetList);
}
//Nút "kiểm tra" : Lọc các thành viên chưa viết báo cáo và tự khởi tạo timesheet với trạng thái thái = false
@GetMapping(path = "/project/updateLack", consumes = "application/json", produces = "application/json")
public ResponseEntity<String> updateTimesheetStatus(@RequestBody ReportDTO reportDTO){
String mess = reportProjectBussiness.updateTimesheetStatus(reportDTO);
return ResponseEntity.ok(mess);
}
//Quản trị viên duyệt và đánh dấu (đã duyệt, từ chối) mặc định là chưa duyệt (update bảng timesheet theo id)
@PostMapping(path = "/project/check", consumes = "application/json", produces = "application/json")
public ResponseEntity<String> updateTimesheetChecked(@RequestBody TimesheetRequestDTO timesheetRequestDTO){
String mess = reportProjectBussiness.updateTimesheetChecked(timesheetRequestDTO);
return ResponseEntity.ok(mess);
}
//Danh sách thành viên trong Dự án thiếu báo cáo ngày hôm đó
@GetMapping(path = "/project/alllack",consumes = "application/json", produces = "application/json")
public ResponseEntity<List<Employee>> listLackOfReport(@RequestBody ReportDTO reportDTO){
List<Employee> employeeList = reportProjectBussiness.listLackOfReport(reportDTO);
return ResponseEntity.ok(employeeList);
}
//=================================================================================================================
// //Tạo một báo cáo mới
// @PostMapping(path = "/project/newReport", consumes = "application/json", produces = "application/json")
// public ResponseEntity<String> updateTimesheetChecked(@RequestBody TimesheetRequestDTO timesheetRequestDTO){
// String mess = reportProjectBussiness.updateTimesheetChecked(timesheetRequestDTO);
// return ResponseEntity.ok(mess);
// }
//Báo cáo gần nhất của dự án
@GetMapping(path = "/project/latest",consumes = "application/json", produces = "application/json")
public ResponseEntity<ProjectReport> latestReport(@RequestBody ReportDTO reportDTO){
ProjectReport projectReport = reportProjectBussiness.latestReport(reportDTO);
return ResponseEntity.ok(projectReport);
}
// Tất cả các báo cáo của dự án
@GetMapping(path = "/project/allReport",consumes = "application/json", produces = "application/json")
public ResponseEntity<List<ProjectReport>> allProjectReport(@RequestBody ReportDTO reportDTO){
List<ProjectReport> projectReportList = reportProjectBussiness.allProjectReport(reportDTO);
return ResponseEntity.ok(projectReportList);
}
}
package com.itsol.quantrivanphong.manager.reportdetail.dto.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ReportDTO {
private String firstPoint;
private String finalPoint;
private String currentDate;
private int projectId;
private String position;
private boolean status;
}
package com.itsol.quantrivanphong.manager.reportdetail.dto.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TimesheetRequestDTO {
private int id;
private String checked;
}
package com.itsol.quantrivanphong.manager.reportdetail.dto.response;
import com.itsol.quantrivanphong.model.Employee;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ReportResponseDTO {
private int projectId;
private String projectName;
private List<Employee> teamLeadList = new ArrayList<>();
private List<Employee> memberList = new ArrayList<>();
private String firstPoint;
private String finalPoint;
}
package com.itsol.quantrivanphong.manager.reportdetail.repository;
import com.itsol.quantrivanphong.model.ProjectReport;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
public interface ProjectReportRepository extends JpaRepository<ProjectReport, Integer> {
@Query(value = "SELECT * FROM project_report pr WHERE pr.project_id = ?1 ORDER BY pr.created_at DESC limit 1", nativeQuery = true)
ProjectReport latestReport(int projectId);
@Query(value = "SELECT * FROM project_report pr WHERE pr.project_id = ?1 ORDER BY pr.created_at DESC", nativeQuery = true)
List<ProjectReport> allProjectReport(int projectId);
@Transactional
@Modifying
@Query(value = "INSERT INTO project_report(project_name, team_leader, number_of_members, calendar_effort, lack_of_reports, created_at, updated_at, status, project_id) VALUES (?1, ?2, ?3, ?4, ?5, CURRENT_DATE(), CURRENT_DATE() ,?6, ?7)",nativeQuery = true)
void insertProjectReport(String projectName, String teamLeader, int NumberOfMember, int CalendarEffort, int LackOfReport, boolean status, int projectId);
}
package com.itsol.quantrivanphong.manager.reportdetail.repository;
import com.itsol.quantrivanphong.model.ProjectReport;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
public interface ReportDetailRepository extends JpaRepository<ProjectReport, Integer> {
// @Query(value = "SELECT * FROM project_report pr ", nativeQuery = true)
// String ProjectName(int projectId);
}
package com.itsol.quantrivanphong.manager.reportdetail;
public class test {
}
...@@ -28,7 +28,7 @@ public class Employee { ...@@ -28,7 +28,7 @@ public class Employee {
@Column(name = "username", length = 128, nullable = false, unique = true) @Column(name = "username", length = 128, nullable = false, unique = true)
private String username; private String username;
@Column(name = "password", length = 128, nullable = false) @Column(name = "password", length = 128)
private String password; private String password;
@Column(name = "confirm_password") @Column(name = "confirm_password")
@Size(min = 5, max = 20) @Size(min = 5, max = 20)
...@@ -94,4 +94,5 @@ public class Employee { ...@@ -94,4 +94,5 @@ public class Employee {
@JsonIgnore @JsonIgnore
@OneToMany(mappedBy = "employee", fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OneToMany(mappedBy = "employee", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Eproject> eprojectList = new ArrayList<>(); private List<Eproject> eprojectList = new ArrayList<>();
} }
...@@ -14,8 +14,7 @@ import javax.persistence.*; ...@@ -14,8 +14,7 @@ import javax.persistence.*;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@EntityListeners(AuditingEntityListener.class) @EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, @JsonIgnoreProperties(value = {"createdAt", "updatedAt"},allowGetters = true)
allowGetters = true)
@Table(name = "news") @Table(name = "news")
public class News extends DateAudit { public class News extends DateAudit {
......
package com.itsol.quantrivanphong.model; package com.itsol.quantrivanphong.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.itsol.quantrivanphong.audit.DateAudit;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*; import javax.persistence.*;
...@@ -10,25 +13,30 @@ import javax.persistence.*; ...@@ -10,25 +13,30 @@ import javax.persistence.*;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Entity @Entity
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"},allowGetters = true)
@Table(name = "project_report") @Table(name = "project_report")
public class ProjectReport { public class ProjectReport extends DateAudit {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, unique = true) @Column(name = "id", nullable = false, unique = true)
private int id; private int id;
@Column(name = "title") @Column(name = "project_name")
private String title; private String projectName;
@Column(name = "content") @Column(name = "team_leader")
private String content; private String teamLeader;
@Column(name = "note") @Column(name = "number_of_members")
private String note; private int numberOfMember;
@Column(name = "checked") @Column(name = "calendar_effort")
private String checked; private int calendarEffort;
@Column(name = "lack_of_reports")
private int lackOfReport;
@Column(name = "status") @Column(name = "status")
private boolean status; private boolean status;
......
...@@ -13,10 +13,9 @@ import javax.persistence.*; ...@@ -13,10 +13,9 @@ import javax.persistence.*;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Entity @Entity
@Table(name = "timesheet")
@EntityListeners(AuditingEntityListener.class) @EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, @JsonIgnoreProperties(value = {"createdAt", "updatedAt"},allowGetters = true)
allowGetters = true) @Table(name = "timesheet")
public class TimeSheet extends DateAudit { public class TimeSheet extends DateAudit {
......
...@@ -24,7 +24,7 @@ public class TimeSheetBusiness { ...@@ -24,7 +24,7 @@ public class TimeSheetBusiness {
public String insertTimeSheet(int employee_Id, TimeSheetDTO timeSheetDTO) { public String insertTimeSheet(int employee_Id, TimeSheetDTO timeSheetDTO) {
String message; String message;
Employee employee = employeeRepository.findEmployeeById(employee_Id); Employee employee = employeeRepository.findEmployeeById(employee_Id);
Eproject eproject = eProjectRepository.findEprojectByIdAndEmployee(timeSheetDTO.getEproject_id(), employee); Eproject eproject = eProjectRepository.findEprojectByIdAndEmployee(timeSheetDTO.getEprojectId(), employee);
if (eproject != null) { if (eproject != null) {
// SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy HH:mm"); // SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy HH:mm");
// Date date = new Date(System.currentTimeMillis()); // Date date = new Date(System.currentTimeMillis());
......
package com.itsol.quantrivanphong.report.timesheet.controller; package com.itsol.quantrivanphong.report.timesheet.controller;
import com.itsol.quantrivanphong.exception.InputException; import com.itsol.quantrivanphong.exception.InputException;
import com.itsol.quantrivanphong.model.TimeSheet;
import com.itsol.quantrivanphong.report.timesheet.business.TimeSheetBusiness; import com.itsol.quantrivanphong.report.timesheet.business.TimeSheetBusiness;
import com.itsol.quantrivanphong.report.timesheet.dto.TimeSheetDTO; import com.itsol.quantrivanphong.report.timesheet.dto.TimeSheetDTO;
import com.itsol.quantrivanphong.model.TimeSheet;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -16,19 +16,19 @@ import java.util.List; ...@@ -16,19 +16,19 @@ import java.util.List;
public class TimeSheetController { public class TimeSheetController {
@Autowired @Autowired
TimeSheetBusiness timeSheetBusiness; TimeSheetBusiness timeSheetBusiness;
@PostMapping(path = "/{employee_Id}/timesheet", consumes = "application/json", produces = "application/json") // @PostMapping(path = "/timesheet", consumes = "application/json", produces = "application/json")
public ResponseEntity<String> insertTimeSheet(@PathVariable int employee_Id, @Valid @RequestBody TimeSheetDTO timeSheetDTO) { // public ResponseEntity<String> insertTimeSheet(@RequestBody TimeSheetDTO timeSheetDTO) {
String message; // String message;
try { // try {
if (timeSheetDTO.getTitle().trim().equals("")) throw new InputException("Tiêu đề không được để trống"); // if (timeSheetDTO.getTitle().trim().equals("")) throw new InputException("Tiêu đề không được để trống");
if (timeSheetDTO.getContent().trim().equals("")) throw new InputException("Nội dung không được để trống"); // if (timeSheetDTO.getContent().trim().equals("")) throw new InputException("Nội dung không được để trống");
message = timeSheetBusiness.insertTimeSheet(employee_Id, timeSheetDTO); // message = timeSheetBusiness.insertTimeSheet(timeSheetDTO);
} catch (InputException e) { // } catch (InputException e) {
message = e.getMessage(); // message = e.getMessage();
} // }
//
return ResponseEntity.ok(message); // return ResponseEntity.ok(message);
} // }
@DeleteMapping("/{employee_Id}/timesheet/{timesheet_Id}") @DeleteMapping("/{employee_Id}/timesheet/{timesheet_Id}")
public ResponseEntity<String> deleteTimeSheet(@PathVariable int employee_Id, @Valid @PathVariable int timesheet_Id) { public ResponseEntity<String> deleteTimeSheet(@PathVariable int employee_Id, @Valid @PathVariable int timesheet_Id) {
......
...@@ -14,5 +14,7 @@ public class TimeSheetDTO { ...@@ -14,5 +14,7 @@ public class TimeSheetDTO {
private String note; private String note;
private String checked; private String checked;
private boolean status; private boolean status;
private int eproject_id; private int eprojectId;
private int employeeId;
} }
...@@ -3,10 +3,24 @@ package com.itsol.quantrivanphong.report.timesheet.repository; ...@@ -3,10 +3,24 @@ package com.itsol.quantrivanphong.report.timesheet.repository;
import com.itsol.quantrivanphong.model.Employee; import com.itsol.quantrivanphong.model.Employee;
import com.itsol.quantrivanphong.model.Eproject; import com.itsol.quantrivanphong.model.Eproject;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface EProjectRepository extends JpaRepository<Eproject, Integer> { public interface EProjectRepository extends JpaRepository<Eproject, Integer> {
// Eproject findEprojectById(int id); // Eproject findEprojectById(int id);
Eproject findEprojectByEmployee(Employee employee); Eproject findEprojectByEmployee(Employee employee);
Eproject findEprojectByIdAndEmployee(int eProject_Id, Employee employee); Eproject findEprojectByIdAndEmployee(int eProject_Id, Employee employee);
//======================================================================================================
// Hieunv
@Query(value = "SELECT * FROM eproject ep JOIN project p on p.id = ep.project_id WHERE p.id = ?1 AND ep.employee_id NOT IN (SELECT e.id FROM employee e JOIN eproject ep ON e.id = ep.employee_id JOIN project p on p.id = ep.project_id JOIN timesheet ts on ts.eproject_id = ep.id WHERE p.id = ?1 AND ts.created_at Like ?2%)", nativeQuery = true)
List<Eproject> listEprojectLack(int projectId, String currentDate);
} }
...@@ -5,6 +5,8 @@ import com.itsol.quantrivanphong.model.TimeSheet; ...@@ -5,6 +5,8 @@ import com.itsol.quantrivanphong.model.TimeSheet;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
...@@ -26,4 +28,22 @@ public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> { ...@@ -26,4 +28,22 @@ public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> {
List<TimeSheet> showTimeSheetByEproject(Eproject eproject); List<TimeSheet> showTimeSheetByEproject(Eproject eproject);
TimeSheet findTimeSheetByEprojectAndId(Eproject eproject, int timeSheet_Id); TimeSheet findTimeSheetByEprojectAndId(Eproject eproject, int timeSheet_Id);
//==================================================================================================================
//Timesheet Of Hieunv
@Query(value = "SELECT * FROM timesheet ts JOIN eproject ep ON ep.id = ts.eproject_id WHERE ep.project_id = ?1 AND ts.status = true and ts.created_at like ?2%", nativeQuery = true)
List<TimeSheet> findAllTimesheetStatusTrue(int projectId, String currentDate);
@Transactional
@Modifying
@Query(value = "INSERT INTO timesheet(eproject_id, status, created_at, updated_at, checked) VALUES (?1, ?2,current_date(), current_date(),?3)",nativeQuery = true)
void updateLack(int eprojectId, boolean status, String checked);
@Transactional
@Modifying
@Query(value = "update TimeSheet ts set ts.checked = ?1 where ts.id = ?2", nativeQuery = true)
void updateTimesheetChecked(String checked, int id);
} }
#server.port=8081 server.port=8081
# =============================== # ===============================
# DATABASE CONNECTION # DATABASE CONNECTION
# =============================== # ===============================
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/quantrivanphong
spring.datasource.url=jdbc:mysql://localhost:3308/quantrivanphong
spring.datasource.username=root spring.datasource.username=root
spring.datasource.password= 123456 spring.datasource.password=
# =============================== # ===============================
...@@ -14,25 +13,18 @@ spring.datasource.password= 123456 ...@@ -14,25 +13,18 @@ spring.datasource.password= 123456
# =============================== # ===============================
spring.jpa.show-sql=true spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#spring.jpa.properties.hibernate.default_schema=qlns_itsol #spring.jpa.properties.hibernate.default_schema=qlns_itsol
## Fix Postgres JPA Error:
## Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented.
#spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
# =============================== # ===============================
# SEND EMAIL # SEND EMAIL
# ============================== # ==============================
spring.mail.host=smtp.gmail.com spring.mail.host=smtp.gmail.com
spring.mail.port=587 spring.mail.port=587
spring.mail.username= spring.mail.username=hieunv2496@gmail.com
spring.mail.password= spring.mail.password=anhieu1996
spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.auth=true
...@@ -40,6 +32,4 @@ spring.mail.properties.mail.smtp.connectiontimeout=5000 ...@@ -40,6 +32,4 @@ spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=5000 spring.mail.properties.mail.smtp.timeout=5000
spring.mail.properties.mail.smtp.writetimeout=5000 spring.mail.properties.mail.smtp.writetimeout=5000
## App Properties
app.jwtSecret= JWTSuperSecretKey
app.jwtExpirationInMs = 604800000
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment