From 73d2e2d19016e6c2a1164735b64d32eff1c91979 Mon Sep 17 00:00:00 2001 From: Tomas <tomasysh@gmail.com> Date: 星期四, 13 一月 2022 09:16:27 +0800 Subject: [PATCH] Merge branch 'Phase3' of https://dev.pollex.com.tw:8443/r/pcalife/PAM into Phase3 --- pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java | 35 +++ pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java | 39 ++++ pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java | 11 + pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java | 28 +++ pamapi/src/doc/sql/20220112_j.sql | 24 ++ pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java | 31 +++ pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java | 34 +++ pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java | 11 + pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java | 68 +++++++ pamapi/src/main/java/com/pollex/pam/domain/Appointment.java | 38 +++ pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java | 29 +++ pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java | 10 + pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java | 112 ++++++++++++ pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java | 25 ++ pamapi/src/doc/預約單/結案API.txt | 30 +++ 15 files changed, 521 insertions(+), 4 deletions(-) diff --git a/pamapi/src/doc/sql/20220112_j.sql b/pamapi/src/doc/sql/20220112_j.sql index 3d64d79..504c4da 100644 --- a/pamapi/src/doc/sql/20220112_j.sql +++ b/pamapi/src/doc/sql/20220112_j.sql @@ -40,3 +40,27 @@ CONSTRAINT interview_record_pkey PRIMARY KEY (id) ); +-- �憓��蝯���able + +-- Drop table + +-- DROP TABLE public.appointment_closed_info; + +-- Drop table + +-- DROP TABLE public.appointment_closed_info; + +CREATE TABLE public.appointment_closed_info ( + id bigserial NOT NULL, + policyholder_identity_id varchar NULL, + plan_code varchar NULL, + policy_entry_date date NULL, + remark varchar NULL, + closed_reason varchar NULL, + closed_other_reason varchar NULL, + appointment_id bigserial NOT NULL, + CONSTRAINT appointment_closed_info_pkey PRIMARY KEY (id) +); + + + diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\347\265\220\346\241\210API.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\347\265\220\346\241\210API.txt" new file mode 100644 index 0000000..016f7ad --- /dev/null +++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\347\265\220\346\241\210API.txt" @@ -0,0 +1,30 @@ +http post : + +http://localhost:8080/api/appointment/close + + +request body : + +��漱 +contactStatus: done + +{ + "policyholderIdentityId":"A123456789", + "planCode":"ATM", + "policyEntryDate":"2022-01-12", + "contactStatus":"done", + "appointmentId": 385 +} + + + +���漱 +contactStatus: closed + +{ + "contactStatus":"closed", + "closedReason":"other", + "closedOtherReason":"敹��末銝鞎�", + "appointmentId": 385, + "remark":"test remark" +} \ No newline at end of file diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java new file mode 100644 index 0000000..10f2e86 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java @@ -0,0 +1,25 @@ +package com.pollex.pam.appointment.process; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO; + +@Service +public class AppointmentProcess{ + + @Autowired + List<AppointmentProcessInterface> processList; + + public void process(AbstractAppointmentProcessDTO dto) { + AbstractAppointmentProcessDTO appointmentProcessDTO = (AbstractAppointmentProcessDTO)dto; + processList.stream().forEach(process ->{ + if(process.getProcessType() == appointmentProcessDTO.getContactStatus()) { + process.doProcess(appointmentProcessDTO); + } + }); + } + +} diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java new file mode 100644 index 0000000..140f01f --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java @@ -0,0 +1,11 @@ +package com.pollex.pam.appointment.process; + +import com.pollex.pam.enums.ContactStatusEnum; +import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO; + +public interface AppointmentProcessInterface { + + void doProcess(AbstractAppointmentProcessDTO dto); + ContactStatusEnum getProcessType(); + +} diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java new file mode 100644 index 0000000..8d728c5 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java @@ -0,0 +1,35 @@ +package com.pollex.pam.appointment.process; + +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.pollex.pam.domain.AppointmentClosedInfo; +import com.pollex.pam.enums.ContactStatusEnum; +import com.pollex.pam.repository.AppointmentClosedInfoRepository; +import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO; +import com.pollex.pam.service.dto.ClosedProcessDTO; +import com.pollex.pam.service.dto.DoneProcessDTO; + +@Service +public class ClosedProcess implements AppointmentProcessInterface{ + + @Autowired + AppointmentClosedInfoRepository appointmentClosedInfoRepository; + + @Override + public void doProcess(AbstractAppointmentProcessDTO processDTO) { + ClosedProcessDTO doneProcess = (ClosedProcessDTO)processDTO; + BeanUtils.copyProperties(processDTO, doneProcess); + AppointmentClosedInfo closedInfo = new AppointmentClosedInfo(); + BeanUtils.copyProperties(doneProcess, closedInfo); + appointmentClosedInfoRepository.save(closedInfo); + } + + @Override + public ContactStatusEnum getProcessType() { + return ContactStatusEnum.CLOSED; + } + + +} diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java new file mode 100644 index 0000000..feab05a --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java @@ -0,0 +1,34 @@ +package com.pollex.pam.appointment.process; + +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.pollex.pam.domain.AppointmentClosedInfo; +import com.pollex.pam.enums.ContactStatusEnum; +import com.pollex.pam.repository.AppointmentClosedInfoRepository; +import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO; +import com.pollex.pam.service.dto.DoneProcessDTO; + +@Service +public class DoneProcess implements AppointmentProcessInterface{ + + @Autowired + AppointmentClosedInfoRepository appointmentClosedInfoRepository; + + @Override + public void doProcess(AbstractAppointmentProcessDTO processDTO) { + DoneProcessDTO doneProcess = (DoneProcessDTO)processDTO; + BeanUtils.copyProperties(processDTO, doneProcess); + AppointmentClosedInfo closedInfo = new AppointmentClosedInfo(); + BeanUtils.copyProperties(doneProcess, closedInfo); + appointmentClosedInfoRepository.save(closedInfo); + } + + @Override + public ContactStatusEnum getProcessType() { + return ContactStatusEnum.DONE; + } + + +} 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 6dbf168..5b6082b 100644 --- a/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java +++ b/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java @@ -4,13 +4,26 @@ import java.time.Instant; import java.util.List; -import javax.persistence.*; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EntityListeners; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import javax.persistence.Table; + +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; 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; @EntityListeners(AuditingEntityListener.class) @Entity @@ -86,6 +99,15 @@ @JoinColumn(name = "appointment_id") @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE) private List<AppointmentMemo> appointmentMemoList; + +// @OneToOne(cascade = CascadeType.REMOVE,fetch=FetchType.EAGER) +//// @JoinColumn(name = "form_authority_id", referencedColumnName = "id") +// @JoinColumn(name = "appointment_id", referencedColumnName = "id") +// private AppointmentClosedInfo closedInfo; + +// @OneToOne(cascade = CascadeType.REMOVE +// , mappedBy = "appointment", fetch=FetchType.LAZY) +// private AppointmentClosedInfo closedInfo; public Long getId() { return id; @@ -246,6 +268,14 @@ public void setAppointmentMemoList(List<AppointmentMemo> appointmentMemoList) { this.appointmentMemoList = appointmentMemoList; } + +// public AppointmentClosedInfo getClosedInfo() { +// return closedInfo; +// } +// +// public void setClosedInfo(AppointmentClosedInfo closedInfo) { +// this.closedInfo = closedInfo; +// } diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java new file mode 100644 index 0000000..bc16a7a --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java @@ -0,0 +1,112 @@ +package com.pollex.pam.domain; + +import java.io.Serializable; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "appointment_closed_info") +public class AppointmentClosedInfo implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "policyholder_identity_id") + private String policyholderIdentityId; + + @Column(name = "plan_code") + private String planCode; + + @Column(name = "policy_entry_date") + private Date policyEntryDate; + + @Column(name = "remark") + private String remark; + + @Column(name = "closed_reason") + private String closedReason; + + @Column(name = "closed_other_reason") + private String closedOtherReason; + + @Column(name = "appointment_id") + private Long appointmentId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getPolicyholderIdentityId() { + return policyholderIdentityId; + } + + public void setPolicyholderIdentityId(String policyholderIdentityId) { + this.policyholderIdentityId = policyholderIdentityId; + } + + public String getPlanCode() { + return planCode; + } + + public void setPlanCode(String planCode) { + this.planCode = planCode; + } + + public Date getPolicyEntryDate() { + return policyEntryDate; + } + + public void setPolicyEntryDate(Date policyEntryDate) { + this.policyEntryDate = policyEntryDate; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getClosedReason() { + return closedReason; + } + + public void setClosedReason(String closedReason) { + this.closedReason = closedReason; + } + + public String getClosedOtherReason() { + return closedOtherReason; + } + + public void setClosedOtherReason(String closedOtherReason) { + this.closedOtherReason = closedOtherReason; + } + + public Long getAppointmentId() { + return appointmentId; + } + + public void setAppointmentId(Long appointmentId) { + this.appointmentId = appointmentId; + } + + +} diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java new file mode 100644 index 0000000..4b4454a --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java @@ -0,0 +1,11 @@ +package com.pollex.pam.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.pollex.pam.domain.AppointmentClosedInfo; + +@Repository +public interface AppointmentClosedInfoRepository extends JpaRepository<AppointmentClosedInfo, Long>{ + +} diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java new file mode 100644 index 0000000..dbed395 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java @@ -0,0 +1,10 @@ +package com.pollex.pam.service; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional +public class AppointmentClosedInfoService { + +} diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java new file mode 100644 index 0000000..feecdc2 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java @@ -0,0 +1,28 @@ +package com.pollex.pam.service.dto; + +import com.pollex.pam.enums.ContactStatusEnum; + +public abstract class AbstractAppointmentProcessDTO{ + + private ContactStatusEnum contactStatus; + private Long appointmentId; + + public ContactStatusEnum getContactStatus() { + return contactStatus; + } + + public void setContactStatus(ContactStatusEnum contactStatus) { + this.contactStatus = contactStatus; + } + + public Long getAppointmentId() { + return appointmentId; + } + + public void setAppointmentId(Long appointmentId) { + this.appointmentId = appointmentId; + } + + + +} diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java new file mode 100644 index 0000000..cbcc51f --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java @@ -0,0 +1,68 @@ +package com.pollex.pam.service.dto; + +import java.util.Date; + +import com.pollex.pam.enums.ContactStatusEnum; + +public class AppointmentCloseDTO{ + + private String policyholderIdentityId; + private String planCode; + private Date policyEntryDate; + private String remark; + private String closedReason; + private String closedOtherReason; + private ContactStatusEnum contactStatus; + private Long appointmentId; + + public String getPolicyholderIdentityId() { + return policyholderIdentityId; + } + public void setPolicyholderIdentityId(String policyholderIdentityId) { + this.policyholderIdentityId = policyholderIdentityId; + } + public String getPlanCode() { + return planCode; + } + public void setPlanCode(String planCode) { + this.planCode = planCode; + } + public Date getPolicyEntryDate() { + return policyEntryDate; + } + public void setPolicyEntryDate(Date policyEntryDate) { + this.policyEntryDate = policyEntryDate; + } + public String getRemark() { + return remark; + } + public void setRemark(String remark) { + this.remark = remark; + } + public String getClosedReason() { + return closedReason; + } + public void setClosedReason(String closedReason) { + this.closedReason = closedReason; + } + public String getClosedOtherReason() { + return closedOtherReason; + } + public void setClosedOtherReason(String closedOtherReason) { + this.closedOtherReason = closedOtherReason; + } + public ContactStatusEnum getContactStatus() { + return contactStatus; + } + public void setContactStatus(ContactStatusEnum contactStatus) { + this.contactStatus = contactStatus; + } + public Long getAppointmentId() { + return appointmentId; + } + public void setAppointmentId(Long appointmentId) { + this.appointmentId = appointmentId; + } + + +} diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java new file mode 100644 index 0000000..9b18da4 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java @@ -0,0 +1,29 @@ +package com.pollex.pam.service.dto; + +public class ClosedProcessDTO extends AbstractAppointmentProcessDTO{ + + private String remark; + private String closedReason; + private String closedOtherReason; + + public String getRemark() { + return remark; + } + public void setRemark(String remark) { + this.remark = remark; + } + public String getClosedReason() { + return closedReason; + } + public void setClosedReason(String closedReason) { + this.closedReason = closedReason; + } + public String getClosedOtherReason() { + return closedOtherReason; + } + public void setClosedOtherReason(String closedOtherReason) { + this.closedOtherReason = closedOtherReason; + } + + +} diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java new file mode 100644 index 0000000..2c9881a --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java @@ -0,0 +1,39 @@ +package com.pollex.pam.service.dto; + +import java.util.Date; + +public class DoneProcessDTO extends AbstractAppointmentProcessDTO{ + + private String policyholderIdentityId; + private String planCode; + private Date policyEntryDate; + private String remark; + + public String getPolicyholderIdentityId() { + return policyholderIdentityId; + } + public void setPolicyholderIdentityId(String policyholderIdentityId) { + this.policyholderIdentityId = policyholderIdentityId; + } + public String getPlanCode() { + return planCode; + } + public void setPlanCode(String planCode) { + this.planCode = planCode; + } + public Date getPolicyEntryDate() { + return policyEntryDate; + } + public void setPolicyEntryDate(Date policyEntryDate) { + this.policyEntryDate = policyEntryDate; + } + public String getRemark() { + return remark; + } + public void setRemark(String remark) { + this.remark = remark; + } + + + +} diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java index b65aa75..7a303c6 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java @@ -1,14 +1,22 @@ package com.pollex.pam.web.rest; +import com.pollex.pam.appointment.process.AppointmentProcess; import com.pollex.pam.domain.Appointment; +import com.pollex.pam.enums.ContactStatusEnum; import com.pollex.pam.service.SendMsgService; import com.pollex.pam.service.dto.AppointmentUpdateDTO; +import com.pollex.pam.service.dto.ClosedProcessDTO; +import com.pollex.pam.service.dto.DoneProcessDTO; + +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import com.pollex.pam.service.AppointmentService; import com.pollex.pam.service.SatisfactionService; +import com.pollex.pam.service.dto.AppointmentCloseDTO; import com.pollex.pam.service.dto.AppointmentCreateDTO; import com.pollex.pam.service.dto.AppointmentCustomerViewDTO; @@ -24,6 +32,9 @@ @Autowired SendMsgService sendMsgService; + + @Autowired + AppointmentProcess abstractAppointmentProcess; @PutMapping("") public ResponseEntity<Void> updateAppointment(@RequestBody AppointmentUpdateDTO appointment) { @@ -59,4 +70,24 @@ appointmentService.recordConsultantReadTime(appointmentId); return ResponseEntity.noContent().build(); } + + @PostMapping("/close") + public ResponseEntity<Void> closeAppointment(@RequestBody AppointmentCloseDTO closeDTO) { + + if(closeDTO.getContactStatus() == ContactStatusEnum.DONE) { + DoneProcessDTO dto = new DoneProcessDTO(); + BeanUtils.copyProperties(closeDTO, dto); + abstractAppointmentProcess.process(dto); + }else if(closeDTO.getContactStatus() == ContactStatusEnum.CLOSED){ + ClosedProcessDTO dto = new ClosedProcessDTO(); + BeanUtils.copyProperties(closeDTO, dto); + abstractAppointmentProcess.process(dto); + } + +// Appointment ap = appointmentService.findById(closeDTO.getAppointmentId()); +// System.out.println("getClosedInfo().getClosedOtherReason()::"+ap.getClosedInfo().getClosedOtherReason()); + + + return ResponseEntity.noContent().build(); + } } -- Gitblit v1.8.0