From 4b1639583efdb417cdf9a999a74d6d17835cc252 Mon Sep 17 00:00:00 2001
From: wayne <wayne8692wayne8692@gmail.com>
Date: 星期一, 29 十一月 2021 16:40:04 +0800
Subject: [PATCH] [add] 客戶、顧問登入紀錄

---
 pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java                 |   13 ++
 pamapi/src/main/java/com/pollex/pam/enums/LoginMethod.java                                |    6 +
 pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java                       |   66 +++++++++++
 pamapi/src/main/java/com/pollex/pam/domain/Consultant.java                                |   13 --
 pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java                               |   94 +++++++++++++++
 pamapi/src/main/java/com/pollex/pam/enums/LoginResult.java                                |    6 +
 pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java                           |   11 +
 pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java                  |    5 
 /dev/null                                                                                 |   90 ---------------
 pamapi/src/doc/sql/20211129_w.sql                                                         |   11 +
 pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java                       |   12 -
 pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java                        |   11 +
 pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java |   16 +-
 pamapi/src/doc/顧問API/指定顧問詳細資訊.txt                                                         |    2 
 14 files changed, 230 insertions(+), 126 deletions(-)

diff --git a/pamapi/src/doc/sql/20211129_w.sql b/pamapi/src/doc/sql/20211129_w.sql
new file mode 100644
index 0000000..d35339b
--- /dev/null
+++ b/pamapi/src/doc/sql/20211129_w.sql
@@ -0,0 +1,11 @@
+ALTER TABLE omo.consultant DROP COLUMN latest_login_time;
+
+CREATE TABLE omo.login_record (
+    id bigserial NOT NULL,
+    account varchar NOT NULL,
+    login_method varchar NOT NULL,
+    login_date timestamp NOT NULL,
+    "result" varchar NOT NULL,
+    failed_reason varchar NULL,
+    CONSTRAINT login_record_pk PRIMARY KEY (id)
+);
diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\351\241\247\345\225\217\347\264\260\347\257\200.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt"
similarity index 91%
rename from "pamapi/src/doc/\351\241\247\345\225\217API/\351\241\247\345\225\217\347\264\260\347\257\200.txt"
rename to "pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt"
index d9b09c2..97b3fe6 100644
--- "a/pamapi/src/doc/\351\241\247\345\225\217API/\351\241\247\345\225\217\347\264\260\347\257\200.txt"
+++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt"
@@ -11,7 +11,7 @@
     "phoneNumber": "0912345678",
     "serveArea": "������",
     "companyAddress": "����縑蝢拙�敹�頝臭�畾�1���",
-    "latestLoginTime": null,
+    "latestLoginTime": "2021-11-29T07:39:22.135Z",      // ����敺�蝝�����葆null
     "seniority": "4撟�2���",
     "suitability": 0,
     "evaluation": 0,
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java b/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java
index 6fd2b42..890a849 100644
--- a/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java
+++ b/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java
@@ -4,7 +4,6 @@
 
 import javax.persistence.*;
 import java.io.Serializable;
-import java.time.Instant;
 
 @Entity
 @Table(name = "consultant")
@@ -50,9 +49,6 @@
 
     @Column(name = "company_address")
     private String companyAddress;
-
-    @Column(name = "latest_login_time")
-    private Instant latestLoginTime;
 
     @Column(name = "seniority")
     private String seniority;
@@ -168,14 +164,6 @@
         companyAddress = companyAddress;
     }
 
-    public Instant getLatestLoginTime() {
-        return latestLoginTime;
-    }
-
-    public void setLatestLoginTime(Instant lastLoginTime) {
-        this.latestLoginTime = lastLoginTime;
-    }
-
     public String getSeniority() {
         return seniority;
     }
@@ -239,7 +227,6 @@
             ", gender=" + gender +
             ", phoneNumber='" + phoneNumber + '\'' +
             ", companyAddress='" + companyAddress + '\'' +
