ialbert 2022-09-20 16:47:00 +03:00
parent 220caec7cc
commit f72d7ff8e2

View file

@ -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<UserAuthRequest> 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<UserLogoutRequest> 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);