Unverified Commit 44a90ed6 authored by mshaik-nisum-com's avatar mshaik-nisum-com Committed by GitHub

Merge pull request #187 from nisum-inc/FEATURE/CodeRefactorForLoginReportBasedOnDateTime

MT-175:Code Refactor for Login Report based on Date Time
parents 9cb1a524 7979a3d0
...@@ -23,6 +23,7 @@ import com.nisum.mytime.model.AttendenceData; ...@@ -23,6 +23,7 @@ import com.nisum.mytime.model.AttendenceData;
import com.nisum.mytime.model.EmpLoginData; import com.nisum.mytime.model.EmpLoginData;
import com.nisum.mytime.model.ProjectTeamMate; import com.nisum.mytime.model.ProjectTeamMate;
import com.nisum.mytime.repository.ProjectTeamMatesRepo; import com.nisum.mytime.repository.ProjectTeamMatesRepo;
import com.nisum.mytime.utils.CommomUtil;
import com.nisum.mytime.utils.MyTimeLogger; import com.nisum.mytime.utils.MyTimeLogger;
import com.nisum.mytime.utils.MyTimeUtils; import com.nisum.mytime.utils.MyTimeUtils;
import com.nisum.mytime.utils.PdfReportGenerator; import com.nisum.mytime.utils.PdfReportGenerator;
...@@ -53,34 +54,12 @@ public class AttendanceServiceImpl implements AttendanceService { ...@@ -53,34 +54,12 @@ public class AttendanceServiceImpl implements AttendanceService {
@Override @Override
public List<EmpLoginData> employeeLoginReportBasedOnDateTime(long id, String fromDate, String toDate,String fromTime,String toTime) throws MyTimeException, ParseException { public List<EmpLoginData> employeeLoginReportBasedOnDateTime(long id, String fromDate, String toDate,String fromTime,String toTime) throws MyTimeException, ParseException {
String timeFrom= CommomUtil.convertTimeFormat(fromTime);
//Getting Sign AM/PM of Time String timeTo= CommomUtil.convertTimeFormat(toTime);
String timeSignFrom=fromTime.substring(6,8); String nextDayDate = CommomUtil.getNextDay(fromDate,fromTime,toTime);
String timeSignTo=toTime.substring(6,8); return employeeDataBaseService.fetchEmployeeLoginsBasedOnDatesTime(id, fromDate, nextDayDate, toDate, timeFrom, timeTo);
// Converting the Time from 12 Hours to 24 Hours Format
SimpleDateFormat displayFormat = new SimpleDateFormat("HH:mm");
SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm a");
// Given Format
Date from = parseFormat.parse(fromTime);
Date to = parseFormat.parse(toTime);
//Required Format
String timeFrom=displayFormat.format(from);
String timeTo=displayFormat.format(to);
//Getting Hours from Time
String nextDate=fromDate;
int hoursFrom=Integer.parseInt(timeFrom.substring(0,2));
int hoursTo=Integer.parseInt(timeTo.substring(0,2));
if(hoursTo<=hoursFrom && timeSignFrom.equals(timeSignTo) || hoursTo<=hoursFrom) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-d");
LocalDate newtoDate = (LocalDate.parse(fromDate,formatter)).plusDays(1);
nextDate=newtoDate.toString();
}
return employeeDataBaseService.fetchEmployeeLoginsBasedOnDatesTime(id, fromDate,nextDate, toDate,timeFrom,timeTo);
} }
@Override @Override
public String generatePdfReport(long id, String fromDate, String toDate, String fromTime, String toTime) public String generatePdfReport(long id, String fromDate, String toDate, String fromTime, String toTime)
throws MyTimeException { throws MyTimeException {
......
...@@ -4,10 +4,6 @@ import java.sql.Connection; ...@@ -4,10 +4,6 @@ import java.sql.Connection;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.Statement; import java.sql.Statement;
import java.sql.Time; import java.sql.Time;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.Period; import java.time.Period;
...@@ -30,126 +26,111 @@ import com.nisum.mytime.utils.MyTimeUtils; ...@@ -30,126 +26,111 @@ import com.nisum.mytime.utils.MyTimeUtils;
@Component @Component
@Transactional @Transactional
public class EmployeeDataService { public class EmployeeDataService implements IEmployeeDataService {
@Autowired @Autowired
DbConnection dbConnection; DbConnection dbConnection;
public List<EmpLoginData> fetchEmployeeLoginsBasedOnDates(long employeeId, String fromDate, String toDate) throws MyTimeException { public List<EmpLoginData> fetchEmployeeLoginsBasedOnDates(long employeeId, String fromDate, String toDate)
long start_ms = System.currentTimeMillis(); throws MyTimeException {
String querys = null; long start_ms = System.currentTimeMillis();
if (employeeId == 0) { String querys = null;
querys = MyTimeUtils.ABESENT_STATUS_QUERY + "'" + fromDate.replace("-", "/") + "'" if (employeeId == 0) {
+ MyTimeUtils.ABESENT_STATUS_QUERY1 + "'" + toDate.replace("-", "/") + "'" querys = MyTimeUtils.ABESENT_STATUS_QUERY + "'" + fromDate.replace("-", "/") + "'"
+ MyTimeUtils.ABESENT_STATUS_QUERY3; + MyTimeUtils.ABESENT_STATUS_QUERY1 + "'" + toDate.replace("-", "/") + "'"
} else { + MyTimeUtils.ABESENT_STATUS_QUERY3;
querys = MyTimeUtils.ABESENT_STATUS_QUERY + "'" + fromDate.replace("-", "/") + "'" } else {
+ MyTimeUtils.ABESENT_STATUS_QUERY1 + "'" + toDate.replace("-", "/") + "'" querys = MyTimeUtils.ABESENT_STATUS_QUERY + "'" + fromDate.replace("-", "/") + "'"
+ MyTimeUtils.ABESENT_STATUS_QUERY2 + employeeId + MyTimeUtils.ABESENT_STATUS_QUERY1 + "'" + toDate.replace("-", "/") + "'"
+ MyTimeUtils.ABESENT_STATUS_QUERY3; + MyTimeUtils.ABESENT_STATUS_QUERY2 + employeeId + MyTimeUtils.ABESENT_STATUS_QUERY3;
} }
int countHours = 0; List<EmpLoginData> listOfEmpLoginData = executeQuery(querys, 1);
List<EmpLoginData> listOfEmpLoginData = new ArrayList<>(); MyTimeLogger.getInstance()
.info(" Time Taken fecth Employee data based on Dates ::: " + (System.currentTimeMillis() - start_ms));
return listOfEmpLoginData;
}
try (Connection connection = dbConnection.getDBConnection(); public List<EmpLoginData> fetchEmployeeLoginsBasedOnDatesTime(long employeeId, String fromDate, String nextDate,
Statement statement = connection.createStatement(); String toDate, String fromTime, String toTime) throws MyTimeException {
ResultSet resultSet = statement.executeQuery(querys.toString())) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
while (resultSet.next()) { LocalDate formatedFromDate = LocalDate.parse(fromDate, formatter);
EmpLoginData empLoginData = new EmpLoginData(); LocalDate formatedNextDate = LocalDate.parse(nextDate, formatter);
empLoginData.setEmployeeId(resultSet.getString("EmployeeCode")); LocalDate formatedToDate = LocalDate.parse(toDate, formatter);
empLoginData.setEmployeeName(resultSet.getString("FirstName")); int differentBetweenDays = Period.between(formatedFromDate, formatedToDate).getDays();
empLoginData.setDateOfLogin(resultSet.getDate("FirstLogin").toString()); long start_ms = System.currentTimeMillis();
empLoginData.setFirstLogin(resultSet.getTime("FirstLogin").toString()); String query = null;
empLoginData.setLastLogout(resultSet.getTime("LastLogin").toString()); List<EmpLoginData> resultSetData = new ArrayList<>();
Time from = resultSet.getTime("FirstLogin"); List<EmpLoginData> listOfEmpLoginDetails = new ArrayList<>();
Time to = resultSet.getTime("LastLogin"); for (int i = 0; i <= differentBetweenDays; i++) {
long milliseconds = to.getTime() - from.getTime(); String fromDateTime = fromDate + " " + fromTime;
int seconds = (int) milliseconds / 1000; String toDateTime = nextDate + " " + toTime;
int hours = seconds / 3600; if (i > 0) {
int minutes = (seconds % 3600) / 60; fromDate = formatedFromDate.plusDays(1).toString();
seconds = (seconds % 3600) % 60; formatedFromDate = LocalDate.parse(fromDate);
nextDate = formatedNextDate.plusDays(1).toString();
formatedNextDate = LocalDate.parse(nextDate);
fromDateTime = fromDate + " " + fromTime;
toDateTime = nextDate + " " + toTime;
}
if (i == differentBetweenDays && formatedNextDate == LocalDate.now()) {
toDateTime = nextDate + " " + "23:59";
}
query = MyTimeUtils.LOGIN_REPORT_BY_TIME + "'" + fromDateTime + "'" + MyTimeUtils.LOGIN_REPORT_BY_TIME2 + "'"
+ toDateTime + "'" + MyTimeUtils.LOGIN_REPORT_BY_TIME3 + employeeId + MyTimeUtils.LOGIN_REPORT_BY_TIME4;
resultSetData = executeQuery(query, 2);
listOfEmpLoginDetails.add(resultSetData.get(0));
MyTimeLogger.getInstance().info(
" Time Taken fecth Employee data based on Dates ::: " + (System.currentTimeMillis() - start_ms));
}
return listOfEmpLoginDetails;
}
empLoginData.setTotalLoginTime(hours + ":" + minutes + ":" + seconds); private List<EmpLoginData> executeQuery(String query, int flag) throws MyTimeException {
empLoginData.setTotalLoginTime(hours + ":" + minutes + ":" + seconds); long start_ms = System.currentTimeMillis();
Date d = MyTimeUtils.tdf.parse(empLoginData.getTotalLoginTime()); long totalseconds = 0;
countHours += d.getTime(); int countHours = 0;
listOfEmpLoginData.add(empLoginData); List<EmpLoginData> listOfEmpLoginData = new ArrayList<>();
} try (Connection connection = dbConnection.getDBConnection();
if (!listOfEmpLoginData.isEmpty()) { Statement statement = connection.createStatement();
listOfEmpLoginData.get(0).setTotalAvgTime(MyTimeUtils.tdf.format(countHours / listOfEmpLoginData.size())); ResultSet resultSet = statement.executeQuery(query.toString())) {
} while (resultSet.next()) {
MyTimeLogger.getInstance().info(" Time Taken fecth Employee data based on Dates ::: " + (System.currentTimeMillis() - start_ms)); EmpLoginData empLoginData = new EmpLoginData();
} catch (Exception e) { empLoginData.setEmployeeId(resultSet.getString("EmployeeCode"));
e.printStackTrace(); empLoginData.setEmployeeName(resultSet.getString("FirstName"));
MyTimeLogger.getInstance().error(e.getMessage()); empLoginData.setDateOfLogin(resultSet.getDate("FirstLogin").toString());
throw new MyTimeException(e.getMessage()); empLoginData.setFirstLogin(resultSet.getTime("FirstLogin").toString());
} empLoginData.setLastLogout(resultSet.getTime("LastLogin").toString());
return listOfEmpLoginData; if (flag == 1) {
} Time from = resultSet.getTime("FirstLogin");
Time to = resultSet.getTime("LastLogin");
public List<EmpLoginData> fetchEmployeeLoginsBasedOnDatesTime(long employeeId, String fromDate, String nextDate,String toDate,String fromTime,String toTime) throws MyTimeException { long milliseconds = to.getTime() - from.getTime();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); totalseconds = milliseconds / 1000;
LocalDate formatedFromDate=LocalDate.parse(fromDate,formatter); }
LocalDate formatedNextDate=LocalDate.parse(nextDate,formatter); if (flag == 2) {
LocalDate formatedToDate=LocalDate.parse(toDate,formatter); LocalDateTime loginTime = resultSet.getTimestamp("FirstLogin").toLocalDateTime();
int differentBetweenDays=Period.between(formatedFromDate, formatedToDate).getDays(); LocalDateTime logoutTime = resultSet.getTimestamp("LastLogin").toLocalDateTime();
long start_ms = System.currentTimeMillis(); totalseconds = java.time.Duration.between(loginTime, logoutTime).getSeconds();
String querys = null; }
List<EmpLoginData> listOfEmpLoginData = new ArrayList<>(); int hours = (int) (totalseconds / 3600);
for(int i=0;i<=differentBetweenDays;i++) { int minutes = (int) ((totalseconds % 3600) / 60);
String date1=fromDate+" "+fromTime; int seconds = (int) ((totalseconds % 3600) % 60);
String date2=nextDate+" "+toTime; empLoginData.setTotalLoginTime(CommomUtil.appendZero(hours) + ":" + CommomUtil.appendZero(minutes) + ":"
if(i>0) { + CommomUtil.appendZero(seconds));
fromDate= formatedFromDate.plusDays(1).toString(); listOfEmpLoginData.add(empLoginData);
formatedFromDate=LocalDate.parse(fromDate); if (flag == 1 && !listOfEmpLoginData.isEmpty()) {
nextDate= formatedNextDate.plusDays(1).toString(); Date loginTime = MyTimeUtils.tdf.parse(empLoginData.getTotalLoginTime());
formatedNextDate=LocalDate.parse(nextDate); countHours += loginTime.getTime();
date1= fromDate+" "+fromTime; listOfEmpLoginData.get(0).setTotalAvgTime(MyTimeUtils.tdf.format(countHours / listOfEmpLoginData.size()));
date2=nextDate+" "+toTime; }
} MyTimeLogger.getInstance()
if(i==differentBetweenDays && formatedNextDate==LocalDate.now()) { .info(" Time Taken to execute the query to fecth Employee data based on Dates ::: "
date2=nextDate+" "+"23:59"; + (System.currentTimeMillis() - start_ms));
} }
querys =MyTimeUtils.LOGIN_REPORT_BY_TIME + "'" +date1+ "'"+MyTimeUtils.LOGIN_REPORT_BY_TIME2+"'"+date2+"'" } catch (Exception e) {
+MyTimeUtils.LOGIN_REPORT_BY_TIME3+employeeId+ MyTimeUtils.LOGIN_REPORT_BY_TIME4; e.printStackTrace();
MyTimeLogger.getInstance().error(e.getMessage());
int countHours = 0; throw new MyTimeException(e.getMessage());
try (Connection connection = dbConnection.getDBConnection(); }
Statement statement = connection.createStatement(); return listOfEmpLoginData;
ResultSet resultSet = statement.executeQuery(querys.toString())) { }
while (resultSet.next()) {
EmpLoginData empLoginData = new EmpLoginData();
empLoginData.setEmployeeId(resultSet.getString("EmployeeCode"));
empLoginData.setEmployeeName(resultSet.getString("FirstName"));
empLoginData.setDateOfLogin(resultSet.getDate("FirstLogin").toString());
empLoginData.setFirstLogin(resultSet.getTime("FirstLogin").toString());
empLoginData.setLastLogout(resultSet.getTime("LastLogin").toString());
LocalDateTime loginTime= resultSet.getTimestamp("FirstLogin").toLocalDateTime();
LocalDateTime logoutTime= resultSet.getTimestamp("LastLogin").toLocalDateTime();
long totalseconds = java.time.Duration.between(loginTime, logoutTime).getSeconds();
int hours = (int) (totalseconds / 3600);
int minutes = (int) ((totalseconds % 3600) / 60);
int seconds = (int) ((totalseconds % 3600) % 60);
empLoginData.setTotalLoginTime(CommomUtil.appendZero(hours) + ":" + CommomUtil.appendZero(minutes) + ":" + CommomUtil.appendZero(seconds));
Date d = MyTimeUtils.tdf.parse(empLoginData.getTotalLoginTime());
countHours += d.getTime();
listOfEmpLoginData.add(empLoginData);
}
if (!listOfEmpLoginData.isEmpty()) {
listOfEmpLoginData.get(0).setTotalAvgTime(MyTimeUtils.tdf.format(countHours / listOfEmpLoginData.size()));
}
MyTimeLogger.getInstance().info(" Time Taken fecth Employee data based on Dates ::: " + (System.currentTimeMillis() - start_ms));
} catch (Exception e) {
e.printStackTrace();
MyTimeLogger.getInstance().error(e.getMessage());
throw new MyTimeException(e.getMessage());
}
}
return listOfEmpLoginData;
}
} }
\ No newline at end of file
package com.nisum.mytime.service;
import java.util.List;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.EmpLoginData;
public interface IEmployeeDataService {
List<EmpLoginData> fetchEmployeeLoginsBasedOnDates(long employeeId, String fromDate, String toDate) throws MyTimeException;
List<EmpLoginData> fetchEmployeeLoginsBasedOnDatesTime(long employeeId, String fromDate, String nextDate,String toDate,String fromTime,String toTime) throws MyTimeException;
}
package com.nisum.mytime.utils; package com.nisum.mytime.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
public class CommomUtil { public class CommomUtil {
...@@ -24,7 +29,33 @@ public class CommomUtil { ...@@ -24,7 +29,33 @@ public class CommomUtil {
return deletedManager; return deletedManager;
} }
public static String appendZero(int val) { public static String appendZero(int val) {
return val<10?("0"+val):(val+""); return val<10?("0"+val):(val+"");
} }
public static String convertTimeFormat(String time) throws ParseException {
SimpleDateFormat displayFormat = new SimpleDateFormat("HH:mm");
SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm a");
Date from = parseFormat.parse(time);
return displayFormat.format(from);
}
public static String getNextDay(String fromDate,String fromTime,String toTime) throws ParseException {
String timeSignFrom=fromTime.substring(6,8);
String timeSignTo=toTime.substring(6,8);
String timeFrom= convertTimeFormat(fromTime);
String timeTo= convertTimeFormat(toTime);
//Getting Hours from Time
String nextDate=fromDate;
int hoursFrom=Integer.parseInt(timeFrom.substring(0,2));
int hoursTo=Integer.parseInt(timeTo.substring(0,2));
if(hoursTo<=hoursFrom && timeSignFrom.equals(timeSignTo)
|| hoursTo<=hoursFrom /*this condition is applicable if fromTime is PM & toTime is AM*/) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-d");
LocalDate nextDay = (LocalDate.parse(fromDate,formatter)).plusDays(1);
nextDate=nextDay.toString();
}
return nextDate;
}
} }
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