From 34b07249c7e7a9f487a6bc08f022db6bcb925d42 Mon Sep 17 00:00:00 2001
From: Jack <jack.su@pollex.com.tw>
Date: 星期四, 20 一月 2022 14:46:35 +0800
Subject: [PATCH] [UPDATE] 調整客戶填寫滿意度的API [UPDATE] 調整產生滿意度調查資料的時機點,改為每次進到結案狀態就新增滿意度資料 [UPDATE] 調整結案API,新增和修改都使用同一支API由後端判斷為新增或修改 [BUG] 當沒有任何一筆滿意度的時候取得顧問平均分數會發生錯誤的問題修正

---
 pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java |  108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 108 insertions(+), 0 deletions(-)

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 5f8232c..4706c99 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
@@ -1,23 +1,38 @@
 package com.pollex.pam.service;
 
+import com.pollex.pam.config.ApplicationProperties;
+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.repository.SatisfactionRepository;
 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.ConsultantDTOMapper;
 import com.pollex.pam.service.mapper.ConsultantMapper;
+import com.pollex.pam.service.util.FileUtil;
 import com.pollex.pam.web.rest.errors.ConsultantNotFoundException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+import org.thymeleaf.context.Context;
+import org.thymeleaf.spring5.SpringTemplateEngine;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.util.Comparator;
 import java.util.List;
@@ -27,6 +42,7 @@
 import static com.pollex.pam.enums.ContactStatusEnum.*;
 
 @Service
+@Transactional
 public class ConsultantService {
 
     private static final Logger log = LoggerFactory.getLogger(ConsultantService.class);
@@ -51,6 +67,27 @@
 
     @Autowired
     SatisfactionService satisfactionService;
+
+    @Autowired
+    ConsultantDTOMapper consultantDTOMapper;
+
+    @Autowired
+    ApplicationProperties applicationProperty;
+    
+    @Autowired
+	SendMsgService sendMsgService;
+    
+    @Autowired
+    SpringTemplateEngine springTemplateEngine;
+    
+    @Autowired
+    ApplicationProperties applicationProperties;
+    
+    @Autowired
+    ConsultantService consultantService;
+    
+    @Autowired
+    SatisfactionRepository satisfactionRepository;
 
     public List<CustomerFavoriteConsultantDTO> getMyConsultantList() {
         Long customerId = SecurityUtils.getCustomerDBId();
@@ -201,4 +238,75 @@
     public Consultant findByAgentNo(String agentNo) {
         return consultantRepository.findOneByAgentNo(agentNo).get();
     }
+
+	public Consultant editConsultant(ConsultantEditDTO editDTO) {
+		Consultant consultant = consultantRepository.findOneByAgentNo(editDTO.getAgentNo())
+				.orElseThrow(ConsultantNotFoundException::new);
+		consultantDTOMapper.copyToConsultant(editDTO, consultant);
+		FileUtil.base64ToFile(editDTO.getPhotoBase64(), editDTO.getPhotoFileName(), applicationProperty.getFileFolderPath());
+		return consultantRepository.save(consultant);
+	}
+
+	public InputStream getAvatarImage(String agentNo) {
+		Consultant consultant = consultantRepository.findOneByAgentNo(agentNo)
+				.orElseThrow(ConsultantNotFoundException::new);
+		File file = new File(consultant.getPhotoPath());
+		try {
+			InputStream in = new FileInputStream(file);
+			return in;
+		} catch (FileNotFoundException e) {
+			log.error("agent photo not found , agentNo:"+agentNo,e);
+			return null;
+		}
+	}
+
+	public void sendSatisfactionToClient(Appointment appointment) {
+		String subject = "皛踵�漲憛怠神�";
+		
+		if(StringUtils.hasText(appointment.getEmail())) {
+			String content = genSendSatisfactionEmailContent(appointment);
+			sendMsgService.sendMsgByEmail(appointment.getEmail(), subject, content, true);
+			
+		}if(StringUtils.hasText(appointment.getPhone())) {
+			String content = genSendSatisfactionSMSContent(appointment);
+			sendMsgService.sendMsgBySMS(appointment.getPhone(), content);
+		}
+	}
+	
+	private String genSendSatisfactionSMSContent(Appointment appointment) {
+		String agentNo = appointment.getAgentNo();
+		Consultant consultant = consultantService.findByAgentNo(agentNo);
+		String contsultantName = consultant.getName();
+		String content = contsultantName+"憿批��憛怠神靽���像���遛��漲閰��"+getSendSatisfactionToClientUrl(appointment.getId());
+		return content;
+	}
+
+	private String genSendSatisfactionEmailContent(Appointment appointment) {
+		String agentNo = appointment.getAgentNo();
+		Consultant consultant = consultantService.findByAgentNo(agentNo);
+		Context context = new Context();
+        context.setVariable("consultantName", consultant.getName());
+        context.setVariable("appointmentUrl", getSendSatisfactionToClientUrl(appointment.getId()));
+        String content = springTemplateEngine.process("mail/writeSatisfactionNotice", context);
+		return content;
+	}
+
+	public String getSendSatisfactionToClientUrl(Long appointmentId) {
+        return applicationProperties.getFrontEndDomain() + "/?appointmentId=" + appointmentId;
+    }
+	
+	public void setConsultantAvgScore(Satisfaction satisfaction) {
+		float avgScore = getAgentAvgScore(satisfaction.getAgentNo());
+		Consultant consultant = consultantRepository.findOneByAgentNo(satisfaction.getAgentNo())
+				.get();
+		consultant.setAvgScore(avgScore);
+		consultantRepository.save(consultant);
+	}
+
+	public float getAgentAvgScore(String agentNo) {
+		Float avgScore = satisfactionRepository.getAgentScoreAvg(agentNo);
+		if(avgScore==null)return 0;
+		BigDecimal bigDecimal = new BigDecimal(avgScore);  
+		return avgScore = bigDecimal.setScale(1,BigDecimal.ROUND_HALF_UP).floatValue();
+	}
 }

--
Gitblit v1.8.0