package com.pollex.pam.service;
|
|
import java.time.Instant;
|
import java.util.List;
|
|
import javax.management.Notification;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.StringUtils;
|
|
import com.pollex.pam.domain.Appointment;
|
import com.pollex.pam.domain.Consultant;
|
import com.pollex.pam.domain.Customer;
|
import com.pollex.pam.domain.PersonalNotification;
|
import com.pollex.pam.domain.Satisfaction;
|
import com.pollex.pam.enums.NotificationTypeEnum;
|
import com.pollex.pam.enums.PersonalNotificationRoleEnum;
|
import com.pollex.pam.repository.CustomerRepository;
|
import com.pollex.pam.repository.PersonalNotificationRepository;
|
import com.pollex.pam.security.SecurityUtils;
|
import com.pollex.pam.service.dto.AppointmentUpdateDTO;
|
|
@Service
|
@Transactional
|
public class PersonalNotificationService {
|
|
@Autowired
|
PersonalNotificationRepository personalNotificationRepository;
|
|
@Autowired
|
ConsultantService consultantService;
|
|
@Autowired
|
AppointmentService appointmentService;
|
|
@Autowired
|
CustomerService customerService;
|
|
@Autowired
|
CustomerRepository customerRepository;
|
|
@Autowired
|
SatisfactionService satisfactionService;
|
|
public List<PersonalNotification> getMyPersonalNotification(Long ownerId, PersonalNotificationRoleEnum role) {
|
return personalNotificationRepository.findAllByOwnerRoleAndOwnerId(role, ownerId);
|
}
|
|
public void createSendSatisfactionToClientToCustomer(Appointment appointment) {
|
PersonalNotification entity = new PersonalNotification();
|
Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
|
String content = consultant.getName()+"顧問請您填寫滿意度評比";
|
entity.setContent(content);
|
entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
|
entity.setOwnerId(appointment.getCustomerId());
|
entity.setOwnerRole(PersonalNotificationRoleEnum.CUSTOMER);
|
entity.setTitle("填寫滿意度");
|
personalNotificationRepository.save(entity);
|
}
|
|
public void createSendNoticeToCustomer(Long appointmentId) {
|
Appointment appointment = appointmentService.findById(appointmentId);
|
PersonalNotification entity = new PersonalNotification();
|
Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
|
String content = "您有 "+consultant.getName()+"顧問的約訪通知";
|
entity.setContent(content);
|
entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
|
entity.setOwnerId(appointment.getCustomerId());
|
entity.setOwnerRole(PersonalNotificationRoleEnum.CUSTOMER);
|
entity.setTitle("顧問約訪通知");
|
personalNotificationRepository.save(entity);
|
}
|
|
public void createNotFillAppointmentSatisfactionNumberToCustomer(Long customerId, int notFillSatisfactionSum) {
|
PersonalNotification entity = new PersonalNotification();
|
|
String content = "您有 "+notFillSatisfactionSum+" 筆顧問的滿意度需要填寫";
|
entity.setContent(content);
|
entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
|
entity.setOwnerId(customerId);
|
entity.setOwnerRole(PersonalNotificationRoleEnum.CUSTOMER);
|
entity.setTitle("客戶滿意度");
|
personalNotificationRepository.save(entity);
|
}
|
|
public void createEditConsultantToConsultant(Consultant consultant) {
|
PersonalNotification entity = new PersonalNotification();
|
String content = "您的個人帳號設定已進行更新";
|
entity.setContent(content);
|
entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
|
entity.setOwnerId(consultant.getId());
|
entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
|
entity.setTitle("變更帳號資料");
|
personalNotificationRepository.save(entity);
|
}
|
|
public void createMarkAppointmentDeletedToConsultant(Appointment appointment) {
|
PersonalNotification entity = new PersonalNotification();
|
Customer customer = customerRepository.findById(appointment.getCustomerId()).get();
|
Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
|
String content = customer.getName()+"客戶已取消您的預約";
|
entity.setContent(content);
|
entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
|
entity.setOwnerId(consultant.getId());
|
entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
|
entity.setTitle("取消預約提醒");
|
personalNotificationRepository.save(entity);
|
}
|
|
public void createUpdateAppointmentToConsultant(Appointment appointment) {
|
PersonalNotification entity = new PersonalNotification();
|
Customer customer = customerRepository.findById(appointment.getCustomerId()).get();
|
Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
|
String content = customer.getName()+"客戶已更新您的預約資訊";
|
entity.setContent(content);
|
entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
|
entity.setOwnerId(consultant.getId());
|
entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
|
entity.setTitle("更新預約提醒");
|
personalNotificationRepository.save(entity);
|
}
|
|
public void createScorefactionToConsultant(Satisfaction satisfaction) {
|
PersonalNotification entity = new PersonalNotification();
|
Appointment appointment = appointmentService.findById(satisfaction.getAppointmentId());
|
Customer customer = customerRepository.findById(appointment.getCustomerId()).get();
|
Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
|
String content = customer.getName()+"客戶已對您進行滿意度評比";
|
entity.setContent(content);
|
entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
|
entity.setOwnerId(consultant.getId());
|
entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
|
entity.setTitle("客戶滿意度");
|
personalNotificationRepository.save(entity);
|
}
|
|
public void readAllMyNotification() {
|
if(StringUtils.hasText(SecurityUtils.getAgentNo())) {
|
Long consultantId = consultantService.findByAgentNo(SecurityUtils.getAgentNo()).getId();
|
readAllNotification(PersonalNotificationRoleEnum.CONSULTANT, consultantId);
|
}else if(SecurityUtils.getCustomerDBId()!=null){
|
readAllNotification(PersonalNotificationRoleEnum.CUSTOMER, SecurityUtils.getCustomerDBId());
|
}
|
}
|
|
public void readAllNotification(PersonalNotificationRoleEnum ownerRole
|
, Long ownerId) {
|
List<PersonalNotification> allNotification = personalNotificationRepository.findAllByOwnerRoleAndOwnerId(ownerRole, ownerId);
|
Instant today = Instant.now();
|
allNotification.stream()
|
.filter(notification -> notification.getReadDate()==null)
|
.forEach(notification ->{
|
notification.setReadDate(today);
|
personalNotificationRepository.saveAll(allNotification);
|
});
|
}
|
}
|