From 40ba87b958d3b53f2eef4f95eb3add6548f35006 Mon Sep 17 00:00:00 2001 From: wayne <wayne8692wayne8692@gmail.com> Date: 星期五, 03 十二月 2021 11:18:48 +0800 Subject: [PATCH] [update] 我的顧問清單新增預約單歷史明細、預約單的更新API、預約單的邏輯刪除API --- pamapi/src/doc/顧問API/客戶的顧問清單.txt | 142 +++++++++++++- pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java | 4 pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java | 29 +- pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java | 5 pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java | 3 pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java | 7 pamapi/src/main/java/com/pollex/pam/domain/Appointment.java | 17 + pamapi/src/doc/預約單/取消預約單API.txt | 4 pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java | 19 + pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java | 13 pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java | 17 + pamapi/src/doc/sql/20211202_w.sql | 35 +++ pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java | 11 + pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java | 17 + pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java | 152 +++++++++++++++ pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java | 67 ++++- pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentDTO.java | 9 pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java | 7 18 files changed, 486 insertions(+), 72 deletions(-) diff --git a/pamapi/src/doc/sql/20211202_w.sql b/pamapi/src/doc/sql/20211202_w.sql new file mode 100644 index 0000000..70e929f --- /dev/null +++ b/pamapi/src/doc/sql/20211202_w.sql @@ -0,0 +1,35 @@ +ALTER TABLE omo.appointment ADD status varchar NULL; +ALTER TABLE omo.appointment ADD contact_time timestamp NULL; +ALTER TABLE omo.appointment ADD last_modified_date timestamp NULL; +ALTER TABLE omo.customer ADD agree_personal_information_time timestamp NULL; + +UPDATE omo.appointment SET status = 'AVAILABLE'; +UPDATE omo.appointment SET last_modified_date = appointment_date; + +DROP VIEW omo.appointment_customer_view; + +CREATE OR REPLACE VIEW omo.appointment_customer_view +AS SELECT a.id AS appointment_id, + a.phone, + a.email, + a.contact_type, + a.gender, + a.age, + a.job, + a.requirement, + a.communicate_status, + a.hope_contact_time, + a.other_requirement, + a.agent_no, + a.appointment_date, + a.customer_id, + a.consultant_view_time, + a.consultant_read_time, + a.contact_time, + a.status, + a.last_modified_date, + c.name + FROM omo.appointment a + LEFT JOIN omo.customer c ON a.customer_id = c.id; + +ALTER TABLE omo.satisfaction ADD appointment_id bigserial NOT NULL; diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\217\226\346\266\210\351\240\220\347\264\204\345\226\256API.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\217\226\346\266\210\351\240\220\347\264\204\345\226\256API.txt" new file mode 100644 index 0000000..8474f16 --- /dev/null +++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\217\226\346\266\210\351\240\220\347\264\204\345\226\256API.txt" @@ -0,0 +1,4 @@ +http delete: +http://localhost:8080/api/appointment/{appointmentId} + +response http status: 204 (����) diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\256\242\346\210\266\347\232\204\351\241\247\345\225\217\346\270\205\345\226\256.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\256\242\346\210\266\347\232\204\351\241\247\345\225\217\346\270\205\345\226\256.txt" index 5402bd7..fbe3e9d 100644 --- "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\256\242\346\210\266\347\232\204\351\241\247\345\225\217\346\270\205\345\226\256.txt" +++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\256\242\346\210\266\347\232\204\351\241\247\345\225\217\346\270\205\345\226\256.txt" @@ -3,19 +3,141 @@ response body: [ { - "agentNo": "12345", - "name": "皜祈岫��璆剖�", - "img": "", + "agentNo": "J149388015", + "name": "摰���", + "img": "avatar9.jpg", "expertise": [ - "鞎∪����", - "鞈頧宏" + "�摨瑁����", + "摮戊��", + "鞈閬��", + "璅暑��隡�", + "靽�瑼�/閬��", + "����" ], - "avgScore": 4.7, + "avgScore": 4.0, + "contactStatus": "reserved", // ��脰�����icked (�脰����)�eserved (撌脤���)�ontacted (撌脤��蝜�) + "createTime": "2021-12-02T10:55:53.939Z", // ��憿批������ + "updateTime": "2021-12-02T10:56:32.741Z", // ��餈����� + "role": "憡��蝬�鈭�", + "seniority": "22 撟� 8 ���", + "latestAppointmentId": 130, // ��敺�蝑��ID + "latestAppointmentDate": "2021-12-02T10:56:32.741Z", // ��敺�蝑�������� + "latestAppointmentScore": null, // ��敺�蝑����� (null�撠閰��) + "appointments": [ // 摰X撌脤���“��� + { + "id": 130, + "phone": "0938520091", + "email": "", + "contactType": "phone", + "gender": "female", + "age": "21-30", + "job": "��", + "requirement": "摮戊��,��������", + "communicateStatus": "reserved", + "hopeContactTime": "'蝳格��,蝳格���,蝳格����12:00~14:00,18:00~21:00'", + "otherRequirement": null, + "appointmentDate": "2021-12-02T10:56:32.741Z", + "lastModifiedDate": "2021-12-02T10:56:32.741Z", + "agentNo": "J149388015", + "customerId": 76, + "name": "��蝬�", + "consultantViewTime": null, + "consultantReadTime": null + } + ], + "new": true + }, + { + "agentNo": "B282677963", + "name": "�憒�", + "img": "avatar6.jpg", + "expertise": [ + "�摨瑁����", + "摮戊��", + "鞈閬��", + "璅暑��隡�", + "靽�瑼�/閬��", + "����" + ], + "avgScore": 1.0, + "contactStatus": "reserved", + "createTime": "2021-12-02T10:55:57.423Z", + "updateTime": "2021-12-02T10:56:56.946Z", + "role": "����蝬�鈭�", + "seniority": "30 撟� 8 ���", + "latestAppointmentId": 131, + "latestAppointmentDate": "2021-12-02T10:56:56.946Z", + "latestAppointmentScore": null, + "appointments": [ + { + "id": 131, + "phone": "0938520091", + "email": "", + "contactType": "phone", + "gender": "female", + "age": "21-30", + "job": "��", + "requirement": "摮戊��,��������", + "communicateStatus": "reserved", + "hopeContactTime": "'蝳格����9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00'", + "otherRequirement": null, + "appointmentDate": "2021-12-02T10:56:56.946Z", + "lastModifiedDate": "2021-12-02T10:56:56.946Z", + "agentNo": "B282677963", + "customerId": 76, + "name": "��蝬�", + "consultantViewTime": null, + "consultantReadTime": null + } + ], + "new": true + }, + { + "agentNo": "R221444250", + "name": "撏祠", + "img": "avatar10.jpg", + "expertise": [ + "�摨瑁����", + "摮戊��", + "鞈閬��", + "璅暑��隡�", + "靽�瑼�/閬��", + "����" + ], + "avgScore": 5.0, "contactStatus": "picked", - "updateTime": "2021-11-02T06:46:13.723Z", - "seniority": "4撟�2���", + "createTime": "2021-12-02T10:56:01.004Z", + "updateTime": null, "role": "����蝬�鈭�", - "new": false, - "latestAppointmentId": null + "seniority": "38 撟� ", + "latestAppointmentId": null, + "latestAppointmentDate": null, + "latestAppointmentScore": null, + "appointments": [], + "new": true + }, + { + "agentNo": "Z152717443", + "name": "隡���", + "img": "avatar3.jpg", + "expertise": [ + "�摨瑁����", + "摮戊��", + "鞈閬��", + "璅暑��隡�", + "靽�瑼�/閬��", + "����" + ], + "avgScore": 3.0, + "contactStatus": "picked", + "createTime": "2021-12-02T10:56:04.620Z", + "updateTime": null, + "role": "��陸靽蝬�鈭�", + "seniority": "17 撟� 1 ���", + "latestAppointmentId": null, + "latestAppointmentDate": null, + "latestAppointmentScore": null, // ��敺�蝑����� (null�撠閰��) + "appointments": [], + "new": true } ] diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java b/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java index 882613c..e29a371 100644 --- a/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java +++ b/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java @@ -7,6 +7,7 @@ import com.pollex.pam.enums.AppointmentStatusEnum; import com.pollex.pam.enums.ContactStatusEnum; +import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; @@ -55,9 +56,13 @@ @Column(name = "other_requirement") private String otherRequirement; - @LastModifiedDate - @Column(name = "appointment_date") + @CreatedDate + @Column(name = "appointment_date", updatable = false) private Instant appointmentDate; + + @LastModifiedDate + @Column(name = "last_modified_date") + private Instant lastModifiedDate; @Column(name = "agent_no") private String agentNo; @@ -210,4 +215,12 @@ public void setStatus(AppointmentStatusEnum status) { this.status = status; } + + public Instant getLastModifiedDate() { + return lastModifiedDate; + } + + public void setLastModifiedDate(Instant lastModifiedDate) { + this.lastModifiedDate = lastModifiedDate; + } } diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java index da38baa..edee8a4 100644 --- a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java +++ b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java @@ -72,6 +72,9 @@ @Column(name = "consultant_read_time") private Instant consultantReadTime; + @Column(name = "last_modified_date") + private Instant lastModifiedDate; + @Column(name = "name") private String name; @@ -207,6 +210,14 @@ this.consultantReadTime = consultantReadTime; } + public Instant getLastModifiedDate() { + return lastModifiedDate; + } + + public void setLastModifiedDate(Instant lastModifiedDate) { + this.lastModifiedDate = lastModifiedDate; + } + public String getName() { return name; } diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java b/pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java index 146b3b8..95a0944 100644 --- a/pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java +++ b/pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java @@ -21,16 +21,16 @@ @Entity @Table(name = "satisfaction") public class Satisfaction implements Serializable { - + /** - * + * */ private static final long serialVersionUID = 1L; - + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - + @CreatedDate @Column(name = "created_date", updatable = false) @JsonIgnore @@ -40,19 +40,22 @@ @Column(name = "last_modified_date") @JsonIgnore private Instant lastModifiedDate = Instant.now(); - + @Column(name = "customer_id") private Long customerId; - + @Column(name = "agent_no") private String agentNo; - + @Enumerated(EnumType.STRING) @Column(name = "status") private SatisfactionStatusEnum status; - + @Column(name = "score") private Float score; + + @Column(name = "appointment_id") + private Long appointmentId; public Long getId() { return id; @@ -109,6 +112,12 @@ public void setScore(Float score) { this.score = score; } - - + + public Long getAppointmentId() { + return appointmentId; + } + + public void setAppointmentId(Long appointmentId) { + this.appointmentId = appointmentId; + } } diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java index 0e39bd0..b3499c6 100644 --- a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java +++ b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java @@ -9,7 +9,6 @@ @Repository public interface AppointmentCustomerViewRepository extends JpaRepository<AppointmentCustomerView, Long>{ - List<AppointmentCustomerView> findByAgentNo(String agentNo); - + List<AppointmentCustomerView> findByAgentNoAndCustomerId(String agentNo, Long customerId); } diff --git a/pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java index ed21f2a..7763c51 100644 --- a/pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java +++ b/pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java @@ -1,6 +1,7 @@ package com.pollex.pam.repository; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -13,6 +14,6 @@ List<Satisfaction> findByAgentNo(String agentNo); List<Satisfaction> findByCustomerId(Long customerId); - - + + Optional<Satisfaction> findOneByAppointmentId(Long appointmentId); } diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java index 7e23420..42ef0ae 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java @@ -25,6 +25,7 @@ import com.pollex.pam.service.mapper.AppointmentDTOMapper; import com.pollex.pam.web.rest.errors.AppointmentNotFoundException; +import static com.pollex.pam.enums.AppointmentStatusEnum.AVAILABLE; import static com.pollex.pam.enums.AppointmentStatusEnum.DELETED; @Service @@ -70,16 +71,17 @@ return appointmentRepository.save(appointment); } - public AppointmentCustomerViewDTO getAppointmentDetail(Long appointmentId) { AppointmentCustomerView appointment = appointmentCustomerViewRepository.findById(appointmentId) .orElseThrow(AppointmentNotFoundException::new); return appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointment); } - - public List<Appointment> findByAgentNoAndCustomerId(String agentNo, Long customerId) { - return appointmentRepository.findByAgentNoAndCustomerId(agentNo, customerId); + public List<AppointmentCustomerView> findAvailableByAgentNoAndCustomerId(String agentNo, Long customerId) { + return appointmentCustomerViewRepository.findByAgentNoAndCustomerId(agentNo, customerId) + .stream() + .filter(appointmentCustomerView -> appointmentCustomerView.getStatus() == AVAILABLE) + .collect(Collectors.toList()); } public void recordConsultantReadTime(Long appointmentId) { @@ -102,7 +104,6 @@ public void markAppointmentDeleted(Long appointmentId) { Appointment appointment = appointmentRepository.findById(appointmentId).get(); appointment.setStatus(DELETED); - appointmentRepository.save(appointment); } @@ -117,7 +118,9 @@ } public List<AppointmentCustomerViewDTO> getConsultantAppointments(String agentNo) { - List<AppointmentCustomerView> appointmentList = appointmentCustomerViewRepository.findByAgentNo(agentNo); - return appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointmentList); + return appointmentCustomerViewRepository.findByAgentNo(agentNo).stream() + .filter(appointment -> appointment.getStatus() != DELETED) + .map(appointmentCustomerViewMapper::toAppointmentCustomerViewDTO) + .collect(Collectors.toList()); } } diff --git a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java index a06f4a5..7a9c552 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java @@ -1,14 +1,16 @@ package com.pollex.pam.service; -import com.pollex.pam.domain.Appointment; +import com.pollex.pam.domain.AppointmentCustomerView; import com.pollex.pam.domain.Consultant; import com.pollex.pam.domain.CustomerFavoriteConsultant; +import com.pollex.pam.domain.Satisfaction; import com.pollex.pam.enums.ContactStatusEnum; import com.pollex.pam.enums.LoginResult; import com.pollex.pam.repository.ConsultantRepository; import com.pollex.pam.repository.CustomerFavoriteConsultantRepository; import com.pollex.pam.security.SecurityUtils; import com.pollex.pam.service.dto.*; +import com.pollex.pam.service.mapper.AppointmentCustomerViewMapper; import com.pollex.pam.service.mapper.ConsultantMapper; import com.pollex.pam.web.rest.errors.ConsultantNotFoundException; import org.slf4j.Logger; @@ -42,37 +44,66 @@ @Autowired LoginRecordService loginRecordService; - public List<ConsultantDTO> getMyConsultantList() { - Long customerId = SecurityUtils.getCustomerDBId(); + @Autowired + AppointmentCustomerViewMapper appointmentCustomerViewMapper; + @Autowired + SatisfactionService satisfactionService; + + public List<CustomerFavoriteConsultantDTO> getMyConsultantList() { + Long customerId = SecurityUtils.getCustomerDBId(); return customerFavoriteConsultantRepository.findAllByCustomerId(customerId) .stream() .map(customerFavoriteConsultantRelation -> { Consultant consultant = customerFavoriteConsultantRelation.getConsultant(); - ConsultantDTO dto = consultantMapper.toDto(consultant); + CustomerFavoriteConsultantDTO dto = consultantMapper.toCustomerFavoriteConsultantDto(consultant); - final Optional<Appointment> latestAppointmentOptional = appointmentService.findByAgentNoAndCustomerId(consultant.getAgentNo(), customerId) - .stream() - .max(Comparator.comparing(Appointment::getAppointmentDate)); + dto.setContactStatus(ContactStatusEnum.PICKED); + dto.setLatestAppointmentId(null); + dto.setLatestAppointmentDate(null); + dto.setLatestAppointmentScore(null); + dto.setCreateTime(customerFavoriteConsultantRelation.getLastModifiedDate()); - if(latestAppointmentOptional.isPresent()) { - Appointment latestAppointment = latestAppointmentOptional.get(); - dto.setContactStatus(latestAppointment.getCommunicateStatus()); - dto.setLatestAppointmentId(latestAppointment.getId()); - dto.setUpdateTime(latestAppointment.getAppointmentDate()); - } - else { - dto.setContactStatus(ContactStatusEnum.PICKED); - dto.setLatestAppointmentId(null); - dto.setUpdateTime(customerFavoriteConsultantRelation.getLastModifiedDate()); - } + setAppointmentInfo( + dto, + appointmentService.findAvailableByAgentNoAndCustomerId(consultant.getAgentNo(), customerId) + ); return dto; }).collect(Collectors.toList()); } + private void setAppointmentInfo(CustomerFavoriteConsultantDTO dto, List<AppointmentCustomerView> appointmentList) { + List<AppointmentCustomerView> appointments = appointmentList.stream() + .sorted(Comparator.comparing(AppointmentCustomerView::getAppointmentDate).reversed()) + .collect(Collectors.toList()); + + dto.setAppointments(appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointments)); + + if (!appointments.isEmpty()) { + AppointmentCustomerView latestAppointment = appointments.get(0); + dto.setContactStatus(latestAppointment.getCommunicateStatus()); + dto.setLatestAppointmentId(latestAppointment.getId()); + dto.setLatestAppointmentDate(latestAppointment.getAppointmentDate()); + dto.setUpdateTime(latestAppointment.getLastModifiedDate()); + + setLatestAppointmentScore(dto, latestAppointment); + } + } + + private void setLatestAppointmentScore(CustomerFavoriteConsultantDTO dto, AppointmentCustomerView latestAppointment) { + Optional<Satisfaction> satisfactionOptional = satisfactionService.getByAppointmentId(latestAppointment.getId()); + if(satisfactionOptional.isPresent()) { + Satisfaction satisfaction = satisfactionOptional.get(); + dto.setLatestAppointmentScore(satisfaction.getScore()); + } + else { + dto.setLatestAppointmentScore(null); + } + } + public List<ConsultantDTO> getRecommendConsultantList() { return consultantRepository.findAllByRecommendIsTrue() .stream() diff --git a/pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java b/pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java index 58e5650..0c0b5f8 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java @@ -9,7 +9,6 @@ import com.pollex.pam.domain.Appointment; import com.pollex.pam.domain.Satisfaction; -import com.pollex.pam.enums.SatisfactionStatusEnum; import com.pollex.pam.repository.CustomerRepository; import com.pollex.pam.repository.SatisfactionRepository; import com.pollex.pam.service.dto.SatisfactionCustomerCreateDTO; @@ -21,22 +20,22 @@ @Service @Transactional public class SatisfactionService { - + @Autowired SatisfactionRepository satisfactionRepository; - + @Autowired AppointmentMapper appointmentMapper; - + @Autowired SatisfactionDTOMapper satisfactionDTOMapper; - + @Autowired SatisfactionMapper satisfactionMapper; - + @Autowired CustomerRepository customerRepository; - + public Satisfaction createSatisfaction(Satisfaction satisfaction) { return satisfactionRepository.save(satisfaction); } @@ -62,4 +61,8 @@ List<Satisfaction> satisfactionList = satisfactionRepository.findByCustomerId(customerDBId); return satisfactionMapper.toDTO(satisfactionList); } + + public Optional<Satisfaction> getByAppointmentId(Long appointmentId) { + return satisfactionRepository.findOneByAppointmentId(appointmentId); + } } diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java index 45368df..22e764f 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java +++ b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java @@ -2,10 +2,6 @@ import java.time.Instant; -import javax.persistence.Column; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; - import com.pollex.pam.enums.ContactStatusEnum; public class AppointmentCustomerViewDTO { @@ -22,6 +18,7 @@ private String hopeContactTime; private String otherRequirement; private Instant appointmentDate; + private Instant lastModifiedDate; private String agentNo; private Long customerId; private String name; @@ -99,7 +96,13 @@ public void setAppointmentDate(Instant appointmentDate) { this.appointmentDate = appointmentDate; } - public String getAgentNo() { + public Instant getLastModifiedDate() { + return lastModifiedDate; + } + public void setLastModifiedDate(Instant lastModifiedDate) { + this.lastModifiedDate = lastModifiedDate; + } + public String getAgentNo() { return agentNo; } public void setAgentNo(String agentNo) { diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentDTO.java index 557037d..411c500 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentDTO.java +++ b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentDTO.java @@ -6,7 +6,6 @@ import com.pollex.pam.enums.ContactStatusEnum; -@Service public class AppointmentDTO { private Long id; @@ -21,6 +20,7 @@ private String hopeContactTime; private String otherRequirement; private Instant appointmentDate; + private Instant lastModifiedDate; private String agentNo; private Long customerId; private Instant consultantViewTime; @@ -122,4 +122,11 @@ public void setConsultantReadTime(Instant consultantReadTime) { this.consultantReadTime = consultantReadTime; } + public Instant getLastModifiedDate() { + return lastModifiedDate; + } + + public void setLastModifiedDate(Instant lastModifiedDate) { + this.lastModifiedDate = lastModifiedDate; + } } diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java new file mode 100644 index 0000000..78bc277 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java @@ -0,0 +1,152 @@ +package com.pollex.pam.service.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.pollex.pam.enums.ContactStatusEnum; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.List; + +public class CustomerFavoriteConsultantDTO { + + @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 createTime; + private Instant updateTime; + private String role; + private String seniority; + private Long latestAppointmentId; + private Instant latestAppointmentDate; + private Float latestAppointmentScore; + private List<AppointmentCustomerViewDTO> appointments; + + public boolean isNewConsultant() { + if(createTime != null){ + Instant nowTimestamp = Instant.now(); + return ChronoUnit.DAYS.between(createTime, nowTimestamp) < 3; + } + return false; + } + + 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 getLatestAppointmentScore() { + return latestAppointmentScore; + } + + public void setLatestAppointmentScore(Float latestAppointmentScore) { + this.latestAppointmentScore = latestAppointmentScore; + } + + 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 getLatestAppointmentDate() { + return latestAppointmentDate; + } + + public void setLatestAppointmentDate(Instant latestAppointmentDate) { + this.latestAppointmentDate = latestAppointmentDate; + } + + public Instant getCreateTime() { + return createTime; + } + + public Instant getUpdateTime() { + return updateTime; + } + + public void setCreateTime(Instant createTime) { + this.createTime = createTime; + } + + public void setUpdateTime(Instant updateTime) { + this.updateTime = updateTime; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + + public String getSeniority() { + return seniority; + } + + public void setSeniority(String seniority) { + this.seniority = seniority; + } + + public void setNewConsultant(boolean newConsultant) { + this.newConsultant = newConsultant; + } + + public Long getLatestAppointmentId() { + return latestAppointmentId; + } + + public void setLatestAppointmentId(Long latestAppointmentId) { + this.latestAppointmentId = latestAppointmentId; + } + + public List<AppointmentCustomerViewDTO> getAppointments() { + return appointments; + } + + public void setAppointments(List<AppointmentCustomerViewDTO> appointments) { + this.appointments = appointments; + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java index 8d0fba4..e244de1 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java +++ b/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java @@ -5,7 +5,7 @@ import com.pollex.pam.enums.SatisfactionStatusEnum; public class SatisfactionDTO { - + private Long id; private Instant createdDate; private Instant lastModifiedDate; @@ -13,6 +13,7 @@ private String agentNo; private SatisfactionStatusEnum status; private Float score; + private Long appointmentId; public Long getId() { return id; } @@ -55,6 +56,6 @@ public void setScore(Float score) { this.score = score; } - - + + } diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java index 208e34d..5df4740 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java +++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java @@ -17,7 +17,7 @@ @Service public class AppointmentMapper { - + @Autowired AppointmentRepository appointmentRepository; @@ -34,16 +34,17 @@ public Satisfaction toSatisfaction(Appointment appointment) { Satisfaction target = new Satisfaction(); + target.setAppointmentId(appointment.getId()); target.setAgentNo(appointment.getAgentNo()); target.setCustomerId(appointment.getCustomerId()); return target; } - + public Satisfaction toSatisfaction(Long appointmentId) { Appointment appointment = appointmentRepository.findById(appointmentId).get(); return toSatisfaction(appointment); } - + } diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java index e6dea8c..30e0e47 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java +++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java @@ -7,7 +7,9 @@ import com.pollex.pam.service.AppointmentService; import com.pollex.pam.service.dto.ConsultantDTO; import com.pollex.pam.service.dto.ConsultantDetailDTO; +import com.pollex.pam.service.dto.CustomerFavoriteConsultantDTO; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -19,6 +21,23 @@ private static final Character SPLIT_MASK = ','; + public CustomerFavoriteConsultantDTO toCustomerFavoriteConsultantDto(Consultant source) { + CustomerFavoriteConsultantDTO consultantDTO = new CustomerFavoriteConsultantDTO(); + 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); + + return consultantDTO; + } + public ConsultantDTO toDto(Consultant source) { ConsultantDTO consultantDTO = new ConsultantDTO(); consultantDTO.setAgentNo(source.getAgentNo()); diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java index bc77aeb..d672590 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java @@ -25,8 +25,8 @@ ConsultantService consultantService; @GetMapping("/favorite") - public ResponseEntity<List<ConsultantDTO>> getMyConsultantList() { - List<ConsultantDTO> myConsultants = consultantService.getMyConsultantList(); + public ResponseEntity<List<CustomerFavoriteConsultantDTO>> getMyConsultantList() { + List<CustomerFavoriteConsultantDTO> myConsultants = consultantService.getMyConsultantList(); return new ResponseEntity<>(myConsultants, HttpStatus.OK); } -- Gitblit v1.8.0