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