保誠-保戶業務員媒合平台
KillerADO
2021-12-23 07d6fd2c5c6a35a33ad0dd9556b63fd6156d0974
pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java
@@ -3,10 +3,11 @@
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.enums.AppointmentStatusEnum;
import com.pollex.pam.service.dto.AppointmentDTO;
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;
@@ -57,18 +58,29 @@
        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);
    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);
    }
@@ -77,23 +89,48 @@
   }
   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 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) {
@@ -116,12 +153,5 @@
        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());
    }
}