保誠-保戶業務員媒合平台
wayne
2021-11-04 43a48389358b7b3f37cb404250f2084da3ec0f50
[add] todo#129741,新增顧問api相關的物件結構

修改1個檔案
新增11個檔案
618 ■■■■■ 已變更過的檔案
pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/repository/ConsultantRepository.java 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java 49 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/AddConsultantParam.java 15 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java 93 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
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/dto/StrictQueryConsultantParam.java 90 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java 71 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java 56 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/errors/ConsultantNotFoundException.java 8 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
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()
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
}
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();
}
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);
    }
}
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;
    }
}
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;
    }
}
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;
    }
}
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;
    }
}
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;
    }
}
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());
    }
}
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);
    }
}
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{
}