From e0395e332ec0d7a0ee42f611327435c0f3724c00 Mon Sep 17 00:00:00 2001 From: wayne <wayne8692wayne8692@gmail.com> Date: 星期五, 03 十二月 2021 11:36:13 +0800 Subject: [PATCH] Merge branch '顧問聯繫時間' --- pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java | 92 ++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 76 insertions(+), 16 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 5932aca..f1785b9 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,14 @@ package com.pollex.pam.service; +import java.time.Instant; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import com.pollex.pam.enums.AppointmentStatusEnum; +import com.pollex.pam.service.dto.AppointmentDTO; +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; @@ -16,53 +23,106 @@ import com.pollex.pam.service.dto.AppointmentCustomerViewDTO; import com.pollex.pam.service.mapper.AppointmentCustomerViewMapper; import com.pollex.pam.service.mapper.AppointmentDTOMapper; -import com.pollex.pam.service.mapper.AppointmentMapper; 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; - + @Autowired AppointmentDTOMapper appointmentDTOMapper; - + @Autowired ConsultantService consultantService; - + @Autowired AppointmentCustomerViewMapper appointmentCustomerViewMapper; - + @Autowired AppointmentCustomerViewRepository appointmentCustomerViewRepository; - - + + @Autowired + SatisfactionService satisfactionService; + public void customerCreateAppointment(AppointmentCreateDTO appointmentCreateDTO) { Appointment appointment = appointmentDTOMapper.toAppointment(appointmentCreateDTO); - appointment.setCustomerId(SecurityUtils.getCustomerId()); + appointment.setStatus(AVAILABLE); + appointment.setCustomerId(SecurityUtils.getCustomerDBId()); appointment.setCommunicateStatus(ContactStatusEnum.RESERVED); appointmentRepository.save(appointment); } + public void updateAppointment(AppointmentDTO appointmentDTO) { + Appointment appointment = appointmentDTOMapper.toAppointment(appointmentDTO); + appointment.setStatus(AVAILABLE); + appointmentRepository.save(appointment); + } + + public void markAppointmentDeleted(Long appointmentId) { + Appointment appointment = appointmentRepository.findById(appointmentId).get(); + appointment.setStatus(DELETED); + appointmentRepository.save(appointment); + } public List<Appointment> findByAgentNo(String agentNo) { return appointmentRepository.findByAgentNo(agentNo); } - public void markAsContacted(Long appointmentId) { - - Appointment appointment = appointmentRepository.getById(appointmentId); - appointment.setCommunicateStatus(ContactStatusEnum.CONTACTED); - appointmentRepository.save(appointment); - } + public Appointment markAsContacted(Long appointmentId) { + Appointment appointment = appointmentRepository.findById(appointmentId).get(); + appointment.setCommunicateStatus(ContactStatusEnum.CONTACTED); + appointment.setContactTime(Instant.now()); + return appointmentRepository.save(appointment); + } public AppointmentCustomerViewDTO getAppointmentDetail(Long appointmentId) { AppointmentCustomerView appointment = appointmentCustomerViewRepository.findById(appointmentId) .orElseThrow(AppointmentNotFoundException::new); return appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointment); } - + + public List<AppointmentCustomerView> findAvailableByAgentNoAndCustomerId(String agentNo, Long customerId) { + return appointmentCustomerViewRepository.findByAgentNoAndCustomerId(agentNo, customerId) + .stream() + .filter(appointmentCustomerView -> appointmentCustomerView.getStatus() == AVAILABLE) + .collect(Collectors.toList()); + } + + 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); + } + + public List<AppointmentCustomerViewDTO> getConsultantAppointments(String agentNo) { + return appointmentCustomerViewRepository.findByAgentNo(agentNo).stream() + .filter(appointment -> appointment.getStatus() != DELETED) + .map(appointmentCustomerViewMapper::toAppointmentCustomerViewDTO) + .collect(Collectors.toList()); + } } -- Gitblit v1.8.0