保誠-保戶業務員媒合平台
Tomas
2022-02-08 551d18a095e8fe462e4099fdd5b2578e12934d45
Merge branch 'Phase3' of https://dev.pollex.com.tw:8443/r/pcalife/PAM into Phase3
修改24個檔案
新增4個檔案
修改1個檔案名稱
495 ■■■■■ 已變更過的檔案
pamapi/src/doc/sql/20220126_w.sql 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/滿意度/客戶填寫平台滿意度.txt 22 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/滿意度/客戶填寫顧問滿意度.txt 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/取得全部顧問資料.txt 55 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/嚴選配對.txt 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/快速篩選.txt 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/指定顧問詳細資訊.txt 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/推薦的顧問清單.txt 99 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/編輯修改顧問資料.txt 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/enums/SatisfactionTypeEnum.java 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java 10 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java 9 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/PersonalNotificationService.java 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java 30 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/ScheduleTaskService.java 8 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java 104 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java 24 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java 12 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionSystemScoreDTO.java 23 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java 9 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantDTOMapper.java 4 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java 21 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java 10 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20220126_w.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
ALTER TABLE public.satisfaction ALTER COLUMN customer_id DROP NOT NULL;
ALTER TABLE public.satisfaction ADD "type" varchar NULL;
-- Auto-generated SQL script #202201261717
UPDATE public.satisfaction SET "type"='APPOINTMENT';
pamapi/src/doc/º¡·N«×/«È¤á¶ñ¼g¥­¥xº¡·N«×.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,22 @@
http post :
http://localhost:8080/api/satisfaction/system/score
填寫一筆:
request body:
{
    "appointmentId": 67,
    "score":4
}
response body:
{
    "id": 93,
    "customerId": 165,
    "agentNo": null,
    "status": "FILLED",
    "score": 4.0,
    "appointmentId": 482,
    "type": "SYSTEM"
}
pamapi/src/doc/º¡·N«×/«È¤á¶ñ¼gÅU°Ýº¡·N«×.txt
pamapi/src/doc/ÅU°ÝAPI/¨ú±o¥þ³¡ÅU°Ý¸ê®Æ.txt
@@ -2,15 +2,50 @@
http://localhost:8080/api/consultant/all
response body:
[
{
    "name": "",
    "agentNo": "",
    "role": "",
    "avgScore": 0,
    "serveArea": ["新北市","宜蘭縣","台中市"],
    "seniority_year": 22,
    "seniority_month": 10,
    "expertise": [],
    "gender": "female", // "male": ç”·æ€§ã€ "female": å¥³æ€§
        "name": "崔寨",
        "agentNo": "R221444250",
        "role": "台名保險經紀人",
        "avgScore": 3.3,
        "serveArea": [
            "全台"
        ],
        "seniority_year": 38,
        "seniority_month": 0,
        "expertise": [
            "健康與保障",
            "子女教育",
            "資產規劃",
            "樂活退休",
            "保單健檢/規劃",
            "分紅保單"
        ],
        "gender": "female",
    "communicationStyle" : "謹慎務實、明快主動、耐心傾聽、健談風趣"
}
    },
    {
        "name": "喬妹",
        "agentNo": "B282677963",
        "role": "錠嵂保險經紀人",
        "avgScore": 3.4,
        "serveArea": [
            "南投縣",
            "高雄市",
            "屏東縣"
        ],
        "seniority_year": 30,
        "seniority_month": 8,
        "expertise": [
            "健康與保障",
            "子女教育",
            "資產規劃",
            "樂活退休",
            "保單健檢/規劃",
            "分紅保單"
        ],
        "gender": "female",
        "communicationStyle": "謹慎務實、明快主動、耐心傾聽、健談風趣"
    },
    ...
]
pamapi/src/doc/ÅU°ÝAPI/ÄY¿ï°t¹ï.txt
@@ -1,3 +1,4 @@
(已棄用,因匹配度關係而改將所有顧問資料給前端)
http post: http://localhost:8080/api/consultant/strictQuery
request body:
pamapi/src/doc/ÅU°ÝAPI/§Ö³t¿z¿ï.txt
@@ -1,3 +1,4 @@
(已棄用,因匹配度關係而改將所有顧問資料給前端)
http post: http://localhost:8080/api/consultant/fastQuery
request body:
pamapi/src/doc/ÅU°ÝAPI/«ü©wÅU°Ý¸Ô²Ó¸ê°T.txt
@@ -8,7 +8,7 @@
  "avgScore" : 3.1,
  "title" : "處經理(DM)",
  "phoneNumber" : "0987168787",
  "serveArea" : "全台",
  "serveArea" : ["新北市","台北市"],
  "companyAddress" : "花蓮縣玉里鎮中正路30號9樓",
  "latestLoginTime" : "2021-12-24T08:48:21.497Z",
  "seniority" : "38 å¹´ ",
