From 5506b4a7950ac5cb59e3d966ddda18b17bd39373 Mon Sep 17 00:00:00 2001 From: wayne <wayne8692wayne8692@gmail.com> Date: 星期一, 15 十一月 2021 11:40:01 +0800 Subject: [PATCH] [update] 我的顧問清單新增最後預約單id --- pamapi/src/main/java/com/pollex/pam/repository/CustomFavoriteConsultantRepository.java | 4 pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java | 32 ++++++++-- pamapi/src/main/java/com/pollex/pam/web/rest/LoginResource.java | 4 pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java | 9 ++- pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java | 7 ++ pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java | 5 + pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java | 63 +++++++++++---------- pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java | 13 ++++ pamapi/src/main/java/com/pollex/pam/domain/CustomFavoriteConsultant.java | 29 ++------- pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java | 1 10 files changed, 100 insertions(+), 67 deletions(-) diff --git a/pamapi/src/main/java/com/pollex/pam/domain/CustomFavoriteConsultant.java b/pamapi/src/main/java/com/pollex/pam/domain/CustomFavoriteConsultant.java index 3723504..055617d 100644 --- a/pamapi/src/main/java/com/pollex/pam/domain/CustomFavoriteConsultant.java +++ b/pamapi/src/main/java/com/pollex/pam/domain/CustomFavoriteConsultant.java @@ -1,7 +1,5 @@ package com.pollex.pam.domain; -import com.pollex.pam.enums.ContactStatusEnum; - import javax.persistence.*; import java.io.Serializable; @@ -20,12 +18,8 @@ @JoinColumn(name = "consultant_id") private Consultant consultant; - @Column(name = "custom_id") - private Long customId; - - @Enumerated(EnumType.STRING) - @Column(name = "contact_status") - private ContactStatusEnum contactStatus; + @Column(name = "customer_id") + private Long customerId; public Long getId() { return id; @@ -43,20 +37,12 @@ this.consultant = consultant; } - public Long getCustomId() { - return customId; + public Long getCustomerId() { + return customerId; } - public void setCustomId(Long customId) { - this.customId = customId; - } - - public ContactStatusEnum getContactStatus() { - return contactStatus; - } - - public void setContactStatus(ContactStatusEnum contactStatus) { - this.contactStatus = contactStatus; + public void setCustomerId(Long customId) { + this.customerId = customId; } @Override @@ -64,8 +50,7 @@ return "CustomFavoriteConsultant{" + "id=" + id + ", consultant=" + consultant + - ", customId=" + customId + - ", contactStatus='" + contactStatus + '\'' + + ", customerId=" + customerId + '}'; } } diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java index 245fde3..fe3bc8c 100644 --- a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java +++ b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java @@ -12,4 +12,5 @@ List<Appointment> findByAgentNo(String agentNo); + List<Appointment> findByAgentNoAndCustomerId(String agentNo, Long customerId); } diff --git a/pamapi/src/main/java/com/pollex/pam/repository/CustomFavoriteConsultantRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/CustomFavoriteConsultantRepository.java index 0e7f4a5..8dc101c 100644 --- a/pamapi/src/main/java/com/pollex/pam/repository/CustomFavoriteConsultantRepository.java +++ b/pamapi/src/main/java/com/pollex/pam/repository/CustomFavoriteConsultantRepository.java @@ -10,6 +10,6 @@ @Repository public interface CustomFavoriteConsultantRepository extends JpaRepository<CustomFavoriteConsultant, Long> { - List<CustomFavoriteConsultant> findAllByCustomId(Long id); - Optional<CustomFavoriteConsultant> findOneByCustomIdAndConsultant(Long customId, Consultant consultant); + List<CustomFavoriteConsultant> findAllByCustomerId(Long id); + Optional<CustomFavoriteConsultant> findOneByCustomerIdAndConsultant(Long customerId, Consultant consultant); } 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..0da3432 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java @@ -22,10 +22,10 @@ @Service @Transactional public class AppointmentService { - + @Autowired AppointmentRepository appointmentRepository; - + @Autowired AppointmentDTOMapper appointmentDTOMapper; @@ -46,7 +46,6 @@ appointmentRepository.save(appointment); } - public List<Appointment> findByAgentNo(String agentNo) { return appointmentRepository.findByAgentNo(agentNo); } @@ -65,4 +64,8 @@ return appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointment); } + + public List<Appointment> findByAgentNoAndCustomerId(String agentNo, Long customerId) { + return appointmentRepository.findByAgentNoAndCustomerId(agentNo, customerId); + } } diff --git a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java index d26676d..ef88b61 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java @@ -1,28 +1,21 @@ package com.pollex.pam.service; -import com.pollex.pam.domain.Appointment; import com.pollex.pam.domain.AppointmentCustomerView; 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.AppointmentCustomerViewRepository; import com.pollex.pam.repository.ConsultantRepository; import com.pollex.pam.repository.CustomFavoriteConsultantRepository; import com.pollex.pam.security.SecurityUtils; import com.pollex.pam.service.dto.*; import com.pollex.pam.service.mapper.AppointmentCustomerViewMapper; -import com.pollex.pam.service.mapper.AppointmentMapper; 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.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -31,35 +24,33 @@ private static final Logger log = LoggerFactory.getLogger(ConsultantService.class); - private final ConsultantRepository consultantRepository; - private final CustomFavoriteConsultantRepository customFavoriteConsultantRepository; - private final ConsultantMapper consultantMapper; - private final UserService userService; - - @Autowired - AppointmentService appointmentService; - - @Autowired - AppointmentCustomerViewRepository appointmentCustomerViewRepository; - - @Autowired - AppointmentCustomerViewMapper appointmentCustomerViewMapper; - + final ConsultantRepository consultantRepository; + final CustomFavoriteConsultantRepository customFavoriteConsultantRepository; + final ConsultantMapper consultantMapper; + final AppointmentService appointmentService; + final AppointmentCustomerViewRepository appointmentCustomerViewRepository; + final AppointmentCustomerViewMapper appointmentCustomerViewMapper; + public ConsultantService( ConsultantRepository consultantRepository, CustomFavoriteConsultantRepository customFavoriteConsultantRepository, ConsultantMapper consultantMapper, - UserService userService + UserService userService, + AppointmentService appointmentService, + AppointmentCustomerViewRepository appointmentCustomerViewRepository, + AppointmentCustomerViewMapper appointmentCustomerViewMapper ) { this.consultantRepository = consultantRepository; this.customFavoriteConsultantRepository = customFavoriteConsultantRepository; this.consultantMapper = consultantMapper; - this.userService = userService; + this.appointmentService = appointmentService; + this.appointmentCustomerViewRepository = appointmentCustomerViewRepository; + this.appointmentCustomerViewMapper = appointmentCustomerViewMapper; } public List<ConsultantDTO> getMyConsultantList() { - User user = userService.getUserWithAuthorities().orElseThrow(NotLoginException::new); - return customFavoriteConsultantRepository.findAllByCustomId(user.getId()) + Long userId = SecurityUtils.getCustomerId(); + return customFavoriteConsultantRepository.findAllByCustomerId(userId) .stream() .map(consultantMapper::toDto) .collect(Collectors.toList()); @@ -95,21 +86,20 @@ public void addConsultantToCustomList(AddConsultantParam param) { List<String> agentNoList = param.getAgentNoList(); List<Consultant> consultants = consultantRepository.findAllByAgentNoIn(agentNoList); - User user = userService.getUserWithAuthorities().orElseThrow(NotLoginException::new); + Long userId = SecurityUtils.getCustomerId(); consultants.forEach(consultant -> { - boolean isConsultantInList = customFavoriteConsultantRepository.findOneByCustomIdAndConsultant(user.getId(), consultant).isPresent(); + boolean isConsultantInList = customFavoriteConsultantRepository.findOneByCustomerIdAndConsultant(userId, consultant).isPresent(); if(!isConsultantInList) { CustomFavoriteConsultant customFavoriteConsultant = new CustomFavoriteConsultant(); customFavoriteConsultant.setConsultant(consultant); - customFavoriteConsultant.setCustomId(user.getId()); - customFavoriteConsultant.setContactStatus(ContactStatusEnum.PICKED); + customFavoriteConsultant.setCustomerId(userId); customFavoriteConsultantRepository.save(customFavoriteConsultant); } else { - log.info("The consultant is in custom favorite list! customId = {}, consultant AgentNo = {}", user.getId(), consultant.getAgentNo()); + log.info("The consultant is in customer favorite list! customId = {}, consultant AgentNo = {}", userId, consultant.getAgentNo()); } }); @@ -120,4 +110,17 @@ List<AppointmentCustomerView> appointmentList = appointmentCustomerViewRepository.findByAgentNo(agentNo); return appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointmentList); } + + public void removeConsultantFromCustomList(String agentNo) { + Long customId = SecurityUtils.getCustomerId(); + Consultant consultant = consultantRepository.findFirstByAgentNo(agentNo).orElseThrow(ConsultantNotFoundException::new); + CustomFavoriteConsultant target = customFavoriteConsultantRepository.findOneByCustomerIdAndConsultant(customId, consultant).orElse(null); + + if(target != null) { + customFavoriteConsultantRepository.delete(target); + } + else { + log.info("this consultant is not in customer list! agentNo = {}, customId = {}", agentNo, customId); + } + } } diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java index 8bd420b..6f2c612 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java +++ b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java @@ -19,6 +19,7 @@ private ContactStatusEnum contactStatus; private Instant updateTime; private String seniority; + private Long latestAppointmentId; public boolean isNewConsultant() { if(updateTime != null){ @@ -91,4 +92,16 @@ public void setSeniority(String seniority) { this.seniority = seniority; } + + public void setNewConsultant(boolean newConsultant) { + this.newConsultant = newConsultant; + } + + public Long getLatestAppointmentId() { + return latestAppointmentId; + } + + public void setLatestAppointmentId(Long latestAppointmentId) { + this.latestAppointmentId = latestAppointmentId; + } } diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java index 5ad63d7..deb3705 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java +++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java @@ -1,21 +1,28 @@ package com.pollex.pam.service.mapper; +import com.pollex.pam.domain.Appointment; import com.pollex.pam.domain.Consultant; import com.pollex.pam.domain.CustomFavoriteConsultant; +import com.pollex.pam.enums.ContactStatusEnum; +import com.pollex.pam.service.AppointmentService; import com.pollex.pam.service.dto.ConsultantDTO; import com.pollex.pam.service.dto.ConsultantDetailDTO; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import java.time.Instant; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @Service public class ConsultantMapper { private final static Character SPLIT_MASK = ','; + + private final AppointmentService appointmentService; + + public ConsultantMapper(AppointmentService appointmentService) { + this.appointmentService = appointmentService; + } public ConsultantDTO toDto(Consultant source) { ConsultantDTO consultantDTO = new ConsultantDTO(); @@ -28,6 +35,7 @@ consultantDTO.setContactStatus(null); consultantDTO.setUpdateTime(null); + consultantDTO.setLatestAppointmentId(null); return consultantDTO; } @@ -36,9 +44,21 @@ Consultant consultant = customFavoriteConsultant.getConsultant(); ConsultantDTO dto = toDto(consultant); - Instant updateTime = customFavoriteConsultant.getLastModifiedDate(); - dto.setContactStatus(customFavoriteConsultant.getContactStatus()); - dto.setUpdateTime(updateTime); + final Optional<Appointment> latestAppointmentOptional = appointmentService.findByAgentNoAndCustomerId(consultant.getAgentNo(), customFavoriteConsultant.getCustomerId()) + .stream() + .max(Comparator.comparing(Appointment::getAppointmentDate)); + + if(latestAppointmentOptional.isPresent()) { + Appointment latestAppointment = latestAppointmentOptional.get(); + dto.setContactStatus(latestAppointment.getCommunicateStatus()); + dto.setLatestAppointmentId(latestAppointment.getId()); + dto.setUpdateTime(latestAppointment.getAppointmentDate()); + } + else { + dto.setContactStatus(ContactStatusEnum.PICKED); + dto.setLatestAppointmentId(null); + dto.setUpdateTime(customFavoriteConsultant.getLastModifiedDate()); + } return dto; } diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java index 0acd996..7fc85ea 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java @@ -1,5 +1,6 @@ package com.pollex.pam.web.rest; +import com.pollex.pam.service.ConsultantService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -16,10 +17,10 @@ @RestController @RequestMapping("/api/appointment") public class AppointmentResource { - + @Autowired AppointmentService appointmentService; - + @PostMapping("/customer/create") public void clientCreateAppointment(@RequestBody AppointmentCreateDTO appointmentCreateDTO) { appointmentService.customerCreateAppointment(appointmentCreateDTO); diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java index 0323979..94bd26d 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java @@ -43,6 +43,13 @@ return new ResponseEntity<>(HttpStatus.ACCEPTED); } + @DeleteMapping("/favorite/{agentNo}") + public ResponseEntity<Void> removeConsultantFromCustomList(@PathVariable String agentNo) { + consultantService.removeConsultantFromCustomList(agentNo); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/strictQuery") public ResponseEntity<List<ConsultantDTO>> strictQueryConsultant(@RequestBody StrictQueryConsultantParam param) { List<ConsultantDTO> queryResult = consultantService.strictQueryConsultant(param); diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/LoginResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/LoginResource.java index 5da816f..561e3de 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/LoginResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/LoginResource.java @@ -57,13 +57,13 @@ return new ResponseEntity<>(new OtpResponseDTO(result), HttpStatus.OK); } - // todo: �ㄐ��策鈭炎����wt + // todo: �ㄐ蝘餃�隤����rovider @PostMapping("/verifyOtp") public void verifyOtp(@RequestBody VerifyOtpVM verifyOtpParam) { OtpWebServiceLocator locator = new OtpWebServiceLocator(); } - // todo: �ㄐ��策鈭炎����wt + // todo: �ㄐ蝘餃�隤����rovider @PostMapping("/byEService") public ResponseEntity<EServiceResponse> loginByEService(@RequestBody EServiceRequestVM param) throws Exception { return loginService.loginByEService(param); -- Gitblit v1.8.0