scheduler related changes

parent 73a120f3
package com.nisum.myteam.model.dao;
import lombok.*;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.io.Serializable;
import java.util.Date;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "schedulersLogDetails")
public class SchedulersLogsDetails implements Serializable {
private static final long serialVersionUID = 6160218148752874740L;
@Id
private String id;
private String schedulerName;
private String schedulerStatus;
private Date createdDate;
private String date;
}
package com.nisum.myteam.model.vo;
import com.nisum.myteam.model.EmployeeLoginData;
import com.nisum.myteam.model.dao.EffectiveLoginData;
import lombok.*;
import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
public class LoginDetailsVO {
private String employeeId;
private String employeeName;
private String emailId;
private List<EffectiveLoginData> effectiveLoginData;
private List<EmployeeLoginData> employeeLoginDataList;
private String avgHours;
private String orphanLogin;
}
package com.nisum.myteam.repository;
import com.nisum.myteam.model.dao.SchedulersLogsDetails;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.Date;
public interface SchedulersLogsDetailsRepo extends MongoRepository<SchedulersLogsDetails,String> {
//SchedulersLogsDetails findBySchedulerNameAndCreatedDate(Date fromDate, Date toDate, String schedulerName);
SchedulersLogsDetails findBySchedulerNameAndCreatedDate(String schedulerName, Date createdDate);
}
package com.nisum.myteam.schedular;
import com.nisum.myteam.exception.handler.MyTeamException;
import com.nisum.myteam.model.Mail;
import com.nisum.myteam.model.dao.EffectiveLoginData;
import com.nisum.myteam.model.dao.Employee;
import com.nisum.myteam.model.dao.SchedulersLogsDetails;
import com.nisum.myteam.model.vo.LoginDetailsVO;
import com.nisum.myteam.service.IEffectiveLoginTimeService;
import com.nisum.myteam.service.IEmployeeService;
import com.nisum.myteam.service.IMailService;
import com.nisum.myteam.service.ISchedulersLogsDetailsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
public class EmployeeAVGHoursScheduler {
private static final Logger logger = LoggerFactory.getLogger(EmployeeAVGHoursScheduler.class);
@Autowired
private IEmployeeService employeeService;
@Autowired
private IEffectiveLoginTimeService effectiveLoginTimeService;
@Autowired
private ISchedulersLogsDetailsService schedulersLogsDetailsService;
@Autowired
private IMailService mailService;
@Autowired
private Environment environment;
@Value("${myTeam.exemptHours.fromemail}")
private String fromMail;
@Value("${myTeam.exemptHours.toemail}")
private String toEmail;
@Scheduled(cron = "${email.exemptHours.notification.cron}")
private void sendEmployessAvgHoursMailToLeads() throws IOException, MessagingException {
logger.info("sendEmployessAvgHoursMailToLeadsnotification::");
SchedulersLogsDetails schedulersLogsDetails = schedulersLogsDetailsService.getCurrentSchedulerLogDetails("EmployeeAVGHoursScheduler", new Date());
if (schedulersLogsDetails == null || !"Active".equalsIgnoreCase(schedulersLogsDetails.getSchedulerStatus())) {
sendhoursExemptEmpListToLeads();
}
}
private void sendhoursExemptEmpListToLeads() throws MessagingException {
SchedulersLogsDetails schedulersLogsDetails;
Mail mail = new Mail();
LocalDate dt = LocalDate.now();
try {
Date friday = Date.from(dt.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY)).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
Date monday = Date.from(dt.with(TemporalAdjusters.previous(DayOfWeek.MONDAY)).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
List<Employee> activeEmpList = employeeService.getActiveEmployees();
List<LoginDetailsVO> hoursExemptEmployeeList = new ArrayList<>();
activeEmpList.removeIf(e -> "At Client Location".equalsIgnoreCase(e.getEmpSubStatus() instanceof String ? (String) e.getEmpSubStatus() : null));
activeEmpList.removeIf(e -> {
try {
Map<String, Object> obj = effectiveLoginTimeService.getEmployeesEffLoginData(new Long(e.getEmployeeId()), monday, friday);
if (obj != null && (String) obj.get("averageTime") != null) {
String hoursMins[] = ((String) obj.get("averageTime")).split(":");
if (hoursMins != null) {
boolean isHoursExemptEmployee = new Long(hoursMins[0]) < 8;
if (isHoursExemptEmployee) {
//System.out.println(" Hours avg " + obj.get("data"));
LoginDetailsVO loginDetailsVO = new LoginDetailsVO();
loginDetailsVO.setEmployeeId(e.getEmployeeId());
loginDetailsVO.setEmployeeName(e.getEmployeeName());
loginDetailsVO.setAvgHours((String) obj.get("averageTime"));
loginDetailsVO.setEffectiveLoginData((List<EffectiveLoginData>) obj.get("data"));
List<EffectiveLoginData> effectiveLoginDataList = (List<EffectiveLoginData>) obj.get("data");
StringBuilder orphanLoginSB = new StringBuilder();
effectiveLoginDataList.stream().forEach(eloginData -> {
if (eloginData.getOrphanLogin() != null && !eloginData.getOrphanLogin().isEmpty())
orphanLoginSB.append(" " + parseDate(eloginData.getDate(), "dd-MMM-yyyy") + " - " + eloginData.getOrphanLogin().stream().collect(Collectors.joining(",", "[", "]")));
});
loginDetailsVO.setOrphanLogin(orphanLoginSB.toString());
hoursExemptEmployeeList.add(loginDetailsVO);
}
return isHoursExemptEmployee;
}
}
} catch (ParseException ex) {
ex.printStackTrace();
}
return false;
});
mail.setFrom(fromMail);
mail.setTo(toEmail);
mail.setSubject(" hoursExemptEmployeeList ");
mail.setCc(new String[]{fromMail});
mailService.sendExemptHoursEmployeDetailsToLeads(mail, hoursExemptEmployeeList);
schedulersLogsDetails = new SchedulersLogsDetails();
schedulersLogsDetails.setCreatedDate(new Date());
schedulersLogsDetails.setSchedulerName("EmployeeAVGHoursScheduler");
schedulersLogsDetails.setSchedulerStatus("Active");
schedulersLogsDetails.setDate(parseDate(new Date(), "yyyy-MM-dd"));
schedulersLogsDetailsService.saveSchedulersLog(schedulersLogsDetails);
} catch (MyTeamException e) {
logger.error("Error " + e.getMessage());
} catch (IOException ie) {
logger.error("ie Error " + ie.getMessage());
}
}
public static String parseDate(Date date, String format) {
return new SimpleDateFormat(format).format(date);
}
}
package com.nisum.myteam.service;
import com.nisum.myteam.model.dao.SchedulersLogsDetails;
import java.util.Date;
public interface ISchedulersLogsDetailsService {
public SchedulersLogsDetails getCurrentSchedulerLogDetails(String schedulerName, Date createdDate);
public void saveSchedulersLog(SchedulersLogsDetails schedulersLogsDetails);
}
package com.nisum.myteam.service.impl;
import com.nisum.myteam.model.dao.SchedulersLogsDetails;
import com.nisum.myteam.repository.SchedulersLogsDetailsRepo;
import com.nisum.myteam.service.ISchedulersLogsDetailsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
@Service
public class SchedulersLogsDetailsService implements ISchedulersLogsDetailsService {
@Autowired
private SchedulersLogsDetailsRepo schedulersLogsDetailsRepo;
@Autowired
private MongoTemplate mongoTemplate;
@Override
public SchedulersLogsDetails getCurrentSchedulerLogDetails(String schedulerName, Date createdDate) {
Query query = new Query(Criteria.where("schedulerName").in(schedulerName).and("Date").in(parseDate(new Date(), "yyyy-MM-dd")));
SchedulersLogsDetails schedulersLogsDetails = mongoTemplate.findOne(query, SchedulersLogsDetails.class);
// SchedulersLogsDetails schedulersLogsDetails = schedulersLogsDetailsRepo.findBySchedulerNameAndCreatedDate(schedulerName, getCurrentDate());
return schedulersLogsDetails;
}
@Override
public void saveSchedulersLog(SchedulersLogsDetails schedulersLogsDetails) {
schedulersLogsDetailsRepo.save(schedulersLogsDetails);
}
public static String parseDate(Date date, String format) {
return new SimpleDateFormat(format).format(date);
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Employee Details Average hours less than at Workplace</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<style>
table#alter th, td {
border: 1px solid black;
border-collapse: collapse;
}
th, td {
padding: 10px;
}
table#alter tr:nth-child(even) {
background-color: #eee;
}
table#alter tr:nth-child(odd) {
background-color: #fff;
}
table#alter th {
color: white;
background-color: gray;
}
</style>
</head>
<body style="margin: 0; padding: 0;">
<table width="500px" cellpadding="10" cellspacing="0" style="border: 1px dotted #ccc; border-top: none; background: #f8f8f8; font-family: sans-serif; font-size: 14px; margin: 0 auto;">
<tr style="background: #00b4e6; color:#fff; font-size: 40px;">
<td>nisum</td>
</tr>
<tr>
<td align="center" style="border-bottom: 1px dotted #ccc; font-size: 20px;">Employee Details Less than 8 hours IN Work area</td>
</tr>
<tr>
<td style="padding: 10px 10px 0 20px; width: 100px; ">Hi,
<p>
Please find below employees are less than 8 hours in Work area
</p>
</td>
</tr>
<tr>
<td ><table align = "center" id="alter">
<tr><th style = "padding: 10px;">Employee ID </th><th style = "padding: 10px;">Employee Name</th><th style = "padding: 10px;">Avg. Hours</th><th style = "padding: 10px;">Orphan Login Hours</th></tr>
employeeList
</table> </td>
</tr>
<tr>
<td >
Regards, <br />
Nisum Consulting
</td>
</tr>
</table>
</body>
</html>
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