package com.pollex.pam.service;
|
|
import com.pollex.pam.domain.Consultant;
|
import com.pollex.pam.domain.CustomFavoriteConsultant;
|
import com.pollex.pam.domain.User;
|
import com.pollex.pam.enums.ContactStatusEnum;
|
import com.pollex.pam.repository.ConsultantRepository;
|
import com.pollex.pam.repository.CustomFavoriteConsultantRepository;
|
import com.pollex.pam.service.dto.*;
|
import com.pollex.pam.service.mapper.ConsultantMapper;
|
import com.pollex.pam.web.rest.errors.ConsultantNotFoundException;
|
import com.pollex.pam.web.rest.errors.NotLoginException;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.Collections;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class ConsultantService {
|
|
private final static Logger log = LoggerFactory.getLogger(ConsultantService.class);
|
|
private final ConsultantRepository consultantRepository;
|
private final CustomFavoriteConsultantRepository customFavoriteConsultantRepository;
|
private final ConsultantMapper consultantMapper;
|
private final UserService userService;
|
|
public ConsultantService(
|
ConsultantRepository consultantRepository,
|
CustomFavoriteConsultantRepository customFavoriteConsultantRepository,
|
ConsultantMapper consultantMapper,
|
UserService userService
|
) {
|
this.consultantRepository = consultantRepository;
|
this.customFavoriteConsultantRepository = customFavoriteConsultantRepository;
|
this.consultantMapper = consultantMapper;
|
this.userService = userService;
|
}
|
|
public List<ConsultantDTO> getMyConsultantList() {
|
User user = userService.getUserWithAuthorities().orElseThrow(NotLoginException::new);
|
return customFavoriteConsultantRepository.findAllByCustomId(user.getId())
|
.stream()
|
.map(consultantMapper::toDto)
|
.collect(Collectors.toList());
|
}
|
|
public List<ConsultantDTO> getRecommendConsultantList() {
|
return consultantRepository.findAllByRecommendIsTrue()
|
.stream()
|
.map(consultantMapper::toDto)
|
.collect(Collectors.toList());
|
}
|
|
public List<ConsultantDTO> strictQueryConsultant(StrictQueryConsultantParam param) {
|
|
|
return Collections.emptyList();
|
}
|
|
public List<ConsultantDTO> fastQueryConsultant(FastQueryConsultantParam param) {
|
return consultantRepository.findAll(ConsultantQuerySpec.getFastQuerySpec(param))
|
.stream()
|
.map(consultantMapper::toDto)
|
.collect(Collectors.toList());
|
}
|
|
public ConsultantDetailDTO getConsultantDetail(String agentNo) {
|
Consultant consultant = consultantRepository.findFirstByAgentNo(agentNo).orElseThrow(ConsultantNotFoundException::new);
|
return consultantMapper.toDetailDto(consultant);
|
}
|
|
@Transactional
|
public void addConsultantToCustomList(AddConsultantParam param) {
|
List<String> agentNoList = param.getAgentNoList();
|
List<Consultant> consultants = consultantRepository.findAllByAgentNoIn(agentNoList);
|
User user = userService.getUserWithAuthorities().orElseThrow(NotLoginException::new);
|
|
consultants.forEach(consultant -> {
|
boolean isConsultantInList = customFavoriteConsultantRepository.findOneByCustomIdAndConsultant(user.getId(), consultant).isPresent();
|
|
if(!isConsultantInList) {
|
CustomFavoriteConsultant customFavoriteConsultant = new CustomFavoriteConsultant();
|
customFavoriteConsultant.setConsultant(consultant);
|
customFavoriteConsultant.setCustomId(user.getId());
|
customFavoriteConsultant.setContactStatus(ContactStatusEnum.PICKED);
|
|
customFavoriteConsultantRepository.save(customFavoriteConsultant);
|
}
|
else {
|
log.info("The consultant is in custom favorite list!");
|
}
|
});
|
|
}
|
}
|