From 925f8b4ffca99f07c629660d42c48f531b4f77a0 Mon Sep 17 00:00:00 2001
From: wayne <wayne8692wayne8692@gmail.com>
Date: 星期一, 21 二月 2022 18:17:14 +0800
Subject: [PATCH] [update] 移除login_record欄位,改統一放之後 將新開的稽核欄位"audit_logging",並在顧問欄位加開最後上線時間

---
 /dev/null                                                                                 |   66 ----------------------
 pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java                       |    4 -
 pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java                        |   10 ---
 pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java |   18 ++---
 pamapi/src/doc/sql/20220221_w.sql                                                         |   21 +++++++
 pamapi/src/main/java/com/pollex/pam/domain/Consultant.java                                |   11 +++
 pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java                           |    5 -
 7 files changed, 40 insertions(+), 95 deletions(-)

diff --git a/pamapi/src/doc/sql/20220221_w.sql b/pamapi/src/doc/sql/20220221_w.sql
new file mode 100644
index 0000000..2e24808
--- /dev/null
+++ b/pamapi/src/doc/sql/20220221_w.sql
@@ -0,0 +1,21 @@
+CREATE TABLE public.audit_logging (
+      id bigserial NOT NULL,
+      functional_type varchar NULL,
+      "content" varchar NULL,
+      created_by varchar NULL,
+      created_date timestamp NULL,
+      CONSTRAINT audit_logging_pk PRIMARY KEY (id)
+);
+
+ALTER TABLE public.consultant ADD latest_login_time timestamp NULL;
+
+update consultant set latest_login_time = (select login_date from login_record where account = 'A183619275' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'A183619275';
+update consultant set latest_login_time = (select login_date from login_record where account = 'AGAM11249699' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'AGAM11249699';
+update consultant set latest_login_time = (select login_date from login_record where account = 'Z152717443' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'Z152717443';
+update consultant set latest_login_time = (select login_date from login_record where account = 'D265260662' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'D265260662';
+update consultant set latest_login_time = (select login_date from login_record where account = 'AG0109051204' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'AG0109051204';
+update consultant set latest_login_time = (select login_date from login_record where account = 'B282677963' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'B282677963';
+update consultant set latest_login_time = (select login_date from login_record where account = 'AG0101234567' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'AG0101234567';
+update consultant set latest_login_time = (select login_date from login_record where account = 'X147309614' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'X147309614';
+update consultant set latest_login_time = (select login_date from login_record where account = 'J149388015' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'J149388015';
+update consultant set latest_login_time = (select login_date from login_record where account = 'R221444250' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'R221444250';
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 401c42d..f3552b3 100644
--- a/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java
+++ b/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java
@@ -5,6 +5,7 @@
 
 import javax.persistence.*;
 import java.io.Serializable;
+import java.time.Instant;
 
 @Entity
 @Table(name = "consultant")
@@ -79,6 +80,8 @@
     @Column(name = "status")
     private ConsultantStatusEnum status;
 
+    @Column(name = "latest_login_time")
+    private Instant latestLoginTime;
 
     public Long getId() {
         return id;
@@ -255,6 +258,14 @@
         this.status = status;
     }
 
+    public Instant getLatestLoginTime() {
+        return latestLoginTime;
+    }
+
+    public void setLatestLoginTime(Instant latestLoginTime) {
+        this.latestLoginTime = latestLoginTime;
+    }
+
     @Override
     public String toString() {
         return "Consultant{" +
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java b/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java
deleted file mode 100644
index 42bce49..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java
+++ /dev/null
@@ -1,96 +0,0 @@
-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 {
-
-    private static final long serialVersionUID = 1L;
-
-    @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/repository/LoginRecordRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java
deleted file mode 100644
index 6d8f3ab..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java
+++ /dev/null
@@ -1,13 +0,0 @@
-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> findTopByAccountAndResultOrderByLoginDateDesc(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 a5b9aaa..8b12535 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
@@ -4,10 +4,8 @@
 import com.pollex.pam.config.ApplicationProperties;
 import com.pollex.pam.domain.Consultant;
 import com.pollex.pam.enums.ConsultantDetailEnum;
-import com.pollex.pam.enums.ConsultantStatusEnum;
 import com.pollex.pam.repository.ConsultantRepository;
 import com.pollex.pam.security.token.EServiceAuthenticationToken;
-import com.pollex.pam.service.LoginRecordService;
 import com.pollex.pam.service.dto.EServiceResponse;
 import com.pollex.pam.web.rest.errors.ConsultantDisableException;
 import com.pollex.pam.web.rest.errors.EServiceErrorException;
@@ -39,6 +37,7 @@
 import java.security.KeyStoreException;
 import java.security.NoSuchAlgorithmException;
 import java.security.cert.X509Certificate;
+import java.time.Instant;
 import java.util.*;
 
 import static com.pollex.pam.enums.ConsultantStatusEnum.DISABLE;
@@ -55,16 +54,12 @@
     @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);
+            return getConsultantTokenAndRecordLoginTime(account, credentials);
         }
 
         try {
@@ -74,11 +69,9 @@
                 log.debug("eService response = {}", eServiceResponse);
 
                 if(E_SERVICE_LOGIN_SUCCESS_CODE.equals(eServiceResponse.getIssuccess())){
-                    loginRecordService.saveEServiceLoginSuccessRecord(account);
-                    return getConsultantToken(account, credentials);
+                    return getConsultantTokenAndRecordLoginTime(account, credentials);
                 }
                 else {
-                    loginRecordService.saveEServiceLoginFailRecord(account, eServiceResponse.getMsg());
                     throw new EServiceErrorException(eServiceResponse.getMsg());
                 }
             }
@@ -91,13 +84,16 @@
         }
     }
 
-    private UsernamePasswordAuthenticationToken getConsultantToken(String account, String credential) throws ConsultantDisableException {
+    private UsernamePasswordAuthenticationToken getConsultantTokenAndRecordLoginTime(String account, String credential) throws ConsultantDisableException {
         Consultant consultant = consultantRepository.findOneByAgentNo(account).orElseThrow(() -> new UsernameNotFoundException("閰脤“����蒂銝��慦�像�蝟餌絞銝�"));
 
         if(consultant.getStatus() == DISABLE) {
             throw new ConsultantDisableException("憿批�董�����銝�");
         }
 
+        consultant.setLatestLoginTime(Instant.now());
+        consultantRepository.save(consultant);
+
         List<GrantedAuthority> grantedAuths = Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"));
         UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(account, credential, grantedAuths);
 
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 58c96d9..246eef7 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
@@ -61,9 +61,6 @@
     AppointmentService appointmentService;
 
     @Autowired
-    LoginRecordService loginRecordService;
-
-    @Autowired
     AppointmentCustomerViewMapper appointmentCustomerViewMapper;
 
     @Autowired
@@ -225,12 +222,7 @@
 
     public ConsultantDetailDTO getConsultantDetail(String agentNo) {
         Consultant consultant = consultantRepository.findOneByAgentNo(agentNo).orElseThrow(ConsultantNotFoundException::new);
-        ConsultantDetailDTO consultantDetailDTO = consultantMapper.toDetailDto(consultant);
-
-        loginRecordService.findLatestLoginRecord(agentNo, LoginResult.SUCCESS)
-                .ifPresent(loginRecord -> consultantDetailDTO.setLatestLoginTime(loginRecord.getLoginDate()));
-
-        return consultantDetailDTO;
+        return consultantMapper.toDetailDto(consultant);
     }
 
     @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
deleted file mode 100644
index 8c0b8c4..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java
+++ /dev/null
@@ -1,66 +0,0 @@
-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.findTopByAccountAndResultOrderByLoginDateDesc(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/OtpUtilService.java b/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
index 868901a..9736d8e 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
@@ -28,9 +28,6 @@
     @Autowired
     OtpTmpService otpTmpService;
 
-    @Autowired
-    LoginRecordService loginRecordService;
-
     @Transactional
     public void verifyOtp(VerifyOtpVM verifyOtpParam) {
         verifyOtp(verifyOtpParam.getAccount(), verifyOtpParam.getIndexKey(), verifyOtpParam.getOtpCode());
@@ -47,11 +44,9 @@
             }
             else {
                 log.info("otp login fail... , account = {}, error code = {}, failReason = {}", account, otpResponseDTO.getFailCode(), otpResponseDTO.getFailReason());
-                loginRecordService.saveOTPLoginFailRecord(account, otpResponseDTO.getFailReason());
                 throw new OtpLoginFailException(otpResponseDTO.getFailCode());
             }
         }
-        loginRecordService.saveOTPLoginSuccessRecord(account);
         setVerrifiedOtpTmp(account, indexKey);
     }
 
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 947b621..0487285 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
@@ -2,7 +2,6 @@
 
 import com.pollex.pam.config.ApplicationProperties;
 import com.pollex.pam.security.jwt.TokenProvider;
-import com.pollex.pam.service.LoginRecordService;
 import com.pollex.pam.service.OtpWebService;
 import com.pollex.pam.service.dto.EServiceResponse;
 import com.pollex.pam.service.dto.OtpResponseDTO;
@@ -41,9 +40,6 @@
 public class TestLoginResource {
 
     private final static Logger log = LoggerFactory.getLogger(TestLoginResource.class);
-
-    @Autowired
-    LoginRecordService loginRecordService;
 
     @Autowired
     ApplicationProperties applicationProperty;

--
Gitblit v1.8.0