From 43a48389358b7b3f37cb404250f2084da3ec0f50 Mon Sep 17 00:00:00 2001
From: wayne <wayne8692wayne8692@gmail.com>
Date: 星期四, 04 十一月 2021 18:03:53 +0800
Subject: [PATCH] [add] todo#129741,新增顧問api相關的物件結構

---
 pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java             |  165 +++++++++++++++
 pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java        |   42 +++
 pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java             |   71 ++++++
 pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java                |    1 
 pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java                 |   56 +++++
 pamapi/src/main/java/com/pollex/pam/service/dto/AddConsultantParam.java              |   15 +
 pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java                   |   49 ++++
 pamapi/src/main/java/com/pollex/pam/repository/ConsultantRepository.java             |   14 +
 pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java                   |   93 ++++++++
 pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java      |   90 ++++++++
 pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java                     |   14 +
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/ConsultantNotFoundException.java |    8 
 12 files changed, 618 insertions(+), 0 deletions(-)

diff --git a/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java b/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
index 3f9110b..f548053 100644
--- a/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
+++ b/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
@@ -83,6 +83,7 @@
             .antMatchers("/api/activate").permitAll()
             .antMatchers("/api/account/reset-password/init").permitAll()
             .antMatchers("/api/account/reset-password/finish").permitAll()
