From 75d1209791a26cc27d9ba489792788513bd70446 Mon Sep 17 00:00:00 2001
From: Mila <Mila@pollex.com.tw>
Date: 星期四, 13 一月 2022 10:07:02 +0800
Subject: [PATCH] Merge branch 'Phase3' of https://192.168.0.10:8443/r/pcalife/PAM into Phase3

---
 PAMapp/components/Interview/InterviewAdd.vue                                             |   78 ++++++
 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 ++
 PAMapp/pages/appointment/_appointmentId/interview/new/index.vue                          |   56 ----
 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 ++
 PAMapp/components/Appointment/AppointmentRecordList.vue                                  |    2 
 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 ++
 PAMapp/pages/appointment/_appointmentId/interview/_interviewId/index.vue                 |   14 +
 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 ++
 PAMapp/components/Appointment/AppointmentInterviewList.vue                               |    4 
 pamapi/src/doc/預約單/結案API.txt                                                             |   30 ++
 PAMapp/assets/scss/utilities/_heading.scss                                               |    9 
 PAMapp/pages/appointment/_appointmentId/index.vue                                        |    2 
 22 files changed, 628 insertions(+), 62 deletions(-)

diff --git a/PAMapp/assets/scss/utilities/_heading.scss b/PAMapp/assets/scss/utilities/_heading.scss
index 83403f5..9e4b562 100644
--- a/PAMapp/assets/scss/utilities/_heading.scss
+++ b/PAMapp/assets/scss/utilities/_heading.scss
@@ -126,3 +126,12 @@
   @extend .cursor--pointer;
   @extend .text--underline;
 }
+
+.pam-link-button--lg {
+  @extend .fix-chrome-click--issue;
+  @extend .mdTxt;
+  @extend .text--bold;
+  @extend .text--primary;
+  @extend .cursor--pointer;
+  @extend .text--underline;
+}
diff --git a/PAMapp/components/Appointment/AppointmentInterviewList.vue b/PAMapp/components/Appointment/AppointmentInterviewList.vue
index 66c1774..14e66b3 100644
--- a/PAMapp/components/Appointment/AppointmentInterviewList.vue
+++ b/PAMapp/components/Appointment/AppointmentInterviewList.vue
@@ -2,7 +2,7 @@
     <div>
       <div class="interview__header">
           <div class="mdTxt">蝝赤蝝����</div>
-          <div class="mdTxt text--underline text--primary"
+          <div class="pam-link-button--lg"
           @click="addInterview">+�憓�</div>
       </div>
 
@@ -39,7 +39,7 @@
         </section>
 
         <section class="more-log-action">
-                <div class="mdTxt text--primary text--underline">撅��憭�</div>
+                <div class="pam-link-button--lg">撅��憭�</div>
         </section>
       </template>
     </div>
diff --git a/PAMapp/components/Appointment/AppointmentRecordList.vue b/PAMapp/components/Appointment/AppointmentRecordList.vue
index 9bc21b1..b9c4b15 100644
--- a/PAMapp/components/Appointment/AppointmentRecordList.vue
+++ b/PAMapp/components/Appointment/AppointmentRecordList.vue
@@ -27,7 +27,7 @@
             <div class="time-line"></div>
 
             <section class="more-log-action">
-                <div class="mdTxt text--primary text--underline">撅��憭�</div>
+                <div class="pam-link-button--lg">撅��憭�</div>
             </section>
     </div>
 </template>
