From f72d7ff8e20a55040cdfb3dcd05db6be0d78a1a1 Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 20 Sep 2022 16:47:00 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-63 --- .../clearing/utility/service/UserService.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserService.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserService.java index f66629a65..7a96a3fdd 100644 --- a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserService.java +++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserService.java @@ -13,6 +13,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.utilities.UserAuthRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.utilities.UserLogoutRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.platform.enumeration.ConnectionState; import ru.spcex.platform.enumeration.Status; @@ -46,17 +47,40 @@ public class UserService extends QueueConsumer implements InitializingBean { callback(UserAuthRequest.class) .setConsumer(this::userAuthSuccess) .forDestination(Consts.USER_AUTH_SUCCESS, callbacks::put); + callback(UserLogoutRequest.class) + .setConsumer(this::usersLogoutSuccess) + .forDestination(Consts.USER_LOGOUT_SUCCESS, callbacks::put); init(); } private void userAuthSuccess(BaseRequest authEvent) { UserAuthRequest authInfo = authEvent.getRequestPayload(); - log.debug("user id={} authenticated", authInfo.getUsername()); + log.debug("user name={} authenticated", authInfo.getUsername()); UserInfo userInfo = createUserIfNeeded(authInfo.getUsername()); changeRoles(userInfo.userId, userInfo.isNew, authInfo.getRoles()); connected(userInfo.userId, authInfo.getTime(), authInfo.getClientIp(), authInfo.getServerIp()); } + private void usersLogoutSuccess(BaseRequest logoutEvent) { + UserLogoutRequest logoutInfo = logoutEvent.getRequestPayload(); + log.debug("user name={} logout", logoutInfo.getUsername()); + User user = userMap.getSingleObjectByFieldValues(Map.of("identifier", logoutInfo.getUsername())); + if (user == null) { + log.error("coudln't find user {}", logoutInfo.getUsername()); + return; + } + UserConnect userConnect = userConnectImdg.getSingleObjectByFieldValues(Map.of("userId", user.getId())); + if (userConnect == null) { + log.error("coudln't find UserConnect for {}", logoutInfo.getUsername()); + return; + } + userConnect.setDisconnectionTime(logoutInfo.getTime()); + userConnect.setUpdated(logoutInfo.getTime()); + userConnect.setConnectionState(ConnectionState.Disconnected.getKey()); + userConnect.setClearingDate(TimeUtil.today()); + userConnectImdg.update(userConnect); + } + private UserInfo createUserIfNeeded(String username) { User user = userMap.getSingleObjectByFieldValues(Map.of("identifier", username)); if (user == null) { @@ -104,7 +128,10 @@ public class UserService extends QueueConsumer implements InitializingBean { if (userConnect == null) { userConnect = new UserConnect(); userConnect.setUserId(userId); + userConnect.setCreated(time); isNew = true; + } else { + userConnect.setUpdated(time); } userConnect.setConnectionTime(time); userConnect.setServerIP(serverIp);