From bdae23a40c461c2c6b6ee614f661eac731c949c8 Mon Sep 17 00:00:00 2001 From: Mila <Mila@pollex.com.tw> Date: 星期三, 22 十二月 2021 14:12:05 +0800 Subject: [PATCH] Merge branch 'master' of https://192.168.0.10:8443/r/pcalife/PAM --- pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java | 105 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 95 insertions(+), 10 deletions(-) diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java index 5b67184..ec045e3 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java @@ -1,7 +1,15 @@ package com.pollex.pam.service; +import java.time.Instant; import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; +import com.pollex.pam.domain.Satisfaction; +import com.pollex.pam.service.dto.AppointmentUpdateDTO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -18,9 +26,14 @@ import com.pollex.pam.service.mapper.AppointmentDTOMapper; import com.pollex.pam.web.rest.errors.AppointmentNotFoundException; +import static com.pollex.pam.enums.AppointmentStatusEnum.AVAILABLE; +import static com.pollex.pam.enums.AppointmentStatusEnum.DELETED; + @Service @Transactional public class AppointmentService { + + private static final Logger log = LoggerFactory.getLogger(AppointmentService.class); @Autowired AppointmentRepository appointmentRepository; @@ -36,38 +49,110 @@ @Autowired AppointmentCustomerViewRepository appointmentCustomerViewRepository; - + @Autowired SatisfactionService satisfactionService; - public void customerCreateAppointment(AppointmentCreateDTO appointmentCreateDTO) { + public Appointment customerCreateAppointment(AppointmentCreateDTO appointmentCreateDTO) { Appointment appointment = appointmentDTOMapper.toAppointment(appointmentCreateDTO); + appointment.setStatus(AVAILABLE); appointment.setCustomerId(SecurityUtils.getCustomerDBId()); appointment.setCommunicateStatus(ContactStatusEnum.RESERVED); - appointmentRepository.save(appointment); - + return appointmentRepository.save(appointment); } + + public void updateAppointment(AppointmentUpdateDTO updateAppointmentDTO) { + Appointment appointment = appointmentRepository.findById(updateAppointmentDTO.getId()).get(); + + appointment.setPhone(updateAppointmentDTO.getPhone()); + appointment.setEmail(updateAppointmentDTO.getEmail()); + appointment.setContactType(updateAppointmentDTO.getContactType()); + appointment.setGender(updateAppointmentDTO.getGender()); + appointment.setAge(updateAppointmentDTO.getAge()); + appointment.setJob(updateAppointmentDTO.getJob()); + appointment.setRequirement(updateAppointmentDTO.getRequirement()); + appointment.setHopeContactTime(updateAppointmentDTO.getHopeContactTime()); + appointment.setOtherRequirement(updateAppointmentDTO.getOtherRequirement()); + appointment.setLastModifiedDate(Instant.now()); + + appointmentRepository.save(appointment); + } + + public void markAppointmentDeleted(Long appointmentId) { + Appointment appointment = appointmentRepository.findById(appointmentId).get(); + appointment.setStatus(DELETED); + appointment.setLastModifiedDate(Instant.now()); + appointmentRepository.save(appointment); + } public List<Appointment> findByAgentNo(String agentNo) { return appointmentRepository.findByAgentNo(agentNo); } public Appointment markAsContacted(Long appointmentId) { - Appointment appointment = appointmentRepository.findById(appointmentId).get(); appointment.setCommunicateStatus(ContactStatusEnum.CONTACTED); - return appointmentRepository.save(appointment); + appointment.setContactTime(Instant.now()); + appointment.setLastModifiedDate(Instant.now()); + return appointmentRepository.save(appointment); } - public AppointmentCustomerViewDTO getAppointmentDetail(Long appointmentId) { AppointmentCustomerView appointment = appointmentCustomerViewRepository.findById(appointmentId) .orElseThrow(AppointmentNotFoundException::new); - return appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointment); + + AppointmentCustomerViewDTO dto = appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointment); + setSatisfactionScore(dto, appointmentId); + return dto; } + public List<AppointmentCustomerViewDTO> getConsultantAvailableAppointments(String agentNo) { + return appointmentCustomerViewRepository.findByAgentNo(agentNo).stream() + .filter(appointment -> appointment.getStatus() == AVAILABLE) + .map(appointmentCustomerView -> { + AppointmentCustomerViewDTO dto = appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointmentCustomerView); + setSatisfactionScore(dto, appointmentCustomerView.getId()); + return dto; + }) + .collect(Collectors.toList()); + } - public List<Appointment> findByAgentNoAndCustomerId(String agentNo, Long customerId) { - return appointmentRepository.findByAgentNoAndCustomerId(agentNo, customerId); + public void setSatisfactionScore(AppointmentCustomerViewDTO dto, Long appointmentId) { + satisfactionService.getByAppointmentId(appointmentId).ifPresent(satisfaction -> { + dto.setSatisfactionScore(satisfaction.getScore()); + }); + } + + public List<AppointmentCustomerView> findAvailableByAgentNoAndCustomerId(String agentNo, Long customerId) { + return appointmentCustomerViewRepository.findByAgentNoAndCustomerId(agentNo, customerId) + .stream() + .filter(appointmentCustomerView -> appointmentCustomerView.getStatus() == AVAILABLE) + .collect(Collectors.toList()); + } + + public Optional<Appointment> findLatestAppointmentByAgentNoAndCustomerId(String agentNo, Long customerId) { + return appointmentRepository.findTopByAgentNoAndCustomerIdOrderByAppointmentDateDesc(agentNo, customerId); + } + + public void recordConsultantReadTime(Long appointmentId) { + Appointment appointment = appointmentRepository.findById(appointmentId).get(); + + if(appointment.getConsultantReadTime() == null) { + appointment.setConsultantReadTime(Instant.now()); + appointmentRepository.save(appointment); + } + else { + log.debug("this appointment was read, read time = {}", appointment.getConsultantReadTime()); + } + } + + public void recordAllAppointmentsView(String agentNo) { + List<Appointment> consultantNotViewAppointments = findByAgentNo(agentNo) + .stream() + .filter(appointment -> Objects.isNull(appointment.getConsultantViewTime())) + .collect(Collectors.toList()); + + consultantNotViewAppointments.forEach(appointment -> appointment.setConsultantViewTime(Instant.now())); + appointmentRepository.saveAll(consultantNotViewAppointments); } } -- Gitblit v1.8.0