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