pamapi/src/doc/ÅU°ÝAPI/±ÀÂ˪ºÅU°Ý²M³æ.txt
@@ -3,19 +3,92 @@
response body:
[
    {
        "agentNo": "12345",
        "name": "測試推薦業務員",
        "img": "",
        "expertise": [
            "財務規劃",
            "資產轉移"
        ],
        "avgScore": 4.7,
        "contactStatus": null,
        "updateTime": null,
        "seniority": "4å¹´2個月",
        "name": "崔寨",
        "agentNo": "R221444250",
        "role": "台名保險經紀人",
        "new": false,
        "latestAppointmentId": null
        "avgScore": 3.3,
        "serveArea": [
            "全台"
        ],
        "seniority_year": 38,
        "seniority_month": 0,
        "expertise": [
            "健康與保障",
            "子女教育",
            "資產規劃",
            "樂活退休",
            "保單健檢/規劃",
            "分紅保單"
        ],
        "gender": "female",
        "communicationStyle": "謹慎務實、明快主動、耐心傾聽、健談風趣"
    },
    {
        "name": "喬妹",
        "agentNo": "B282677963",
        "role": "錠嵂保險經紀人",
        "avgScore": 3.4,
        "serveArea": [
            "南投縣",
            "高雄市",
            "屏東縣"
        ],
        "seniority_year": 30,
        "seniority_month": 8,
        "expertise": [
            "健康與保障",
            "子女教育",
            "資產規劃",
            "樂活退休",
            "保單健檢/規劃",
            "分紅保單"
        ],
        "gender": "female",
        "communicationStyle": "謹慎務實、明快主動、耐心傾聽、健談風趣"
    },
    {
        "name": "伍夠勇",
        "agentNo": "Z152717443",
        "role": "和泰保險經紀人",
        "avgScore": 3.7,
        "serveArea": [
            "新北市",
            "宜蘭縣",
            "台中市"
        ],
        "seniority_year": 17,
        "seniority_month": 1,
        "expertise": [
            "健康與保障",
            "子女教育",
            "資產規劃",
            "樂活退休",
            "保單健檢/規劃",
            "分紅保單"
        ],
        "gender": "male",
        "communicationStyle": "謹慎務實、耐心傾聽、健談風趣"
    },
    {
        "name": "宋重機",
        "agentNo": "J149388015",
        "role": "威盛保險經紀人",
        "avgScore": 4.6,
        "serveArea": [
            "台北市",
            "屏東縣"
        ],
        "seniority_year": 22,
        "seniority_month": 8,
        "expertise": [
            "健康與保障",
            "子女教育",
            "資產規劃",
            "樂活退休",
            "保單健檢/規劃",
            "分紅保單"
        ],
        "gender": "male",
        "communicationStyle": "謹慎務實、明快主動、耐心傾聽、健談風趣"
    }
]
pamapi/src/doc/ÅU°ÝAPI/½s¿è­×§ïÅU°Ý¸ê®Æ.txt
@@ -12,7 +12,7 @@
    "expertise":["健康與保障","子女教育"],
    "title":"業務專員 (SC)",
    "role":"台名保險經紀人",
    "serveArea":"台北市、屏東縣",
    "serveArea":["台北市","屏東縣"],
    "gender":"male",
    "phoneNumber":"09123456789",
    "companyAddress":"宜蘭縣五結鄉三興路3號3樓",
pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java
@@ -37,7 +37,7 @@
        AppointmentClosedInfo closedInfo = new AppointmentClosedInfo();
        BeanUtils.copyProperties(closeProcess, closedInfo);
        Appointment appointment = appointmentService.findById(processDTO.getAppointmentId());
        satisfactionService.createSatisfaction(appointment);
        satisfactionService.createAppointmentSatisfaction(appointment);
        return appointmentClosedInfoRepository.save(closedInfo);
    }
    
pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java
@@ -37,7 +37,7 @@
        AppointmentClosedInfo closedInfo = new AppointmentClosedInfo();
        BeanUtils.copyProperties(doneProcess, closedInfo);
        Appointment appointment = appointmentService.findById(processDTO.getAppointmentId());
        satisfactionService.createSatisfaction(appointment);
        satisfactionService.createAppointmentSatisfaction(appointment);
        return appointmentClosedInfoRepository.save(closedInfo);
    }
pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
@@ -88,6 +88,7 @@
            .antMatchers("/api/eService/authenticate").permitAll()
            .antMatchers("/api/account/reset-password/init").permitAll()
            .antMatchers("/api/account/reset-password/finish").permitAll()
            .antMatchers("/api/consultant/all").permitAll()
            .antMatchers("/api/consultant/recommend").permitAll()
            .antMatchers("/api/consultant/detail").permitAll()
            .antMatchers("/api/consultant/fastQuery").permitAll()
pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java
@@ -12,6 +12,8 @@
import javax.persistence.Id;
import javax.persistence.Table;
import com.pollex.pam.enums.PersonalNotificationRoleEnum;
import com.pollex.pam.enums.SatisfactionTypeEnum;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
@@ -56,6 +58,10 @@
    @Column(name = "appointment_id")
    private Long appointmentId;
    @Enumerated(EnumType.STRING)
    @Column(name = "type")
    private SatisfactionTypeEnum type;
    public Long getId() {
        return id;
@@ -120,4 +126,12 @@
    public void setAppointmentId(Long appointmentId) {
        this.appointmentId = appointmentId;
    }
    public SatisfactionTypeEnum getType() {
        return type;
    }
    public void setType(SatisfactionTypeEnum type) {
        this.type = type;
    }
}
pamapi/src/main/java/com/pollex/pam/enums/SatisfactionTypeEnum.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
package com.pollex.pam.enums;
public enum SatisfactionTypeEnum {
    APPOINTMENT,
    SYSTEM
}
pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java
@@ -4,6 +4,7 @@
import java.util.Optional;
import com.pollex.pam.enums.SatisfactionStatusEnum;
import com.pollex.pam.enums.SatisfactionTypeEnum;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
@@ -14,15 +15,16 @@
@Repository
public interface SatisfactionRepository extends JpaRepository<Satisfaction, Long>{
    List<Satisfaction> findByAgentNo(String agentNo);
    List<Satisfaction> findByAgentNoAndType(String agentNo, SatisfactionTypeEnum type);
    List<Satisfaction> findByCustomerId(Long customerId);
    List<Satisfaction> findByCustomerIdAndType(Long customerId, SatisfactionTypeEnum type);
    Optional<Satisfaction> findOneByAppointmentId(Long appointmentId);
    List<Satisfaction> findAllByStatus(SatisfactionStatusEnum status);
    List<Satisfaction> findAllByStatusAndType(SatisfactionStatusEnum status, SatisfactionTypeEnum type);
    @Query(value = "SELECT avg(score) FROM satisfaction where agent_no=:agent_no"
    @Query(value = "SELECT avg(score) FROM satisfaction where type='APPOINTMENT'"
            + " and agent_no=:agent_no"
            + " and score is not null"
            , nativeQuery = true)
    Float getAgentScoreAvg(@Param("agent_no") String agentNo);
pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
@@ -156,6 +156,14 @@
            .collect(Collectors.toList());
    }
    public List<ConsultantDTO> getAllConsultantList() {
        return consultantRepository.findAll()
            .stream()
            .map(consultantMapper::toDto)
            .collect(Collectors.toList());
    }
    @Deprecated
    public List<ConsultantDTO> strictQueryConsultant(StrictQueryConsultantParam param) {
        return consultantRepository.findAll(ConsultantQuerySpec.getStrictQuerySpec(param))
            .stream()
@@ -163,6 +171,7 @@
            .collect(Collectors.toList());
    }
    @Deprecated
    public List<ConsultantDTO> fastQueryConsultant(FastQueryConsultantParam param) {
        return consultantRepository.findAll(ConsultantQuerySpec.getFastQuerySpec(param))
            .stream()
pamapi/src/main/java/com/pollex/pam/service/PersonalNotificationService.java
@@ -73,7 +73,7 @@
        personalNotificationRepository.save(entity);
    }
    public void createNotFillSatisfactionSumToCustomer(Long customerId, int notFillSatisfactionSum) {
    public void createNotFillAppointmentSatisfactionNumberToCustomer(Long customerId, int notFillSatisfactionSum) {
        PersonalNotification entity = new PersonalNotification();
        String content = "您有 "+notFillSatisfactionSum+" ç­†é¡§å•çš„æ»¿æ„åº¦éœ€è¦å¡«å¯«";
pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java
@@ -4,6 +4,9 @@
import java.util.List;
import java.util.Optional;
import com.pollex.pam.enums.SatisfactionTypeEnum;
import com.pollex.pam.security.SecurityUtils;
import com.pollex.pam.service.dto.SatisfactionSystemScoreDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -61,17 +64,18 @@
        Satisfaction satisfaction = satisfactionOP.orElseThrow(SatisfactionNotFoundException::new);
        satisfaction.setScore(scoreDTO.getScore());
        satisfaction.setStatus(SatisfactionStatusEnum.FILLED);
        satisfaction.setType(SatisfactionTypeEnum.APPOINTMENT);
        save(satisfaction);
        personalNotificationService.createScorefactionToConsultant(satisfaction);
        return satisfaction;
    }
    public Satisfaction createSatisfaction(Appointment appointment) {
    public Satisfaction createAppointmentSatisfaction(Appointment appointment) {
        boolean isexist = getByAppointmentId(appointment.getId()).isPresent();
        if(isexist) {
            throw new SatisfactionAlreadyExistException();
        }
        Satisfaction satisfaction = appointmentMapper.toSatisfaction(appointment);
        Satisfaction satisfaction = appointmentMapper.toAppointmentSatisfaction(appointment);
        return save(satisfaction);
    }
//
@@ -80,13 +84,13 @@
//        return save(satisfaction);
//    }
    public List<SatisfactionDTO> getByAgentNo(String agentNo) {
        List<Satisfaction> satisfactionList = satisfactionRepository.findByAgentNo(agentNo);
    public List<SatisfactionDTO> getByAgentNoAndType(String agentNo, SatisfactionTypeEnum type) {
        List<Satisfaction> satisfactionList = satisfactionRepository.findByAgentNoAndType(agentNo, type);
        return satisfactionMapper.toDTO(satisfactionList);
    }
    public List<SatisfactionDTO> getByCustomerId(Long customerDBId) {
        List<Satisfaction> satisfactionList = satisfactionRepository.findByCustomerId(customerDBId);
    public List<SatisfactionDTO> getByCustomerIdAndType(Long customerDBId, SatisfactionTypeEnum type) {
        List<Satisfaction> satisfactionList = satisfactionRepository.findByCustomerIdAndType(customerDBId, type);
        return satisfactionMapper.toDTO(satisfactionList);
    }
@@ -94,8 +98,8 @@
        return satisfactionRepository.findOneByAppointmentId(appointmentId);
    }
    public List<Satisfaction> getByStatus(SatisfactionStatusEnum status) {
        return satisfactionRepository.findAllByStatus(status);
    public List<Satisfaction> getByStatusAndType(SatisfactionStatusEnum status, SatisfactionTypeEnum type) {
        return satisfactionRepository.findAllByStatusAndType(status, type);
    }
    public List<Satisfaction> scoreAllfaction(List<SatisfactionCustomerScoreDTO> scoreDTO) {
@@ -105,4 +109,14 @@
        });
        return satisfactionList;
    }
    public Satisfaction createSystemSatisfaction(SatisfactionSystemScoreDTO scoreDTO) {
        Satisfaction satisfaction = new Satisfaction();
        satisfaction.setCustomerId(SecurityUtils.getCustomerDBId());
        satisfaction.setAppointmentId(scoreDTO.getAppointmentId());
        satisfaction.setStatus(SatisfactionStatusEnum.FILLED);
        satisfaction.setScore(scoreDTO.getScore());
        satisfaction.setType(SatisfactionTypeEnum.SYSTEM);
        return satisfactionRepository.save(satisfaction);
    }
}
pamapi/src/main/java/com/pollex/pam/service/ScheduleTaskService.java
@@ -6,6 +6,7 @@
import com.pollex.pam.enums.AppointmentStatusEnum;
import com.pollex.pam.enums.ContactStatusEnum;
import com.pollex.pam.enums.SatisfactionStatusEnum;
import com.pollex.pam.enums.SatisfactionTypeEnum;
import com.pollex.pam.repository.AppointmentCustomerViewRepository;
import com.pollex.pam.repository.AppointmentExpiringNotifyRecordRepository;
import org.slf4j.Logger;
@@ -127,13 +128,14 @@
    // todo éœ€ç¢ºèªè©²æ™‚é–“, otis todo=134497
    @Scheduled(cron = "0 30 8 * * *")
    public void sendNotFillSatisfactionToPersonalNotification() {
        Map<Long, List<Satisfaction>> customerNotFillSatisfactions = satisfactionService.getByStatus(SatisfactionStatusEnum.UNFILLED)
    public void sendNotFillAppointmentSatisfactionToPersonalNotification() {
        Map<Long, List<Satisfaction>> customerNotFillSatisfactions =
            satisfactionService.getByStatusAndType(SatisfactionStatusEnum.UNFILLED, SatisfactionTypeEnum.APPOINTMENT)
                .stream()
                .collect(Collectors.groupingBy(Satisfaction::getCustomerId));
        customerNotFillSatisfactions.forEach((customerId, notFillSatisfactions) ->
            personalNotificationService.createNotFillSatisfactionSumToCustomer(customerId, notFillSatisfactions.size())
            personalNotificationService.createNotFillAppointmentSatisfactionNumberToCustomer(customerId, notFillSatisfactions.size())
        );
    }
pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java
@@ -1,32 +1,28 @@
package com.pollex.pam.service.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.pollex.pam.enums.ContactStatusEnum;
import com.pollex.pam.enums.GenderEnum;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
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 agentNo;
    private String role;
    private String seniority;
    private Float avgScore;
    private List<String> serveArea;
    private Long seniority_year;
    private Long seniority_month;
    private List<String> expertise;
    private GenderEnum gender;
    private String communicationStyle;
    public boolean isNewConsultant() {
        if(updateTime != null){
            Instant nowTimestamp = Instant.now();
            return ChronoUnit.DAYS.between(updateTime, nowTimestamp) < 3;
    public String getName() {
        return name;
        }
        return false;
    public void setName(String name) {
        this.name = name;
    }
    public String getAgentNo() {
@@ -37,28 +33,12 @@
        this.agentNo = agentNo;
    }
    public String getName() {
        return name;
    public String getRole() {
        return role;
    }
    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 void setRole(String role) {
        this.role = role;
    }
    public Float getAvgScore() {
@@ -69,39 +49,51 @@
        this.avgScore = avgScore;
    }
    public ContactStatusEnum getContactStatus() {
        return contactStatus;
    public List<String> getServeArea() {
        return serveArea;
    }
    public void setContactStatus(ContactStatusEnum contactStatus) {
        this.contactStatus = contactStatus;
    public void setServeArea(List<String> serveArea) {
        this.serveArea = serveArea;
    }
    public Instant getUpdateTime() {
        return updateTime;
    public Long getSeniority_year() {
        return seniority_year;
    }
    public void setUpdateTime(Instant updateTime) {
        this.updateTime = updateTime;
    public void setSeniority_year(Long seniority_year) {
        this.seniority_year = seniority_year;
    }
    public String getRole() {
        return role;
    public Long getSeniority_month() {
        return seniority_month;
    }
    public void setRole(String role) {
        this.role = role;
    public void setSeniority_month(Long seniority_month) {
        this.seniority_month = seniority_month;
    }
    public String getSeniority() {
        return seniority;
    public List<String> getExpertise() {
        return expertise;
    }
    public void setSeniority(String seniority) {
        this.seniority = seniority;
    public void setExpertise(List<String> expertise) {
        this.expertise = expertise;
    }
    public void setNewConsultant(boolean newConsultant) {
        this.newConsultant = newConsultant;
    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;
    }
}
pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java
@@ -10,15 +10,13 @@
    private String name;
    private String agentNo;
    private String role;
    private String img;
    private Float avgScore;
    private String title;
    private String phoneNumber;
    private String serveArea;
    private List<String> serveArea;
    private String companyAddress;
    private Instant latestLoginTime;
    private String seniority;
    private Number suitability;
    private Number evaluation;
    private List<String> expertise;
    private String concept;
@@ -52,14 +50,6 @@
        this.role = role;
    }
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    public Float getAvgScore() {
        return avgScore;
    }
@@ -84,11 +74,11 @@
        this.phoneNumber = phoneNumber;
    }
    public String getServeArea() {
    public List<String> getServeArea() {
        return serveArea;
    }
    public void setServeArea(String serveArea) {
    public void setServeArea(List<String> serveArea) {
        this.serveArea = serveArea;
    }
@@ -114,14 +104,6 @@
    public void setSeniority(String seniority) {
        this.seniority = seniority;
    }
    public Number getSuitability() {
        return suitability;
    }
    public void setSuitability(Number suitability) {
        this.suitability = suitability;
    }
    public Number getEvaluation() {
pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java
@@ -11,7 +11,7 @@
    private List<String> expertise;
    private String title;
    private String role;
    private String serveArea;
    private List<String> serveArea;
    private GenderEnum gender;
    private String phoneNumber;
    private String companyAddress;
@@ -55,10 +55,10 @@
    public void setRole(String role) {
        this.role = role;
    }
    public String getServeArea() {
    public List<String> getServeArea() {
        return serveArea;
    }
    public void setServeArea(String serveArea) {
    public void setServeArea(List<String> serveArea) {
        this.serveArea = serveArea;
    }
    public GenderEnum getGender() {
@@ -130,10 +130,4 @@
    public void setAgentNo(String agentNo) {
        this.agentNo = agentNo;
    }
}
pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionSystemScoreDTO.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,23 @@
package com.pollex.pam.service.dto;
public class SatisfactionSystemScoreDTO {
    private Long appointmentId;
    private Float score;
    public Long getAppointmentId() {
        return appointmentId;
    }
    public void setAppointmentId(Long appointmentId) {
        this.appointmentId = appointmentId;
    }
    public Float getScore() {
        return score;
    }
    public void setScore(Float score) {
        this.score = score;
    }
}
pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java
@@ -4,6 +4,7 @@
import java.util.List;
import com.pollex.pam.enums.SatisfactionTypeEnum;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -13,7 +14,6 @@
import com.pollex.pam.enums.SatisfactionStatusEnum;
import com.pollex.pam.repository.AppointmentRepository;
import com.pollex.pam.service.dto.AppointmentDTO;
import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO;
@Service
public class AppointmentMapper {
@@ -32,18 +32,19 @@
                .map(s -> toAppointmentDTO(s)).collect(toList());
    }
    public Satisfaction toSatisfaction(Appointment appointment) {
    public Satisfaction toAppointmentSatisfaction(Appointment appointment) {
        Satisfaction target = new Satisfaction();
        target.setAppointmentId(appointment.getId());
        target.setAgentNo(appointment.getAgentNo());
        target.setCustomerId(appointment.getCustomerId());
        target.setType(SatisfactionTypeEnum.APPOINTMENT);
        target.setStatus(SatisfactionStatusEnum.UNFILLED);
        return target;
    }
    public Satisfaction toSatisfaction(Long appointmentId) {
    public Satisfaction toAppointmentSatisfaction(Long appointmentId) {
        Appointment appointment = appointmentRepository.findById(appointmentId).get();
        return toSatisfaction(appointment);
        return toAppointmentSatisfaction(appointment);
    }
pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantDTOMapper.java
@@ -21,6 +21,10 @@
        target.setPhotoPath(FileUtil.toPath(source.getPhotoFileName(), applicationProperty.getFileFolderPath()));
        String expertise = StringUtils.convertToString(source.getExpertise(), ",");
        target.setExpertise(expertise);
        String serveArea = StringUtils.convertToString(source.getServeArea(), ",");
        target.setServeArea(serveArea);
        target.setAward(source.getAwards());
        target.setExperience(source.getExperiences());
    }
pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java
@@ -36,15 +36,14 @@
        ConsultantDTO consultantDTO = new ConsultantDTO();
        consultantDTO.setAgentNo(source.getAgentNo());
        consultantDTO.setName(source.getName());
        consultantDTO.setAvgScore(source.getAvgScore());
        consultantDTO.setSeniority(source.getSeniorityDTOString());
        consultantDTO.setExpertise(splitStringWithChar(source.getExpertise()));
        consultantDTO.setImg(source.getPhotoPath());
        consultantDTO.setRole(source.getRole());
        consultantDTO.setContactStatus(null);
        consultantDTO.setUpdateTime(null);
//        consultantDTO.setLatestAppointmentId(null);
        consultantDTO.setAvgScore(source.getAvgScore());
        consultantDTO.setServeArea(splitStringWithChar(source.getServeArea()));
        consultantDTO.setSeniority_year(source.getSeniorityYear());
        consultantDTO.setSeniority_month(source.getSeniorityMonth());
        consultantDTO.setExpertise(splitStringWithChar(source.getExpertise()));
        consultantDTO.setGender(source.getGender());
        consultantDTO.setCommunicationStyle(source.getCommunicationStyle());
        return consultantDTO;
    }
@@ -58,17 +57,15 @@
        consultantDetailDTO.setAvgScore(source.getAvgScore());
        consultantDetailDTO.setTitle(source.getTitle());
        consultantDetailDTO.setPhoneNumber(source.getPhoneNumber());
        consultantDetailDTO.setServeArea(source.getServeArea());
        consultantDetailDTO.setServeArea(splitStringWithChar(source.getServeArea()));
        consultantDetailDTO.setCompanyAddress(source.getCompanyAddress());
        consultantDetailDTO.setSeniority(source.getSeniorityDTOString());
        consultantDetailDTO.setConcept(source.getConcept());
        consultantDetailDTO.setAwards(source.getAward());
        consultantDetailDTO.setImg(source.getPhotoPath());
        consultantDetailDTO.setExpertise(splitStringWithChar(source.getExpertise()));
        consultantDetailDTO.setExperiences(source.getExperience());
        // todo æ±ºå®šåŒ¹é…ç¨‹åº¦
        consultantDetailDTO.setSuitability(50);
        // todo éœ€ç¢ºèªè«®è©¢åº¦è¡¨ç¾
        consultantDetailDTO.setEvaluation(50);
        return consultantDetailDTO;
pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java
@@ -14,7 +14,7 @@
    AppointmentMapper appointmentMapper;
    
    public Satisfaction toSatisfaction(SatisfactionCustomerScoreDTO source) {
        Satisfaction satisfaction = appointmentMapper.toSatisfaction(source.getAppointmentId());
        Satisfaction satisfaction = appointmentMapper.toAppointmentSatisfaction(source.getAppointmentId());
        satisfaction.setScore(source.getScore());
        if(satisfaction.getScore()!=null) {
            satisfaction.setStatus(SatisfactionStatusEnum.FILLED);
pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java
@@ -39,6 +39,12 @@
        return new ResponseEntity<>(myConsultants, HttpStatus.OK);
    }
    @GetMapping("/all")
    public ResponseEntity<List<ConsultantDTO>> getAllConsultantList() {
        List<ConsultantDTO> myConsultants = consultantService.getAllConsultantList();
        return new ResponseEntity<>(myConsultants, HttpStatus.OK);
    }
    @PostMapping("/favorite/view")
    public ResponseEntity<Void> recordMyConsultantListView() {
        consultantService.recordMyConsultantListView();
@@ -63,13 +69,13 @@
        return new ResponseEntity<>(HttpStatus.OK);
    }
    @Deprecated
    @PostMapping("/strictQuery")
    public ResponseEntity<List<ConsultantDTO>> strictQueryConsultant(@RequestBody StrictQueryConsultantParam param) {
        List<ConsultantDTO> queryResult = consultantService.strictQueryConsultant(param);
        return new ResponseEntity<>(queryResult, HttpStatus.OK);
    }
    @Deprecated
    @PostMapping("/fastQuery")
    public ResponseEntity<List<ConsultantDTO>> fastQueryConsultant(@RequestBody FastQueryConsultantParam param) {
        List<ConsultantDTO> queryResult = consultantService.fastQueryConsultant(param);
pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java
@@ -2,24 +2,23 @@
import java.util.List;
import com.pollex.pam.enums.SatisfactionTypeEnum;
import com.pollex.pam.service.dto.SatisfactionSystemScoreDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.pollex.pam.domain.Appointment;
import com.pollex.pam.domain.Satisfaction;
import com.pollex.pam.security.SecurityUtils;
import com.pollex.pam.service.SatisfactionService;
import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO;
import com.pollex.pam.service.dto.SatisfactionDTO;
import com.pollex.pam.service.dto.SatisfactionUpdateDTO;
@RestController
@RequestMapping("/api/satisfaction")
@@ -44,11 +43,16 @@
    @GetMapping("/getMySatisfaction")
    public List<SatisfactionDTO> getMySatisfaction(){
        if(StringUtils.hasText(SecurityUtils.getAgentNo())) {
            return satisfactionService.getByAgentNo(SecurityUtils.getAgentNo());
            return satisfactionService.getByAgentNoAndType(SecurityUtils.getAgentNo(), SatisfactionTypeEnum.APPOINTMENT);
        }else if(SecurityUtils.getCustomerDBId()!=null){
            return satisfactionService.getByCustomerId(SecurityUtils.getCustomerDBId());
            return satisfactionService.getByCustomerIdAndType(SecurityUtils.getCustomerDBId(), SatisfactionTypeEnum.APPOINTMENT);
        }
        log.error("Not has agent code and customer id");
        throw new IllegalArgumentException("Not has agent code and customer id");
    }
    @PostMapping("/system/score")
    public Satisfaction createSystemSatisfaction(@RequestBody SatisfactionSystemScoreDTO scoreDTO) {
        return satisfactionService.createSystemSatisfaction(scoreDTO);
    }
}