-            ", latestLoginTime=" + latestLoginTime +
             ", seniority='" + seniority + '\'' +
             ", concept='" + concept + '\'' +
             ", experience='" + experience + '\'' +
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java b/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java
new file mode 100644
index 0000000..e74556b
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java
@@ -0,0 +1,94 @@
+package com.pollex.pam.domain;
+
+import com.pollex.pam.enums.LoginMethod;
+import com.pollex.pam.enums.LoginResult;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.time.Instant;
+
+@Entity
+@Table(name = "login_record")
+public class LoginRecord implements Serializable {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "account")
+    private String account;
+
+    @Enumerated(EnumType.STRING)
+    @Column(name = "login_method")
+    private LoginMethod loginMethod;
+
+    @Column(name = "login_date", updatable = false)
+    private Instant loginDate = Instant.now();
+
+    @Enumerated(EnumType.STRING)
+    @Column(name = "result")
+    private LoginResult result;
+
+    @Column(name = "failed_reason")
+    private String failedReason;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getAccount() {
+        return account;
+    }
+
+    public void setAccount(String account) {
+        this.account = account;
+    }
+
+    public LoginMethod getLoginMethod() {
+        return loginMethod;
+    }
+
+    public void setLoginMethod(LoginMethod loginMethod) {
+        this.loginMethod = loginMethod;
+    }
+
+    public Instant getLoginDate() {
+        return loginDate;
+    }
+
+    public void setLoginDate(Instant createdDate) {
+        this.loginDate = createdDate;
+    }
+
+    public LoginResult getResult() {
+        return result;
+    }
+
+    public void setResult(LoginResult result) {
+        this.result = result;
+    }
+
+    public String getFailedReason() {
+        return failedReason;
+    }
+
+    public void setFailedReason(String failedReason) {
+        this.failedReason = failedReason;
+    }
+
+    @Override
+    public String toString() {
+        return "LoginRecord{" +
+            "id=" + id +
+            ", account='" + account + '\'' +
+            ", loginMethod=" + loginMethod +
+            ", createdDate=" + loginDate +
+            ", result=" + result +
+            ", failedReason='" + failedReason + '\'' +
+            '}';
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/LoginMethod.java b/pamapi/src/main/java/com/pollex/pam/enums/LoginMethod.java
new file mode 100644
index 0000000..836e852
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/enums/LoginMethod.java
@@ -0,0 +1,6 @@
+package com.pollex.pam.enums;
+
+public enum LoginMethod {
+    OTP,
+    E_SERVICE
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/LoginResult.java b/pamapi/src/main/java/com/pollex/pam/enums/LoginResult.java
new file mode 100644
index 0000000..562700d
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/enums/LoginResult.java
@@ -0,0 +1,6 @@
+package com.pollex.pam.enums;
+
+public enum LoginResult {
+    SUCCESS,
+    FAIL
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java
new file mode 100644
index 0000000..525ee85
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java
@@ -0,0 +1,13 @@
+package com.pollex.pam.repository;
+
+import com.pollex.pam.domain.LoginRecord;
+import com.pollex.pam.enums.LoginResult;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface LoginRecordRepository extends JpaRepository<LoginRecord, Long> {
+    Optional<LoginRecord> findTopByAccountAndResultOrderByLoginDate(String account, LoginResult loginResult);
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java b/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java
index 0f7db32..a23c399 100644
--- a/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java
+++ b/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java
@@ -1,14 +1,12 @@
 package com.pollex.pam.security.provider;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.pollex.pam.config.ApplicationProperties;
 import com.pollex.pam.domain.Consultant;
 import com.pollex.pam.enums.ConsultantDetailEnum;
-import com.pollex.pam.enums.CustomerDetailEnum;
 import com.pollex.pam.repository.ConsultantRepository;
 import com.pollex.pam.security.token.EServiceAuthenticationToken;
-import com.pollex.pam.service.dto.EServiceRequest;
+import com.pollex.pam.service.LoginRecordService;
 import com.pollex.pam.service.dto.EServiceResponse;
 import org.apache.http.conn.ssl.NoopHostnameVerifier;
 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
@@ -22,7 +20,6 @@
 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
-import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
 import org.springframework.security.authentication.AuthenticationServiceException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
@@ -54,11 +51,15 @@
     @Autowired
     ConsultantRepository consultantRepository;
 
+    @Autowired
+    LoginRecordService loginRecordService;
+
     public Authentication authenticate(EServiceAuthenticationToken authenticationToken) throws AuthenticationException {
         String account = authenticationToken.getPrincipal();
         String credentials = authenticationToken.getCredentials();
 
         if(applicationProperty.isMockLogin()){
+            loginRecordService.saveEServiceLoginSuccessRecord(account);
             return getConsultantToken(account, credentials);
         }
 
@@ -68,10 +69,13 @@
                 EServiceResponse eServiceResponse = responseEntity.getBody();
 
                 if(E_SERVICE_LOGIN_SUCCESS_CODE.equals(eServiceResponse.getCode())){
+                    loginRecordService.saveEServiceLoginSuccessRecord(account);
                     return getConsultantToken(account, credentials);
                 }
-
-                throw new RuntimeException("eService login failed, eService response code = " + eServiceResponse.getCode() + ", eService response msg = " + eServiceResponse.getMsg());
+                else {
+                    loginRecordService.saveEServiceLoginFailRecord(account, eServiceResponse.getMsg());
+                    throw new RuntimeException("eService login failed, eService response code = " + eServiceResponse.getCode() + ", eService response msg = " + eServiceResponse.getMsg());
+                }
             }
 
             throw new RuntimeException("eService http error!, response http status code = " + responseEntity.getStatusCode());
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 f59f84b..76af3d3 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
@@ -3,6 +3,7 @@
 import com.pollex.pam.domain.AppointmentCustomerView;
 import com.pollex.pam.domain.Consultant;
 import com.pollex.pam.domain.CustomerFavoriteConsultant;
+import com.pollex.pam.enums.LoginResult;
 import com.pollex.pam.repository.AppointmentCustomerViewRepository;
 import com.pollex.pam.repository.ConsultantRepository;
 import com.pollex.pam.repository.CustomerFavoriteConsultantRepository;
@@ -43,6 +44,9 @@
     @Autowired
     AppointmentCustomerViewMapper appointmentCustomerViewMapper;
 
+    @Autowired
+    LoginRecordService loginRecordService;
+
     public List<ConsultantDTO> getMyConsultantList() {
         Long userId = SecurityUtils.getCustomerDBId();
         return customerFavoriteConsultantRepository.findAllByCustomerId(userId)
@@ -74,7 +78,12 @@
 
     public ConsultantDetailDTO getConsultantDetail(String agentNo) {
         Consultant consultant = consultantRepository.findOneByAgentNo(agentNo).orElseThrow(ConsultantNotFoundException::new);
-        return consultantMapper.toDetailDto(consultant);
+        ConsultantDetailDTO consultantDetailDTO = consultantMapper.toDetailDto(consultant);
+
+        loginRecordService.findLatestLoginRecord(agentNo, LoginResult.SUCCESS)
+                .ifPresent(loginRecord -> consultantDetailDTO.setLatestLoginTime(loginRecord.getLoginDate()));
+
+        return consultantDetailDTO;
     }
 
     @Transactional
diff --git a/pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java b/pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java
new file mode 100644
index 0000000..2bbb169
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java
@@ -0,0 +1,66 @@
+package com.pollex.pam.service;
+
+import com.pollex.pam.domain.LoginRecord;
+import com.pollex.pam.enums.LoginResult;
+import com.pollex.pam.repository.LoginRecordRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Optional;
+
+import static com.pollex.pam.enums.LoginMethod.E_SERVICE;
+import static com.pollex.pam.enums.LoginMethod.OTP;
+import static com.pollex.pam.enums.LoginResult.FAIL;
+import static com.pollex.pam.enums.LoginResult.SUCCESS;
+
+
+@Service
+@Transactional
+public class LoginRecordService {
+
+    @Autowired
+    LoginRecordRepository loginRecordRepository;
+
+    public Optional<LoginRecord> findLatestLoginRecord(String account, LoginResult loginResult) {
+        return loginRecordRepository.findTopByAccountAndResultOrderByLoginDate(account, loginResult);
+    }
+
+    public void saveOTPLoginSuccessRecord(String account) {
+        LoginRecord loginRecord = new LoginRecord();
+        loginRecord.setAccount(account);
+        loginRecord.setLoginMethod(OTP);
+        loginRecord.setResult(SUCCESS);
+
+        loginRecordRepository.save(loginRecord);
+    }
+
+    public void saveOTPLoginFailRecord(String account, String failReason) {
+        LoginRecord loginRecord = new LoginRecord();
+        loginRecord.setAccount(account);
+        loginRecord.setLoginMethod(OTP);
+        loginRecord.setResult(FAIL);
+        loginRecord.setFailedReason(failReason);
+
+        loginRecordRepository.save(loginRecord);
+    }
+
+    public void saveEServiceLoginSuccessRecord(String account) {
+        LoginRecord loginRecord = new LoginRecord();
+        loginRecord.setAccount(account);
+        loginRecord.setLoginMethod(E_SERVICE);
+        loginRecord.setResult(SUCCESS);
+
+        loginRecordRepository.save(loginRecord);
+    }
+
+    public void saveEServiceLoginFailRecord(String account, String failReason) {
+        LoginRecord loginRecord = new LoginRecord();
+        loginRecord.setAccount(account);
+        loginRecord.setLoginMethod(E_SERVICE);
+        loginRecord.setResult(FAIL);
+        loginRecord.setFailedReason(failReason);
+
+        loginRecordRepository.save(loginRecord);
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/LoginService.java b/pamapi/src/main/java/com/pollex/pam/service/LoginService.java
deleted file mode 100644
index 0cd4b29..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/LoginService.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.pollex.pam.service;
-
-import java.security.KeyManagementException;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.SSLContext;
-
-import org.apache.http.conn.ssl.NoopHostnameVerifier;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.ssl.SSLContexts;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
-import org.springframework.stereotype.Service;
-import org.springframework.web.client.RestTemplate;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.service.dto.EServiceRequest;
-import com.pollex.pam.service.dto.EServiceResponse;
-import com.pollex.pam.web.rest.vm.OtpEmailLoginVM;
-import com.pollex.pam.web.rest.vm.OtpSMSLoginVM;
-import com.pollex.pam.web.rest.vm.VerifyOtpVM;
-
-
-@Service
-public class LoginService {
-
-    private final ApplicationProperties applicationProperties;
-
-    public LoginService(ApplicationProperties applicationProperties) {
-        this.applicationProperties = applicationProperties;
-    }
-
-    public void otpLoginByPhone(OtpSMSLoginVM login) {
-
-    }
-
-    public void otpLoginByEmail(OtpEmailLoginVM login) {
-
-    }
-
-    public void verifyOtp(VerifyOtpVM verifyOtpParam) {
-        // todo 閬���tp�����
-
-        // ��身�����B��Ⅱ隤�
-    }
-
-    public ResponseEntity<EServiceResponse> loginByEService(String account, String paxxword) throws Exception{
-        EServiceRequest dto = new EServiceRequest();
-        dto.setFunc("ValidateUserLogin");
-        dto.setId(account);
-        dto.setPin(paxxword);
-        dto.setPwd(paxxword);
-        dto.setSys("epos");
-
-        String dtoJson = new ObjectMapper().writeValueAsString(dto);
-
-        RestTemplate restTemplate = getTrustAllRestTemplate();
-
-        HttpHeaders headers = new HttpHeaders();
-        headers.setContentType(MediaType.APPLICATION_JSON);
-
-        HttpEntity<String> entity = new HttpEntity<>(dtoJson, headers);
-        return restTemplate.exchange(applicationProperties.geteServiceLoginUrl(), HttpMethod.POST, entity, EServiceResponse.class);
-    }
-
-    private RestTemplate getTrustAllRestTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
-
-        SSLContext sslContext = SSLContexts.custom()
-            .loadTrustMaterial(null, (X509Certificate[] x509Certs, String s) -> true)
-            .build();
-        SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
-        CloseableHttpClient httpClient = HttpClients.custom()
-            .setSSLSocketFactory(csf)
-            .build();
-        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
-        requestFactory.setHttpClient(httpClient);
-        requestFactory.setConnectTimeout(300000);
-        requestFactory.setReadTimeout(300000);
-        return new RestTemplate(requestFactory);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java b/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
index c9a949f..be48bd2 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
@@ -10,7 +10,6 @@
 import org.springframework.stereotype.Service;
 
 import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.security.provider.OtpAuthenticationProvider;
 import com.pollex.pam.service.dto.OtpResponseDTO;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -28,6 +27,9 @@
     @Autowired
     OtpTmpService otpTmpService;
 
+    @Autowired
+    LoginRecordService loginRecordService;
+
     @Transactional
     public void verifyOtp(VerifyOtpVM verifyOtpParam) {
         verifyOtp(verifyOtpParam.getAccount(), verifyOtpParam.getIndexKey(), verifyOtpParam.getOtpCode());
@@ -37,10 +39,15 @@
     public void verifyOtp(String account, String indexKey, String otpCode) {
     	try {
             if(applicationProperty.isMockLogin()){
+                loginRecordService.saveOTPLoginSuccessRecord(account);
                 log.debug("Do MockLogin");
             } else {  // otp logon
                 OtpResponseDTO otpResponseDTO = otpWebService.verifyOTP(indexKey, otpCode);
-                if (!otpResponseDTO.isSuccess()) {
+                if (otpResponseDTO.isSuccess()) {
+                    loginRecordService.saveOTPLoginSuccessRecord(account);
+                }
+                else {
+                    loginRecordService.saveOTPLoginFailRecord(account, otpResponseDTO.getFailReason());
                     throw new AuthenticationCredentialsNotFoundException("");
                 }
             }
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 138c713..ea9842b 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
@@ -72,17 +72,16 @@
         consultantDetailDTO.setPhoneNumber(source.getPhoneNumber());
         consultantDetailDTO.setServeArea(source.getServeArea());
         consultantDetailDTO.setCompanyAddress(source.getCompanyAddress());
-        consultantDetailDTO.setLatestLoginTime(source.getLatestLoginTime());
         consultantDetailDTO.setSeniority(source.getSeniority());
         consultantDetailDTO.setConcept(source.getConcept());
         consultantDetailDTO.setAwards(source.getAward());
         consultantDetailDTO.setImage(source.getPhotoPath());
+        consultantDetailDTO.setExpertises(splitStringWithChar(source.getExpertise()));
+        consultantDetailDTO.setExperiences(splitStringWithChar(source.getExperience()));
 
         // todo 瘙箏����漲
         consultantDetailDTO.setSuitability(50);
         consultantDetailDTO.setEvaluation(50);
-        consultantDetailDTO.setExpertises(splitStringWithChar(source.getExpertise()));
-        consultantDetailDTO.setExperiences(splitStringWithChar(source.getExperience()));
 
         return consultantDetailDTO;
     }
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java
index d4286dc..947b621 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java
@@ -1,17 +1,11 @@
 package com.pollex.pam.web.rest;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.security.jwt.JWTFilter;
 import com.pollex.pam.security.jwt.TokenProvider;
-import com.pollex.pam.security.token.EServiceAuthenticationToken;
-import com.pollex.pam.security.token.OtpAuthenticationToken;
-import com.pollex.pam.service.LoginService;
+import com.pollex.pam.service.LoginRecordService;
 import com.pollex.pam.service.OtpWebService;
-import com.pollex.pam.service.dto.EServiceRequest;
 import com.pollex.pam.service.dto.EServiceResponse;
 import com.pollex.pam.service.dto.OtpResponseDTO;
-import com.pollex.pam.web.rest.vm.OtpAccount;
 import org.apache.http.conn.ssl.NoopHostnameVerifier;
 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -25,8 +19,6 @@
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.util.UriComponentsBuilder;
@@ -51,7 +43,7 @@
     private final static Logger log = LoggerFactory.getLogger(TestLoginResource.class);
 
     @Autowired
-    LoginService loginService;
+    LoginRecordService loginRecordService;
 
     @Autowired
     ApplicationProperties applicationProperty;

--
Gitblit v1.8.0