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,12 +26,13 @@ import com.nisum.mytime.utils.MyTimeUtils; ...@@ -30,12 +26,13 @@ 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)
throws MyTimeException {
long start_ms = System.currentTimeMillis(); long start_ms = System.currentTimeMillis();
String querys = null; String querys = null;
if (employeeId == 0) { if (employeeId == 0) {
...@@ -45,78 +42,57 @@ public class EmployeeDataService { ...@@ -45,78 +42,57 @@ public class EmployeeDataService {
} else { } else {
querys = MyTimeUtils.ABESENT_STATUS_QUERY + "'" + fromDate.replace("-", "/") + "'" querys = MyTimeUtils.ABESENT_STATUS_QUERY + "'" + fromDate.replace("-", "/") + "'"
+ MyTimeUtils.ABESENT_STATUS_QUERY1 + "'" + toDate.replace("-", "/") + "'" + MyTimeUtils.ABESENT_STATUS_QUERY1 + "'" + toDate.replace("-", "/") + "'"
+ MyTimeUtils.ABESENT_STATUS_QUERY2 + employeeId + MyTimeUtils.ABESENT_STATUS_QUERY2 + employeeId + MyTimeUtils.ABESENT_STATUS_QUERY3;
+ MyTimeUtils.ABESENT_STATUS_QUERY3;
}
int countHours = 0;
List<EmpLoginData> listOfEmpLoginData = new ArrayList<>();
try (Connection connection = dbConnection.getDBConnection();
Statement statement = connection.createStatement();
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());
Time from = resultSet.getTime("FirstLogin");
Time to = resultSet.getTime("LastLogin");
long milliseconds = to.getTime() - from.getTime();
int seconds = (int) milliseconds / 1000;
int hours = seconds / 3600;
int minutes = (seconds % 3600) / 60;
seconds = (seconds % 3600) % 60;
empLoginData.setTotalLoginTime(hours + ":" + minutes + ":" + seconds);
empLoginData.setTotalLoginTime(hours + ":" + minutes + ":" + 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());
} }
List<EmpLoginData> listOfEmpLoginData = executeQuery(querys, 1);
MyTimeLogger.getInstance()
.info(" Time Taken fecth Employee data based on Dates ::: " + (System.currentTimeMillis() - start_ms));
return listOfEmpLoginData; return listOfEmpLoginData;
} }
public List<EmpLoginData> fetchEmployeeLoginsBasedOnDatesTime(long employeeId, String fromDate, String nextDate,String toDate,String fromTime,String toTime) throws MyTimeException { public List<EmpLoginData> fetchEmployeeLoginsBasedOnDatesTime(long employeeId, String fromDate, String nextDate,
String toDate, String fromTime, String toTime) throws MyTimeException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate formatedFromDate=LocalDate.parse(fromDate,formatter); LocalDate formatedFromDate = LocalDate.parse(fromDate, formatter);
LocalDate formatedNextDate=LocalDate.parse(nextDate,formatter); LocalDate formatedNextDate = LocalDate.parse(nextDate, formatter);
LocalDate formatedToDate=LocalDate.parse(toDate,formatter); LocalDate formatedToDate = LocalDate.parse(toDate, formatter);
int differentBetweenDays=Period.between(formatedFromDate, formatedToDate).getDays(); int differentBetweenDays = Period.between(formatedFromDate, formatedToDate).getDays();
long start_ms = System.currentTimeMillis(); long start_ms = System.currentTimeMillis();
String querys = null; String query = null;
List<EmpLoginData> listOfEmpLoginData = new ArrayList<>(); List<EmpLoginData> resultSetData = new ArrayList<>();
for(int i=0;i<=differentBetweenDays;i++) { List<EmpLoginData> listOfEmpLoginDetails = new ArrayList<>();
String date1=fromDate+" "+fromTime; for (int i = 0; i <= differentBetweenDays; i++) {
String date2=nextDate+" "+toTime; String fromDateTime = fromDate + " " + fromTime;
if(i>0) { String toDateTime = nextDate + " " + toTime;
fromDate= formatedFromDate.plusDays(1).toString(); if (i > 0) {
formatedFromDate=LocalDate.parse(fromDate); fromDate = formatedFromDate.plusDays(1).toString();
nextDate= formatedNextDate.plusDays(1).toString(); formatedFromDate = LocalDate.parse(fromDate);
formatedNextDate=LocalDate.parse(nextDate); nextDate = formatedNextDate.plusDays(1).toString();
date1= fromDate+" "+fromTime; formatedNextDate = LocalDate.parse(nextDate);
date2=nextDate+" "+toTime; fromDateTime = fromDate + " " + fromTime;
toDateTime = nextDate + " " + toTime;
}
if (i == differentBetweenDays && formatedNextDate == LocalDate.now()) {
toDateTime = nextDate + " " + "23:59";
} }
if(i==differentBetweenDays && formatedNextDate==LocalDate.now()) { query = MyTimeUtils.LOGIN_REPORT_BY_TIME + "'" + fromDateTime + "'" + MyTimeUtils.LOGIN_REPORT_BY_TIME2 + "'"
date2=nextDate+" "+"23:59"; + 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;
} }
querys =MyTimeUtils.LOGIN_REPORT_BY_TIME + "'" +date1+ "'"+MyTimeUtils.LOGIN_REPORT_BY_TIME2+"'"+date2+"'"
+MyTimeUtils.LOGIN_REPORT_BY_TIME3+employeeId+ MyTimeUtils.LOGIN_REPORT_BY_TIME4;
private List<EmpLoginData> executeQuery(String query, int flag) throws MyTimeException {
long start_ms = System.currentTimeMillis();
long totalseconds = 0;
int countHours = 0; int countHours = 0;
List<EmpLoginData> listOfEmpLoginData = new ArrayList<>();
try (Connection connection = dbConnection.getDBConnection(); try (Connection connection = dbConnection.getDBConnection();
Statement statement = connection.createStatement(); Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(querys.toString())) { ResultSet resultSet = statement.executeQuery(query.toString())) {
while (resultSet.next()) { while (resultSet.next()) {
EmpLoginData empLoginData = new EmpLoginData(); EmpLoginData empLoginData = new EmpLoginData();
empLoginData.setEmployeeId(resultSet.getString("EmployeeCode")); empLoginData.setEmployeeId(resultSet.getString("EmployeeCode"));
...@@ -124,32 +100,37 @@ public class EmployeeDataService { ...@@ -124,32 +100,37 @@ public class EmployeeDataService {
empLoginData.setDateOfLogin(resultSet.getDate("FirstLogin").toString()); empLoginData.setDateOfLogin(resultSet.getDate("FirstLogin").toString());
empLoginData.setFirstLogin(resultSet.getTime("FirstLogin").toString()); empLoginData.setFirstLogin(resultSet.getTime("FirstLogin").toString());
empLoginData.setLastLogout(resultSet.getTime("LastLogin").toString()); empLoginData.setLastLogout(resultSet.getTime("LastLogin").toString());
if (flag == 1) {
LocalDateTime loginTime= resultSet.getTimestamp("FirstLogin").toLocalDateTime(); Time from = resultSet.getTime("FirstLogin");
LocalDateTime logoutTime= resultSet.getTimestamp("LastLogin").toLocalDateTime(); Time to = resultSet.getTime("LastLogin");
long totalseconds = java.time.Duration.between(loginTime, logoutTime).getSeconds(); long milliseconds = to.getTime() - from.getTime();
totalseconds = milliseconds / 1000;
}
if (flag == 2) {
LocalDateTime loginTime = resultSet.getTimestamp("FirstLogin").toLocalDateTime();
LocalDateTime logoutTime = resultSet.getTimestamp("LastLogin").toLocalDateTime();
totalseconds = java.time.Duration.between(loginTime, logoutTime).getSeconds();
}
int hours = (int) (totalseconds / 3600); int hours = (int) (totalseconds / 3600);
int minutes = (int) ((totalseconds % 3600) / 60); int minutes = (int) ((totalseconds % 3600) / 60);
int seconds = (int) ((totalseconds % 3600) % 60); int seconds = (int) ((totalseconds % 3600) % 60);
empLoginData.setTotalLoginTime(CommomUtil.appendZero(hours) + ":" + CommomUtil.appendZero(minutes) + ":"
empLoginData.setTotalLoginTime(CommomUtil.appendZero(hours) + ":" + CommomUtil.appendZero(minutes) + ":" + CommomUtil.appendZero(seconds)); + CommomUtil.appendZero(seconds));
Date d = MyTimeUtils.tdf.parse(empLoginData.getTotalLoginTime());
countHours += d.getTime();
listOfEmpLoginData.add(empLoginData); listOfEmpLoginData.add(empLoginData);
if (flag == 1 && !listOfEmpLoginData.isEmpty()) {
} Date loginTime = MyTimeUtils.tdf.parse(empLoginData.getTotalLoginTime());
if (!listOfEmpLoginData.isEmpty()) { countHours += loginTime.getTime();
listOfEmpLoginData.get(0).setTotalAvgTime(MyTimeUtils.tdf.format(countHours / listOfEmpLoginData.size())); 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)); MyTimeLogger.getInstance()
.info(" Time Taken to execute the query to fecth Employee data based on Dates ::: "
+ (System.currentTimeMillis() - start_ms));
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
MyTimeLogger.getInstance().error(e.getMessage()); MyTimeLogger.getInstance().error(e.getMessage());
throw new MyTimeException(e.getMessage()); throw new MyTimeException(e.getMessage());
} }
}
return listOfEmpLoginData; 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 {
...@@ -27,4 +32,30 @@ public class CommomUtil { ...@@ -27,4 +32,30 @@ public class CommomUtil {
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