|
|
|
@ -4,11 +4,17 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
import com.mfsys.aconnect.client.dto.ThirdPartyUserDTO;
|
|
|
|
import com.mfsys.aconnect.client.dto.ThirdPartyUserDTO;
|
|
|
|
import com.mfsys.aconnect.configuration.config.WebClientConfig;
|
|
|
|
import com.mfsys.aconnect.configuration.config.WebClientConfig;
|
|
|
|
import com.mfsys.aconnect.usermanagement.dto.UserDTOs;
|
|
|
|
import com.mfsys.aconnect.usermanagement.dto.UserDTOs;
|
|
|
|
|
|
|
|
import com.mfsys.aconnect.usermanagement.exceptions.EmailAlreadyExistException;
|
|
|
|
|
|
|
|
import com.mfsys.aconnect.usermanagement.exceptions.UsernameAlreadyExistException;
|
|
|
|
|
|
|
|
import com.mfsys.aconnect.usermanagement.repository.UserRepository;
|
|
|
|
import com.mfsys.aconnect.usermanagement.model.Role;
|
|
|
|
import com.mfsys.aconnect.usermanagement.model.Role;
|
|
|
|
import com.mfsys.aconnect.usermanagement.service.UserService;
|
|
|
|
import com.mfsys.aconnect.usermanagement.service.UserService;
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.http.*;
|
|
|
|
import org.springframework.http.*;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
@Service
|
|
|
|
@ -20,16 +26,28 @@ public class ThirdPartyUserService {
|
|
|
|
private final WebClientConfig webClientConfig;
|
|
|
|
private final WebClientConfig webClientConfig;
|
|
|
|
private final UserService userService;
|
|
|
|
private final UserService userService;
|
|
|
|
private final ObjectMapper objectMapper;
|
|
|
|
private final ObjectMapper objectMapper;
|
|
|
|
|
|
|
|
private final UserRepository userRepository;
|
|
|
|
|
|
|
|
|
|
|
|
public ThirdPartyUserService(WebClientConfig webClientConfig, UserService userService, ObjectMapper objectMapper){
|
|
|
|
public ThirdPartyUserService(WebClientConfig webClientConfig, UserService userService, ObjectMapper objectMapper, UserRepository userRepository){
|
|
|
|
this.webClientConfig = webClientConfig;
|
|
|
|
this.webClientConfig = webClientConfig;
|
|
|
|
this.userService = userService;
|
|
|
|
this.userService = userService;
|
|
|
|
this.objectMapper = objectMapper;
|
|
|
|
this.objectMapper = objectMapper;
|
|
|
|
|
|
|
|
this.userRepository = userRepository;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Object createThirdPartyUser(ThirdPartyUserDTO request, String token){
|
|
|
|
public Object createThirdPartyUser(ThirdPartyUserDTO request, String token){
|
|
|
|
String porOrgacode = request.getPorOrgacode();
|
|
|
|
String porOrgacode = request.getPorOrgacode();
|
|
|
|
String url = securityURI + "/security/user";
|
|
|
|
String url = securityURI + "/security/thirdParty/user";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (userRepository.existsByUserId(request.getSusUsercode())) {
|
|
|
|
|
|
|
|
throw new UsernameAlreadyExistException(porOrgacode);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (userRepository.existsByEmail(request.getSusEmail())) {
|
|
|
|
|
|
|
|
throw new EmailAlreadyExistException(porOrgacode);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> payloadMap = buildPayload(request);
|
|
|
|
|
|
|
|
Map<String, Object> ciihiveRequest = buildCiihiveRequest(request, payloadMap);
|
|
|
|
|
|
|
|
|
|
|
|
HttpHeaders headers = new HttpHeaders();
|
|
|
|
HttpHeaders headers = new HttpHeaders();
|
|
|
|
headers.set("Authorization", token);
|
|
|
|
headers.set("Authorization", token);
|
|
|
|
@ -37,35 +55,78 @@ public class ThirdPartyUserService {
|
|
|
|
headers.set("SUS_USERCODE", request.getUsercode());
|
|
|
|
headers.set("SUS_USERCODE", request.getUsercode());
|
|
|
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
|
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
|
|
|
|
|
|
|
|
|
|
ResponseEntity<Object> response = webClientConfig.post(url, request, headers);
|
|
|
|
ResponseEntity<Object> response = webClientConfig.post(url, ciihiveRequest, headers);
|
|
|
|
if (response.getStatusCode().is2xxSuccessful()) {
|
|
|
|
if (response.getStatusCode().is2xxSuccessful()) {
|
|
|
|
saveToAconnect(request);
|
|
|
|
saveToAconnect(request);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return response.getBody();
|
|
|
|
return response.getBody();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void saveToAconnect(ThirdPartyUserDTO request) {
|
|
|
|
private Map<String, Object> buildPayload(ThirdPartyUserDTO request) {
|
|
|
|
|
|
|
|
Map<String, Object> payload = new HashMap<>();
|
|
|
|
|
|
|
|
payload.put("SUS_USERCODE", request.getSusUsercode());
|
|
|
|
|
|
|
|
payload.put("SUS_NAME", request.getSusName());
|
|
|
|
|
|
|
|
payload.put("SUS_EMPCODE", request.getSusEmpcode());
|
|
|
|
|
|
|
|
payload.put("SUS_PASSWORD", request.getSusPassword());
|
|
|
|
|
|
|
|
payload.put("SUS_ACTIVE", request.getSusActive() != null ? request.getSusActive() : true);
|
|
|
|
|
|
|
|
payload.put("SUS_USERCELLNO", request.getSusUsercellno());
|
|
|
|
|
|
|
|
payload.put("SUS_THIRDPARTY", request.getSusThirdparty() != null ? request.getSusThirdparty() : true);
|
|
|
|
|
|
|
|
payload.put("SUS_EMAIL", request.getSusEmail());
|
|
|
|
|
|
|
|
payload.put("POR_ORGACODE", request.getPorOrgacode());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
payload.put("SUS_TRACKING", true);
|
|
|
|
|
|
|
|
payload.put("IS_2ND_LEVEL_ALLOWED", false);
|
|
|
|
|
|
|
|
payload.put("TELLER_PROFILE", false);
|
|
|
|
|
|
|
|
payload.put("SHOW_LICENSE_INFO", false);
|
|
|
|
|
|
|
|
payload.put("SUS_SIGNLOG", "A");
|
|
|
|
|
|
|
|
payload.put("@_CREATEUSER", request.getUsercode());
|
|
|
|
|
|
|
|
payload.put("SUL_LEVELCODE", Arrays.asList(
|
|
|
|
|
|
|
|
"01","02","03","04","05","06","07","08","09","10", "11","12","13","14","15","16","17","18","19","20", "21","22","23","24","25","26","27","28","29","30", "31","32","33"
|
|
|
|
|
|
|
|
));
|
|
|
|
|
|
|
|
payload.put("SUS_MULTILOGIN", Arrays.asList(
|
|
|
|
|
|
|
|
"0011","000403","0006","0005","0007","000602","001102", "000902","0001","0002","0004","000703","000402","0009", "000404","000202","0098","000903","000702","0010"
|
|
|
|
|
|
|
|
));
|
|
|
|
|
|
|
|
payload.put("SUS_HOMELOCATION", "0001");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return payload;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Map<String, Object> buildCiihiveRequest(ThirdPartyUserDTO request, Map<String, Object> payloadMap) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
Map<String, Object> payloadMap = objectMapper.readValue(request.getPayload(), Map.class);
|
|
|
|
Map<String, Object> ciihiveRequest = new HashMap<>();
|
|
|
|
|
|
|
|
ciihiveRequest.put("formId", request.getFormId());
|
|
|
|
|
|
|
|
ciihiveRequest.put("postProcessFormId", request.getPostProcessFormId());
|
|
|
|
|
|
|
|
ciihiveRequest.put("workFlowId", request.getWorkFlowId());
|
|
|
|
|
|
|
|
ciihiveRequest.put("operation", request.getOperation());
|
|
|
|
|
|
|
|
ciihiveRequest.put("POR_ORGACODE", request.getPorOrgacode());
|
|
|
|
|
|
|
|
ciihiveRequest.put("uniqueConstraints", request.getUniqueConstraints());
|
|
|
|
|
|
|
|
ciihiveRequest.put("formCounters", request.getFormCounters());
|
|
|
|
|
|
|
|
ciihiveRequest.put("payload", objectMapper.writeValueAsString(payloadMap));
|
|
|
|
|
|
|
|
return ciihiveRequest;
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
throw new RuntimeException("Failed to build Ciihive request: " + e.getMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void saveToAconnect(ThirdPartyUserDTO request) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
UserDTOs.UserRequest userRequest = new UserDTOs.UserRequest();
|
|
|
|
UserDTOs.UserRequest userRequest = new UserDTOs.UserRequest();
|
|
|
|
userRequest.setUserId(getStr(payloadMap, "SUS_USERCODE"));
|
|
|
|
userRequest.setUserId(request.getSusUsercode());
|
|
|
|
userRequest.setPorOrgacode(getStr(payloadMap, "POR_ORGACODE"));
|
|
|
|
userRequest.setPorOrgacode(request.getPorOrgacode());
|
|
|
|
userRequest.setUserFullname(getStr(payloadMap, "SUS_NAME"));
|
|
|
|
userRequest.setUserFullname(request.getSusName());
|
|
|
|
userRequest.setPassword(getStr(payloadMap, "SUS_PASSWORD"));
|
|
|
|
userRequest.setPassword(request.getSusPassword());
|
|
|
|
userRequest.setEmail(getStr(payloadMap, "SUS_EMAIL"));
|
|
|
|
userRequest.setEmail(request.getSusEmail());
|
|
|
|
userRequest.setRole(Role.USER);
|
|
|
|
userRequest.setRole(Role.USER);
|
|
|
|
|
|
|
|
|
|
|
|
userService.createUser(userRequest);
|
|
|
|
userService.createUser(userRequest);
|
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
System.err.println("Failed to save third party user to Aconnect: " + e.getMessage());
|
|
|
|
System.err.println("Failed to save third party user to Aconnect: " + e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private String getStr(Map<String, Object> map, String key) {
|
|
|
|
// private String getStr(Map<String, Object> map, String key) {
|
|
|
|
Object val = map.get(key);
|
|
|
|
// Object val = map.get(key);
|
|
|
|
return val != null ? val.toString() : null;
|
|
|
|
// return val != null ? val.toString() : null;
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|