+            .antMatchers("/api/consultant/recommend").permitAll()
             .antMatchers("/api/admin/**").hasAuthority(AuthoritiesConstants.ADMIN)
             .antMatchers("/api/**").authenticated()
             .antMatchers("/websocket/**").authenticated()
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java
new file mode 100644
index 0000000..696463c
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java
@@ -0,0 +1,14 @@
+package com.pollex.pam.enums;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public enum ContactStatusEnum {
+    @JsonProperty("picked")
+    PICKED,
+
+    @JsonProperty("reserved")
+    RESERVED,
+
+    @JsonProperty("contacted")
+    CONTACTED
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/ConsultantRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/ConsultantRepository.java
new file mode 100644
index 0000000..1cf905a
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/repository/ConsultantRepository.java
@@ -0,0 +1,14 @@
+package com.pollex.pam.repository;
+
+import com.pollex.pam.domain.Consultant;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Optional;
+
+@Repository
+public interface ConsultantRepository extends JpaRepository<Consultant, Long> {
+    Optional<Consultant> findFirstByAgentNo(String agentNo);
+    List<Consultant> findAllByRecommendIsTrue();
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
new file mode 100644
index 0000000..07cd771
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
@@ -0,0 +1,49 @@
+package com.pollex.pam.service;
+
+import com.pollex.pam.domain.Consultant;
+import com.pollex.pam.repository.ConsultantRepository;
+import com.pollex.pam.service.dto.*;
+import com.pollex.pam.service.mapper.ConsultantMapper;
+import com.pollex.pam.web.rest.errors.ConsultantNotFoundException;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+@Service
+public class ConsultantService {
+
+    private final ConsultantRepository consultantRepository;
+    private final ConsultantMapper consultantMapper;
+
+    public ConsultantService(ConsultantRepository consultantRepository, ConsultantMapper consultantMapper) {
+        this.consultantRepository = consultantRepository;
+        this.consultantMapper = consultantMapper;
+    }
+
+    public List<ConsultantDTO> getMyConsultantList() {
+        return Collections.emptyList();
+    }
+
+    public List<ConsultantDTO> getRecommendConsultantList() {
+        List<Consultant> recommendConsultantList = consultantRepository.findAllByRecommendIsTrue();
+        return consultantMapper.toDto(recommendConsultantList);
+    }
+
+    public void addConsultantToOwnList(AddConsultantParam param) {
+        List<String> agentNoList = param.getAgentNoList();
+    }
+
+    public List<ConsultantDTO> strictQueryConsultant(StrictQueryConsultantParam param) {
+        return Collections.emptyList();
+    }
+
+    public List<ConsultantDTO> fastQueryConsultant(FastQueryConsultantParam param) {
+        return Collections.emptyList();
+    }
+
+    public ConsultantDetailDTO getConsultantDetail(String agentNo) {
+        Consultant consultant = consultantRepository.findFirstByAgentNo(agentNo).orElseThrow(ConsultantNotFoundException::new);
+        return consultantMapper.toDetailDto(consultant);
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AddConsultantParam.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AddConsultantParam.java
new file mode 100644
index 0000000..87749cf
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/AddConsultantParam.java
@@ -0,0 +1,15 @@
+package com.pollex.pam.service.dto;
+
+import java.util.List;
+
+public class AddConsultantParam {
+    List<String> agentNoList;
+
+    public List<String> getAgentNoList() {
+        return agentNoList;
+    }
+
+    public void setAgentNoList(List<String> agentNoList) {
+        this.agentNoList = agentNoList;
+    }
+}
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
new file mode 100644
index 0000000..0c8ac9b
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java
@@ -0,0 +1,93 @@
+package com.pollex.pam.service.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.pollex.pam.enums.ContactStatusEnum;
+
+import java.time.Instant;
+import java.util.List;
+
+public class ConsultantDTO {
+
+    @JsonProperty("new")
+    private boolean newConsultant;
+    private String agentNo;
+    private String name;
+    private String img;
+    private List<String> expertise;
+    private Float avgScore;
+    private ContactStatusEnum contactStatus;
+    private Instant updateTime;
+    private String seniority;
+
+    public boolean isNewConsultant() {
+        return newConsultant;
+    }
+
+    public void setNewConsultant(boolean newConsultant) {
+        this.newConsultant = newConsultant;
+    }
+
+    public String getAgentNo() {
+        return agentNo;
+    }
+
+    public void setAgentNo(String agentNo) {
+        this.agentNo = agentNo;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public List<String> getExpertise() {
+        return expertise;
+    }
+
+    public void setExpertise(List<String> expertise) {
+        this.expertise = expertise;
+    }
+
+    public Float getAvgScore() {
+        return avgScore;
+    }
+
+    public void setAvgScore(Float avgScore) {
+        this.avgScore = avgScore;
+    }
+
+    public ContactStatusEnum getContactStatus() {
+        return contactStatus;
+    }
+
+    public void setContactStatus(ContactStatusEnum contactStatus) {
+        this.contactStatus = contactStatus;
+    }
+
+    public Instant getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Instant updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getSeniority() {
+        return seniority;
+    }
+
+    public void setSeniority(String seniority) {
+        this.seniority = seniority;
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java
new file mode 100644
index 0000000..46cc4e6
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java
@@ -0,0 +1,165 @@
+package com.pollex.pam.service.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.time.Instant;
+import java.util.List;
+
+public class ConsultantDetailDTO {
+
+    private String name;
+    private String agentNo;
+    private String role;
+    private String image;
+    private Float avgScore;
+    private String title;
+    private String phoneNumber;
+    private String serveArea;
+    private String companyAddress;
+    private Instant latestLoginTime;
+    private String seniority;
+    private Number suitability;
+    private Number evaluation;
+    private List<String> expertises;
+    private String concept;
+    private List<String> experiences;
+    private String awards;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAgentNo() {
+        return agentNo;
+    }
+
+    public void setAgentNo(String agentNo) {
+        this.agentNo = agentNo;
+    }
+
+    public String getRole() {
+        return role;
+    }
+
+    public void setRole(String role) {
+        this.role = role;
+    }
+
+    public String getImage() {
+        return image;
+    }
+
+    public void setImage(String image) {
+        this.image = image;
+    }
+
+    public Float getAvgScore() {
+        return avgScore;
+    }
+
+    public void setAvgScore(Float avgScore) {
+        this.avgScore = avgScore;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getPhoneNumber() {
+        return phoneNumber;
+    }
+
+    public void setPhoneNumber(String phoneNumber) {
+        this.phoneNumber = phoneNumber;
+    }
+
+    public String getServeArea() {
+        return serveArea;
+    }
+
+    public void setServeArea(String serveArea) {
+        this.serveArea = serveArea;
+    }
+
+    public String getCompanyAddress() {
+        return companyAddress;
+    }
+
+    public void setCompanyAddress(String companyAddress) {
+        this.companyAddress = companyAddress;
+    }
+
+    public Instant getLatestLoginTime() {
+        return latestLoginTime;
+    }
+
+    public void setLatestLoginTime(Instant latestLoginTime) {
+        this.latestLoginTime = latestLoginTime;
+    }
+
+    public String getSeniority() {
+        return seniority;
+    }
+
+    public void setSeniority(String seniority) {
+        this.seniority = seniority;
+    }
+
+    public Number getSuitability() {
+        return suitability;
+    }
+
+    public void setSuitability(Number suitability) {
+        this.suitability = suitability;
+    }
+
+    public Number getEvaluation() {
+        return evaluation;
+    }
+
+    public void setEvaluation(Number evaluation) {
+        this.evaluation = evaluation;
+    }
+
+    public List<String> getExpertises() {
+        return expertises;
+    }
+
+    public void setExpertises(List<String> expertises) {
+        this.expertises = expertises;
+    }
+
+    public String getConcept() {
+        return concept;
+    }
+
+    public void setConcept(String concept) {
+        this.concept = concept;
+    }
+
+    public List<String> getExperiences() {
+        return experiences;
+    }
+
+    public void setExperiences(List<String> experiences) {
+        this.experiences = experiences;
+    }
+
+    public String getAwards() {
+        return awards;
+    }
+
+    public void setAwards(String awards) {
+        this.awards = awards;
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java b/pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java
new file mode 100644
index 0000000..d14fe36
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java
@@ -0,0 +1,42 @@
+package com.pollex.pam.service.dto;
+
+import com.pollex.pam.enums.GenderEnum;
+
+public class FastQueryConsultantParam {
+    private GenderEnum gender;
+    private String communicationStyle;
+    private Number avgScore;
+    private String status;
+
+    public GenderEnum getGender() {
+        return gender;
+    }
+
+    public void setGender(GenderEnum gender) {
+        this.gender = gender;
+    }
+
+    public String getCommunicationStyle() {
+        return communicationStyle;
+    }
+
+    public void setCommunicationStyle(String communicationStyle) {
+        this.communicationStyle = communicationStyle;
+    }
+
+    public Number getAvgScore() {
+        return avgScore;
+    }
+
+    public void setAvgScore(Number avgScore) {
+        this.avgScore = avgScore;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java b/pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java
new file mode 100644
index 0000000..a62c19d
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java
@@ -0,0 +1,90 @@
+package com.pollex.pam.service.dto;
+
+import com.pollex.pam.enums.GenderEnum;
+
+import java.util.List;
+
+public class StrictQueryConsultantParam {
+
+    private GenderEnum gender;
+    private Number avgScore;
+    private String status;
+    private String area;
+    private List<String> requirements;
+    private String otherRequirement;
+    private String seniority;
+    private List<String> popularTags;
+    private String otherPopularTags;
+
+    public GenderEnum getGender() {
+        return gender;
+    }
+
+    public void setGender(GenderEnum gender) {
+        this.gender = gender;
+    }
+
+    public Number getAvgScore() {
+        return avgScore;
+    }
+
+    public void setAvgScore(Number avgScore) {
+        this.avgScore = avgScore;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public void setArea(String area) {
+        this.area = area;
+    }
+
+    public List<String> getRequirements() {
+        return requirements;
+    }
+
+    public void setRequirements(List<String> requirements) {
+        this.requirements = requirements;
+    }
+
+    public String getOtherRequirement() {
+        return otherRequirement;
+    }
+
+    public void setOtherRequirement(String otherRequirement) {
+        this.otherRequirement = otherRequirement;
+    }
+
+    public String getSeniority() {
+        return seniority;
+    }
+
+    public void setSeniority(String seniority) {
+        this.seniority = seniority;
+    }
+
+    public List<String> getPopularTags() {
+        return popularTags;
+    }
+
+    public void setPopularTags(List<String> popularTags) {
+        this.popularTags = popularTags;
+    }
+
+    public String getOtherPopularTags() {
+        return otherPopularTags;
+    }
+
+    public void setOtherPopularTags(String otherPopularTags) {
+        this.otherPopularTags = otherPopularTags;
+    }
+}
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
new file mode 100644
index 0000000..f1261e8
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java
@@ -0,0 +1,71 @@
+package com.pollex.pam.service.mapper;
+
+import com.pollex.pam.domain.Consultant;
+import com.pollex.pam.enums.ContactStatusEnum;
+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.stream.Collectors;
+
+@Service
+public class ConsultantMapper {
+
+    private final static Character SPLIT_MASK = ',';
+
+    public List<ConsultantDTO> toDto(List<Consultant> source) {
+        return source.stream().map(this::toDto).collect(Collectors.toList());
+    }
+
+    // todo convert
+    public ConsultantDTO toDto(Consultant source) {
+        ConsultantDTO consultantDTO = new ConsultantDTO();
+        consultantDTO.setAgentNo(source.getAgentNo());
+        consultantDTO.setName(source.getName());
+        consultantDTO.setAvgScore(source.getAvgScore());
+        consultantDTO.setSeniority(source.getSeniority());
+
+        // todo
+        consultantDTO.setImg("");
+        consultantDTO.setExpertise(splitStringWithChar(source.getExpertise()));
+        consultantDTO.setNewConsultant(false);
+        consultantDTO.setContactStatus(ContactStatusEnum.CONTACTED);
+        consultantDTO.setUpdateTime(Instant.now());
+
+        return consultantDTO;
+    }
+
+    public ConsultantDetailDTO toDetailDto(Consultant source) {
+        ConsultantDetailDTO consultantDetailDTO = new ConsultantDetailDTO();
+        consultantDetailDTO.setName(source.getName());
+        consultantDetailDTO.setAgentNo(source.getAgentNo());
+        consultantDetailDTO.setRole(source.getRole());
+        consultantDetailDTO.setAvgScore(source.getAvgScore());
+        consultantDetailDTO.setTitle(source.getTitle());
+        consultantDetailDTO.setPhoneNumber(source.getPhoneNumber());
+        consultantDetailDTO.setServeArea(source.getServeArea());
+        consultantDetailDTO.setCompanyAddress(source.getCompanyAddress());
+        consultantDetailDTO.setLatestLoginTime(source.getLatestLoginTime());
+        consultantDetailDTO.setSeniority(source.getSeniority());
+        consultantDetailDTO.setConcept(source.getConcept());
+        consultantDetailDTO.setAwards(source.getAward());
+
+        consultantDetailDTO.setImage("");
+        consultantDetailDTO.setSuitability(0);
+        consultantDetailDTO.setEvaluation(0);
+        consultantDetailDTO.setExpertises(splitStringWithChar(source.getExpertise()));
+        consultantDetailDTO.setExperiences(splitStringWithChar(source.getExperience()));
+
+        return consultantDetailDTO;
+    }
+
+    private List<String> splitStringWithChar(String source) {
+        return Arrays.stream(StringUtils.split(source, SPLIT_MASK))
+            .map(String::trim)
+            .collect(Collectors.toList());
+    }
+}
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
new file mode 100644
index 0000000..92e841e
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java
@@ -0,0 +1,56 @@
+package com.pollex.pam.web.rest;
+
+import com.pollex.pam.service.ConsultantService;
+import com.pollex.pam.service.dto.*;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/consultant")
+public class ConsultantResource {
+
+    private final ConsultantService consultantService;
+
+    public ConsultantResource(ConsultantService consultantService) {
+        this.consultantService = consultantService;
+    }
+
+    @GetMapping("")
+    public ResponseEntity<List<ConsultantDTO>> getMyConsultantList() {
+        List<ConsultantDTO> myConsultants = consultantService.getMyConsultantList();
+        return new ResponseEntity<>(myConsultants, HttpStatus.OK);
+    }
+
+    @GetMapping("/recommend")
+    public ResponseEntity<List<ConsultantDTO>> getRecommendConsultantList() {
+        List<ConsultantDTO> recommendConsultantList = consultantService.getRecommendConsultantList();
+        return new ResponseEntity<>(recommendConsultantList, HttpStatus.OK);
+    }
+
+    @PostMapping("")
+    public ResponseEntity<Void> addConsultantToOwnList(@RequestBody AddConsultantParam param) {
+        consultantService.addConsultantToOwnList(param);
+        return new ResponseEntity<>(HttpStatus.ACCEPTED);
+    }
+
+    @GetMapping("/strictQuery")
+    public ResponseEntity<List<ConsultantDTO>> strictQueryConsultant(@RequestBody StrictQueryConsultantParam param) {
+        List<ConsultantDTO> queryResult = consultantService.strictQueryConsultant(param);
+        return new ResponseEntity<>(queryResult, HttpStatus.OK);
+    }
+
+    @GetMapping("/fastQuery")
+    public ResponseEntity<List<ConsultantDTO>> fastQueryConsultant(@RequestBody FastQueryConsultantParam param) {
+        List<ConsultantDTO> queryResult = consultantService.fastQueryConsultant(param);
+        return new ResponseEntity<>(queryResult, HttpStatus.OK);
+    }
+
+    @GetMapping("/{agentNo}")
+    public ResponseEntity<ConsultantDetailDTO> getConsultantDetail(@PathVariable String agentNo) {
+        ConsultantDetailDTO result = consultantService.getConsultantDetail(agentNo);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ConsultantNotFoundException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ConsultantNotFoundException.java
new file mode 100644
index 0000000..517d418
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ConsultantNotFoundException.java
@@ -0,0 +1,8 @@
+package com.pollex.pam.web.rest.errors;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Consultant not found")
+public class ConsultantNotFoundException extends RuntimeException{
+}

--
Gitblit v1.8.0