Merge pull request 'Wasi-ThirdParyUser' (#16) from Wasi-ThirdParyUser into FMFI-PRE-PRODUCTION-2026

Reviewed-on: https://ct.mfsys.com.pk/aConnect/aConnect-BS/pulls/16
FMFI-PRE-PRODUCTION-2026
Naeem Ullah 1 month ago
commit 83002950b1

@ -12,9 +12,14 @@ public class ThirdPartyUserDTO {
private String operation; private String operation;
private String porOrgacode; private String porOrgacode;
private String usercode; private String usercode;
private Map<String, String> filesMap;
private List<Object> autoIncrementFields;
private List<List<String>> uniqueConstraints; private List<List<String>> uniqueConstraints;
private List<Object> formCounters; private List<Object> formCounters;
private String payload; private String susUsercode;
private String susName;
private String susEmpcode;
private String susPassword;
private Boolean susActive;
private String susUsercellno;
private Boolean susThirdparty;
private String susEmail;
} }

@ -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;
} // }
} }

Loading…
Cancel
Save