Commit f2395951 authored by Phạm Duy Phi's avatar Phạm Duy Phi

Merge branch 'master' into phipham

parents 09b68c7e 4d795cae
......@@ -23,14 +23,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</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>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
......@@ -57,21 +55,7 @@
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</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>
<build>
......
package com.itsol.quantrivanphong.access.homepage.controller;
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;
public class InputException extends Exception {
public InputException(String message) {
public InputException(String message){
super(message);
}
@Override
public String getMessage() {
return "Error: "+super.getMessage();
}
}
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.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.manager.project.project.repository.ProjectRRepository;
import com.itsol.quantrivanphong.model.*;
import com.itsol.quantrivanphong.report.timesheet.business.TimeSheetBusiness;
import com.itsol.quantrivanphong.report.timesheet.dto.TimeSheetDTO;
import com.itsol.quantrivanphong.report.timesheet.repository.EProjectRepository;
import com.itsol.quantrivanphong.report.timesheet.repository.TimeSheetRepository;
import com.itsol.quantrivanphong.repository.EmployeeRepository;
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;
}
}
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);
}
//=================================================================================================================
//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.Query;
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);
}
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 {
@Column(name = "username", length = 128, nullable = false, unique = true)
private String username;
@Column(name = "password", length = 128, nullable = false)
@Column(name = "password", length = 128)
private String password;
@Column(name = "confirm_password")
@Size(min = 5, max = 20)
......@@ -94,4 +94,5 @@ public class Employee {
@JsonIgnore
@OneToMany(mappedBy = "employee", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Eproject> eprojectList = new ArrayList<>();
}
......@@ -14,8 +14,7 @@ import javax.persistence.*;
@AllArgsConstructor
@NoArgsConstructor
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"},
allowGetters = true)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"},allowGetters = true)
@Table(name = "news")
public class News extends DateAudit {
......
package com.itsol.quantrivanphong.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.itsol.quantrivanphong.audit.DateAudit;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
......@@ -10,25 +13,30 @@ import javax.persistence.*;
@NoArgsConstructor
@AllArgsConstructor
@Entity
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"},allowGetters = true)
@Table(name = "project_report")
public class ProjectReport {
public class ProjectReport extends DateAudit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, unique = true)
private int id;
@Column(name = "title")
private String title;
@Column(name = "project_name")
private String projectName;
@Column(name = "content")
private String content;
@Column(name = "team_leader")
private String teamLeader;
@Column(name = "note")
private String note;
@Column(name = "number_of_members")
private int numberOfMember;
@Column(name = "checked")
private String checked;
@Column(name = "calendar_effort")
private int calendarEffort;
@Column(name = "lack_of_reports")
private int lackOfReport;
@Column(name = "status")
private boolean status;
......
......@@ -13,10 +13,9 @@ import javax.persistence.*;
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "timesheet")
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"},
allowGetters = true)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"},allowGetters = true)
@Table(name = "timesheet")
public class TimeSheet extends DateAudit {
......
......@@ -3,10 +3,24 @@ package com.itsol.quantrivanphong.report.timesheet.repository;
import com.itsol.quantrivanphong.model.Employee;
import com.itsol.quantrivanphong.model.Eproject;
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> {
// Eproject findEprojectById(int id);
Eproject findEprojectByEmployee(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;
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;
......@@ -26,4 +28,22 @@ public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> {
List<TimeSheet> showTimeSheetByEproject(Eproject eproject);
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);
}
......@@ -2,8 +2,11 @@ package com.itsol.quantrivanphong.repository;
import com.itsol.quantrivanphong.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface EmployeeRepository extends JpaRepository<Employee,Integer > {
public Employee findEmployeeByUsername(String username);
......@@ -14,5 +17,26 @@ public interface EmployeeRepository extends JpaRepository<Employee,Integer > {
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);
}
#server.port=8081
server.port=8081
# ===============================
# DATABASE CONNECTION
# ===============================
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/quantrivanphong
spring.datasource.username=root
spring.datasource.password=ahihi123
spring.datasource.password=
# ===============================
# JPA / HIBERNATE
# ===============================
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.jpa.properties.hibernate.default_schema=quantrivanphong
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#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
# ==============================
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=
spring.mail.password=
spring.mail.username=hieunv2496@gmail.com
spring.mail.password=anhieu1996
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.auth=true
......
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