diff --git a/PAMapp/components/Interview/InterviewAdd.vue b/PAMapp/components/Interview/InterviewAdd.vue
new file mode 100644
index 0000000..7d6684b
--- /dev/null
+++ b/PAMapp/components/Interview/InterviewAdd.vue
@@ -0,0 +1,78 @@
+<template>
+  <div class="edit-appointment-record">
+      <div class="edit-appointment-record-date">
+          <span>隞予 11:00 撱箇��</span>
+          <span>隞予 11:00 ��</span>
+      </div>
+
+      <div class="mdTxt mb-10">蝝赤����</div>
+      <div class="date-input">
+          2022/01/10 09:00
+          <i class="icon-calender icon"></i>
+      </div>
+
+      <div class="mdTxt mb-10">蝝赤蝝����</div>
+      <el-input type="textarea" :rows="5" placeholder="蝝赤�" resize="none">
+      </el-input>
+
+      <div class="edit-appointment-record-btn">
+          <el-button>����</el-button>
+          <el-button>蝣箏��</el-button>
+      </div>
+  </div>
+</template>
+<script lang="ts">
+import { AppointmentLog } from '~/shared/models/appointment.model';
+import { Vue, Component, Prop } from 'nuxt-property-decorator';
+import authService from '~/shared/services/auth.service';
+
+@Component
+export default class InterviewAdd extends Vue {
+    // @Prop()
+    // myAppointmentReviewLogList!: AppointmentLog[];
+
+    // isUserLogin = false;
+
+    //////////////////////////////////////////////////////////////////////
+    // mounted() {
+    //   this.isUserLogin = authService.isUserLogin();
+    // }
+
+}
+</script>
+
+<style lang="scss" scoped>
+.edit-appointment-record {
+    padding-left : 10px;
+    padding-right: 10px;
+    .edit-appointment-record-date{
+        color          : #68737A;
+        display        : flex;
+        justify-content: space-between;
+        margin-bottom  : 26px;
+    }
+}
+.date-input {
+    align-items     : center;
+    background-color: #fff;
+    border          : 1px solid #707070;
+    border-radius   : 5px;
+    display         : flex;
+    font-size       : 20px;
+    height          : 46px;
+    margin-bottom   : 30px;
+    padding-left    : 20px;
+    padding-right   : 20px;
+}
+.icon {
+    color          : $PRIMARY_RED;
+    display        : flex;
+    flex           : 1;
+    justify-content: flex-end;
+}
+.edit-appointment-record-btn{
+    margin-top: 30px;
+    display: flex;
+    justify-content: center;
+}
+</style>
diff --git a/PAMapp/pages/appointment/_appointmentId/index.vue b/PAMapp/pages/appointment/_appointmentId/index.vue
index 41290f7..6d9dd06 100644
--- a/PAMapp/pages/appointment/_appointmentId/index.vue
+++ b/PAMapp/pages/appointment/_appointmentId/index.vue
@@ -45,7 +45,7 @@
 
       <div class="client-detail-action">
         <el-button @click="closeAppointment" >蝯��</el-button>
-        <el-button @click="$router.go(-1)" style="margin-left: 0px">�/�閮�</el-button>
+        <el-button @click="$router.go(-1)" style="margin-left: 0px">�/蝝赤</el-button>
       </div>
 
     </section>
diff --git a/PAMapp/pages/appointment/_appointmentId/interview/_interviewId/index.vue b/PAMapp/pages/appointment/_appointmentId/interview/_interviewId/index.vue
new file mode 100644
index 0000000..7d1fd02
--- /dev/null
+++ b/PAMapp/pages/appointment/_appointmentId/interview/_interviewId/index.vue
@@ -0,0 +1,14 @@
+<template>
+  <InterviewAdd></InterviewAdd>
+</template>
+<script lang="ts">
+import { Vue, Component } from 'nuxt-property-decorator';
+
+@Component
+export default class EditAppointmentInterview extends Vue {
+
+}
+</script>
+<style lang="scss" scoped>
+
+</style>
diff --git a/PAMapp/pages/appointment/_appointmentId/interview/new/index.vue b/PAMapp/pages/appointment/_appointmentId/interview/new/index.vue
index ce4909f..7dbba46 100644
--- a/PAMapp/pages/appointment/_appointmentId/interview/new/index.vue
+++ b/PAMapp/pages/appointment/_appointmentId/interview/new/index.vue
@@ -1,25 +1,5 @@
 <template>
-    <div class="edit-appointment-record">
-        <div class="edit-appointment-record-date">
-            <span>隞予 11:00 撱箇��</span>
-            <span>隞予 11:00 ��</span>
-        </div>
-
-        <div class="mdTxt mb-10">蝝赤����</div>
-        <div class="date-input">
-            2022/01/10 09:00
-            <i class="icon-calender icon"></i>
-        </div>
-
-        <div class="mdTxt mb-10">蝝赤蝝����</div>
-        <el-input type="textarea" :rows="5" placeholder="蝝赤�" resize="none">
-        </el-input>
-
-        <div class="edit-appointment-record-btn">
-            <el-button>����</el-button>
-            <el-button>蝣箏��</el-button>
-        </div>
-    </div>
+  <InterviewAdd></InterviewAdd>
 </template>
 <script lang="ts">
 import { Vue, Component } from 'nuxt-property-decorator';
@@ -30,37 +10,5 @@
 }
 </script>
 <style lang="scss" scoped>
-.edit-appointment-record {
-    padding-left : 10px;
-    padding-right: 10px;
-    .edit-appointment-record-date{
-        color          : #68737A;
-        display        : flex;
-        justify-content: space-between;
-        margin-bottom  : 26px;
-    }
-}
-.date-input {
-    align-items     : center;
-    background-color: #fff;
-    border          : 1px solid #707070;
-    border-radius   : 5px;
-    display         : flex;
-    font-size       : 20px;
-    height          : 46px;
-    margin-bottom   : 30px;
-    padding-left    : 20px;
-    padding-right   : 20px;
-}
-.icon {
-    color          : $PRIMARY_RED;
-    display        : flex;
-    flex           : 1;
-    justify-content: flex-end;
-}
-.edit-appointment-record-btn{
-    margin-top: 30px;
-    display: flex;
-    justify-content: center;
-}
+
 </style>
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