From 3c2135eb2d7cb447211a77a762df983e42b9b843 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 4 Mar 2025 10:37:17 +0530 Subject: [PATCH 1/5] Bulk registration --- pom.xml | 4 + .../BulkRegistrationController.java | 84 +++ .../iemr/admin/data/bulkuser/Employee.java | 94 ++++ .../admin/data/bulkuser/EmployeeList.java | 17 + .../BulkRegistrationService.java | 5 + .../BulkRegistrationServiceImpl.java | 482 ++++++++++++++++++ .../bulkRegistration/EmployeeXmlService.java | 21 + .../employeemaster/EmployeeMasterInter.java | 1 + .../EmployeeMasterServiceImpl.java | 10 + .../service/rolemaster/Role_MasterInter.java | 15 +- .../rolemaster/Role_Master_ServiceImpl.java | 18 +- 11 files changed, 736 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java create mode 100644 src/main/java/com/iemr/admin/data/bulkuser/Employee.java create mode 100644 src/main/java/com/iemr/admin/data/bulkuser/EmployeeList.java create mode 100644 src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationService.java create mode 100644 src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java create mode 100644 src/main/java/com/iemr/admin/service/bulkRegistration/EmployeeXmlService.java diff --git a/pom.xml b/pom.xml index 080d7a2..13d9b28 100644 --- a/pom.xml +++ b/pom.xml @@ -54,6 +54,10 @@ org.springframework.boot spring-boot-devtools + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + org.springframework.boot spring-boot-starter diff --git a/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java b/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java new file mode 100644 index 0000000..9275237 --- /dev/null +++ b/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java @@ -0,0 +1,84 @@ +package com.iemr.admin.controller.bulkRegistration; + +import com.iemr.admin.repo.employeemaster.EmployeeMasterRepoo; +import com.iemr.admin.service.bulkRegistration.BulkRegistrationService; +import com.iemr.admin.service.bulkRegistration.BulkRegistrationServiceImpl; +import com.iemr.admin.service.bulkRegistration.EmployeeXmlService; +import com.iemr.admin.service.locationmaster.LocationMasterServiceInter; +import io.swagger.v3.oas.annotations.Operation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.Map; + +@RestController + +public class BulkRegistrationController { + @Autowired + private EmployeeXmlService employeeXmlService; + @Autowired + BulkRegistrationServiceImpl bulkRegistrationServiceimpl; + private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); + + + @Autowired + BulkRegistrationService bulkRegistrationService; + + @Autowired + private EmployeeMasterRepoo employeeMasterRepoo; + private Map errorResponse = new HashMap<>(); + @Autowired + private LocationMasterServiceInter locationMasterServiceInter; + private Map response = new HashMap<>(); + + + @CrossOrigin() + @RequestMapping(value = "/bulkRegistration",method = RequestMethod.POST,headers = "Authorization") + public ResponseEntity> registerBulkUser(@RequestBody String m_user) throws Exception { + logger.info("M_user Request"+m_user.toString()); + try { + bulkRegistrationService.registerBulkUser(m_user); + response.put("status","Success"); + response.put("statusCode",200); + response.put("totalUser",bulkRegistrationServiceimpl.totalEmployeeListSize); + response.put("registeredUser",bulkRegistrationServiceimpl.m_bulkUser.size()); + response.put("error",bulkRegistrationServiceimpl.errorLogs.toString()); + + bulkRegistrationServiceimpl.m_bulkUser.clear(); + bulkRegistrationServiceimpl.m_UserDemographics.clear(); + bulkRegistrationServiceimpl.errorLogs.clear(); + bulkRegistrationServiceimpl.validationErrors.clear(); + + } catch (Exception e) { + response.put("status","Fail"); + response.put("statusCode",500); + throw new RuntimeException(e); + } + return ResponseEntity.ok(response); + + } + @CrossOrigin() + @Operation(description = "Download formatted Excel sheet") + @RequestMapping(value = {"/downloadExcelSheet"},method = {RequestMethod.GET},consumes = {"application/octet-stream"}) + public ResponseEntity exportIntoExcelFile(){ + + // Load the Excel file from resources + ClassPathResource excelFile = new ClassPathResource("xlsxfile/bulkuser_excel_sheet.xlsx"); + + // Return the Excel file as a response with proper headers + return ResponseEntity.ok() + .contentType(MediaType.parseMediaType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + excelFile.getFilename() + "\"") + .body(excelFile); + } + + + +} diff --git a/src/main/java/com/iemr/admin/data/bulkuser/Employee.java b/src/main/java/com/iemr/admin/data/bulkuser/Employee.java new file mode 100644 index 0000000..74a1483 --- /dev/null +++ b/src/main/java/com/iemr/admin/data/bulkuser/Employee.java @@ -0,0 +1,94 @@ +package com.iemr.admin.data.bulkuser; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import lombok.Data; + +@Data +@JacksonXmlRootElement(localName = "Employee") +public class Employee { + + @JacksonXmlProperty(localName = "Title") + private String title; + + @JacksonXmlProperty(localName = "FirstName") + private String firstName; + + @JacksonXmlProperty(localName = "MiddleName") + private String middleName; + + @JacksonXmlProperty(localName = "LastName") + private String lastName; + + @JacksonXmlProperty(localName = "Gender") + private String gender; + + @JacksonXmlProperty(localName = "ContactNo") + private String contactNo; + + @JacksonXmlProperty(localName = "Designation") + private String designation; + + @JacksonXmlProperty(localName = "EmergencyContactNo") + private String emergencyContactNo; + + @JacksonXmlProperty(localName = "DOB") + private String dob; + + @JacksonXmlProperty(localName = "Age") + private int age; + + @JacksonXmlProperty(localName = "Email") + private String email; + + @JacksonXmlProperty(localName = "MaritalStatus") + private String maritalStatus; + + @JacksonXmlProperty(localName = "AadhaarNo") + private String aadhaarNo; + + @JacksonXmlProperty(localName = "PAN") + private String pan; + + @JacksonXmlProperty(localName = "Qualification") + private String qualification; + + @JacksonXmlProperty(localName = "FatherName") + private String fatherName; + + @JacksonXmlProperty(localName = "MotherName") + private String motherName; + + @JacksonXmlProperty(localName = "Community") + private String community; + + @JacksonXmlProperty(localName = "Religion") + private String religion; + + @JacksonXmlProperty(localName = "AddressLine1") + private String addressLine1; + + @JacksonXmlProperty(localName = "State") + private String state; + + @JacksonXmlProperty(localName = "District") + private String district; + + @JacksonXmlProperty(localName = "Pincode") + private String pincode; + + @JacksonXmlProperty(localName = "PermanentAddressLine1") + private String permanentAddressLine1; + + @JacksonXmlProperty(localName = "PermanentState") + private String permanentState; + + @JacksonXmlProperty(localName = "PermanentDistrict") + private String permanentDistrict; + + @JacksonXmlProperty(localName = "PermanentPincode") + private String permanentPincode; + + @JacksonXmlProperty(localName = "DateOfJoining") + private String dateOfJoining; +} diff --git a/src/main/java/com/iemr/admin/data/bulkuser/EmployeeList.java b/src/main/java/com/iemr/admin/data/bulkuser/EmployeeList.java new file mode 100644 index 0000000..7d656d2 --- /dev/null +++ b/src/main/java/com/iemr/admin/data/bulkuser/EmployeeList.java @@ -0,0 +1,17 @@ +package com.iemr.admin.data.bulkuser; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import lombok.Data; + +import java.util.List; + +@Data +@JacksonXmlRootElement(localName = "Employees") +public class EmployeeList { + + @JsonProperty("Employee") + @JacksonXmlElementWrapper(useWrapping = false) // To avoid extra nested array in XML + private List employees; +} diff --git a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationService.java b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationService.java new file mode 100644 index 0000000..55f42b7 --- /dev/null +++ b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationService.java @@ -0,0 +1,5 @@ +package com.iemr.admin.service.bulkRegistration; + +public interface BulkRegistrationService { + void registerBulkUser(String user); +} diff --git a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java new file mode 100644 index 0000000..b961385 --- /dev/null +++ b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java @@ -0,0 +1,482 @@ +package com.iemr.admin.service.bulkRegistration; + +import com.iemr.admin.data.bulkuser.Employee; +import com.iemr.admin.data.bulkuser.EmployeeList; +import com.iemr.admin.data.employeemaster.*; +import com.iemr.admin.data.locationmaster.M_District; +import com.iemr.admin.data.rolemaster.StateMasterForRole; +import com.iemr.admin.service.employeemaster.EmployeeMasterInter; +import com.iemr.admin.service.locationmaster.LocationMasterServiceInter; +import com.iemr.admin.service.rolemaster.Role_MasterInter; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.DateUtil; +import org.apache.poi.ss.usermodel.Row; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import java.io.ByteArrayOutputStream; +import java.math.BigInteger; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.spec.InvalidKeySpecException; +import java.sql.Date; +import java.sql.Timestamp; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Service +public class BulkRegistrationServiceImpl implements BulkRegistrationService { + private static final String PAN_REGEX = "^[A-Z]{8}[0-9]{3}$"; + private static final String EMAIL_REGEX = "^[\\w-.]+@[\\w-]+\\.[a-zA-Z]{2,}$"; + public Integer totalEmployeeListSize = 0; + private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); + + @Autowired + private EmployeeMasterInter employeeMasterInter; + @Autowired + private Role_MasterInter roleMasterInter; + @Autowired + private LocationMasterServiceInter locationMasterServiceInter; + + ByteArrayOutputStream out; + @Autowired + EmployeeXmlService employeeXmlService; + public List validationErrors = new ArrayList<>(); + + public List errorLogs = new ArrayList<>(); + public ArrayList m_bulkUser = new ArrayList<>(); + // public ArrayList m_bulkUser1 = new ArrayList<>(); + public ArrayList m_UserDemographics = new ArrayList<>(); + + private List m_districts; + + public List getValidationError() { + return validationErrors; + + } + + + + + @Override + public void registerBulkUser(String xml) { + try { + EmployeeList employeeList = employeeXmlService.parseXml(xml); + logger.info("employee_list" + employeeList.getEmployees().toString()); + totalEmployeeListSize = employeeList.getEmployees().size(); + for (int i = 0; i < employeeList.getEmployees().size(); i++) { + saveUserUser(employeeList.getEmployees().get(i), i); + + } + + + } catch (Exception e) { + System.out.println(e.getMessage()); + } + + + } + + + private void saveUserUser(Employee employee, Integer row) throws Exception { + logger.info("employee_list after for loop" + employee.toString()); + + + + if (employee.getTitle() == null || employee.getTitle().isEmpty() || getTitleId(employee.getTitle()) == 0) { + validationErrors.add("Title is missing or invalid."); + } + if (employee.getFirstName() == null || employee.getFirstName().isEmpty()) { + validationErrors.add("First Name is missing."); + } + if (employee.getLastName() == null || employee.getLastName().isEmpty()) { + validationErrors.add("Last Name is missing."); + } + if (employee.getEmail() == null || !employee.getEmail().matches(EMAIL_REGEX)) { + validationErrors.add("Invalid Email format."); + } + if (!isValidPhoneNumber(String.valueOf(employee.getContactNo()))) { + validationErrors.add("Contact Number must be exactly 10 digits."); + } + if (!isValidPhoneNumber(String.valueOf(employee.getEmergencyContactNo()))) { + validationErrors.add("Emergency Contact Number must be exactly 10 digits."); + } + if (!String.valueOf(employee.getAge()).matches("\\d{1,2}")) { + validationErrors.add("Age should be a 1 or 2-digit number."); + } + if (employee.getDob() == null || employee.getDob().toString().isEmpty()) { + validationErrors.add("Date of Birth is invalid."); + } + if (employee.getDateOfJoining() == null || employee.getDateOfJoining().toString().isEmpty()) { + validationErrors.add("Date of Joining is invalid."); + } + if (getStateId(employee.getState()) == 0) { + validationErrors.add("State is invalid."); + } + if (getDistrictId(employee.getDistrict()) == 0) { + validationErrors.add("District is invalid."); + } + + if (getStateId(employee.getPermanentState()) == 0) { + validationErrors.add("Permanent State is invalid."); + } + if (getDistrictId(employee.getPermanentDistrict()) == 0) { + validationErrors.add("Permanent District is invalid."); + } + if(employee.getPincode()==null|| employee.getPincode().isEmpty()){ + validationErrors.add("Pincode is invalid."); + + } + if(employee.getPermanentPincode()==null|| employee.getPermanentPincode().isEmpty()){ + validationErrors.add("Permanent Pincode is invalid."); + + } + if(isValidPAN(employee.getPan())){ + validationErrors.add("PAN is invalid."); + + } + + if (!validationErrors.isEmpty()) { + errorLogs.add("Row " + (row + 1) + ": " + String.join(", ", validationErrors)); + } + + + try { + logger.info("Title: " + employee.getTitle()); + logger.info("Title Id: " + getTitleId(employee.getTitle())); + logger.info("First Name: " + employee.getFirstName()); + logger.info("Last Name: " + employee.getLastName()); + logger.info("Email: " + employee.getEmail()); + logger.info("Contact No: " + employee.getContactNo()); + logger.info("Emergency Contact No: " + employee.getEmergencyContactNo()); + logger.info("Age: " + employee.getAge()); + logger.info("DOB: " + employee.getDob()); + logger.info("State: " + employee.getState()); + logger.info("State ID: " + getStateId(employee.getState())); + logger.info("District: " + employee.getDistrict()); + logger.info("District ID: " + getDistrictId(employee.getDistrict())); + logger.info("Designation: " + employee.getDesignation()); + logger.info("Designation Id: " + getDesignationId(employee.getDesignation())); + logger.info("Qualification: " + employee.getQualification()); + logger.info("Father Name: " + employee.getFatherName()); + logger.info("Mother Name: " + employee.getMotherName()); + logger.info("Address Line 1: " + employee.getAddressLine1()); + logger.info("Permanent Address: " + employee.getPermanentAddressLine1()); + logger.info("Aadhaar No: " + employee.getAadhaarNo()); + logger.info("PAN: " + employee.getPan()); + logger.info("Gender: " + employee.getGender()); + logger.info("Date of Joining: " + employee.getDateOfJoining()); + logger.info("Religion: " + employee.getReligion()); + logger.info("Community: " + employee.getCommunity()); + logger.info("Pincode: " + employee.getPincode()); + + + + M_User1 mUser = new M_User1(); + M_UserDemographics mUserDemographics = new M_UserDemographics(); + + mUser.setTitleID(getTitleId(employee.getTitle())); + mUser.setDesignationID(getDesignationId(employee.getDesignation())); + mUser.setDesignationName("ASHA"); + mUser.setFirstName(employee.getFirstName()); + mUser.setLastName(employee.getLastName()); + mUser.setUserName(employee.getContactNo()); + mUser.setdOB(convertStringIntoDate(employee.getDob())); + mUser.setEmployeeID(employee.getContactNo()); + mUser.setEmergencyContactNo(String.valueOf(employee.getEmergencyContactNo())); + mUser.setContactNo(String.valueOf(employee.getContactNo())); + mUser.setMiddleName(employee.getMiddleName()); + mUser.setAadhaarNo(String.valueOf(employee.getAadhaarNo())); + mUser.setpAN(employee.getPan()); +// mUser.setMaritalStatusID(getMaritalStatusID(employee.getMaritalStatus())); + mUser.setMaritalStatusID(1); + mUser.setEmailID(employee.getEmail()); + mUser.setGenderID(Short.parseShort(String.valueOf(getGenderId(employee.getGender())))); + mUser.setQualificationID(getQualificationId(employee.getQualification())); + mUser.setdOJ(convertStringIntoDate(employee.getDateOfJoining())); + mUser.setCreatedBy("PSMRIL2"); + mUser.setModifiedBy("PSMRIL2"); + mUser.setIsSupervisor(false); + mUser.setServiceProviderID(15); + mUser.setPassword(generateStrongPassword("Test@123")); + logger.info("M_user" + mUser); + M_User1 bulkUserID = employeeMasterInter.saveBulkUserEmployee(mUser); + System.out.println("bulk_userID" + bulkUserID.getUserID().toString()); + logger.info("M_user Id" + bulkUserID.getUserID()); + mUserDemographics.setUserID(bulkUserID.getUserID()); + mUserDemographics.setCountryID(91); + mUserDemographics.setCommunityID(getCommunityId(employee.getCommunity())); + mUserDemographics.setReligionID(getReligionStringId(employee.getReligion())); + mUserDemographics.setFathersName(employee.getFatherName()); + mUserDemographics.setCreatedBy("PSMRIL2"); + mUserDemographics.setAddressLine1(employee.getAddressLine1()); + mUserDemographics.setPermAddressLine1(employee.getPermanentAddressLine1()); + mUserDemographics.setPermStateID(getStateId(employee.getPermanentState())); + mUserDemographics.setPermDistrictID(getDistrictId(employee.getPermanentDistrict())); + mUserDemographics.setIsPermanent(false); + mUserDemographics.setPermPinCode(Integer.valueOf(employee.getPermanentPincode())); + mUserDemographics.setMothersName(employee.getMotherName()); + mUserDemographics.setAddressLine1(employee.getPermanentAddressLine1()); + mUserDemographics.setStateID(getStateId(employee.getState())); + mUserDemographics.setIsPresent(false); + mUserDemographics.setStateID(getStateId(employee.getState())); + mUserDemographics.setDistrictID(getDistrictId(employee.getDistrict())); + mUserDemographics.setPinCode(employee.getPincode().toString()); + employeeMasterInter.saveDemography(mUserDemographics); + m_bulkUser.add(mUser); + m_UserDemographics.add(mUserDemographics); + + } catch (Exception e) { + errorLogs.add("Row : " + (row+1) + e.getMessage()); + } + + + } + + + + + public int getGenderId(String genderString) { + int genderId = employeeMasterInter.getAllGender() + .stream() + .filter(gender -> gender.getGenderName().equalsIgnoreCase(genderString)) + .map(M_Gender::getGenderID) + .findFirst() + .orElse(0); + + if (genderId == 0) { + System.out.println("Gender name not found: " + genderString); + } else { + System.out.println("Gender ID: " + genderId); + } + + return genderId; + } + + + + + public int getTitleId(String titleString) { + int titleId = employeeMasterInter.getAllTitle() + .stream() + .filter(title -> title.getTitleName().equalsIgnoreCase(titleString)) + .map(M_Title::getTitleID) + .findFirst() + .orElse(0); + + + return titleId; + } + + + + public int getDesignationId(String designationString) { + + return 20; + } + + + public int getCommunityId(String communityString) { + int communityId = employeeMasterInter.getAllCommunity() + .stream() + .filter(community -> community.getCommunityType().equalsIgnoreCase(communityString)) + .map(M_Community::getCommunityID) + .findFirst() + .orElse(0); + + + return communityId; + } + + public int getQualificationId(String qualificationString) { + int qualificationId = employeeMasterInter.getQualification() + .stream() + .filter(q -> q.getUserQualificationDesc().equalsIgnoreCase(qualificationString)) + .map(M_Userqualification::getQualificationID) + .findFirst() + .orElse(0); + + + + return qualificationId; + } + + + //Religion + public int getReligionStringId(String religionString) { + return employeeMasterInter.getAllReligion() + .stream() + .filter(religion -> religion.getReligionType().equalsIgnoreCase(religionString)) + .map(M_Religion::getReligionID) + .findFirst() + .orElse(0); + } + + + public int getDistrictId(String districtName) { + return m_districts.stream() + .filter(m_district -> m_district.getDistrictName().equalsIgnoreCase(districtName)) + .map(M_District::getDistrictID) + .findFirst() + .orElse(0); + + } + + + public ArrayList getAllState() { + return roleMasterInter.getAllState(); + } + + + public int getStateId(String stateName) { + int stateId = roleMasterInter.getAllState() + .stream() + .filter(state -> state.getStateName().equalsIgnoreCase(stateName)) + .map(StateMasterForRole::getStateID) + .findFirst() + .orElse(0); + + if (stateId == 0) { + logger.info("State name not found: " + stateName); + } else { + System.out.println("State ID: " + stateId); + m_districts = locationMasterServiceInter.getAllDistrictByStateId(stateId); + } + + return stateId; + } + + + + + + private boolean isValidPAN(String pan) { + // Check if the PAN matches the regex + return Pattern.matches(PAN_REGEX, pan); + } + + private boolean isValidPhoneNumber(String phoneNumber) { + // Correct regex: Phone number must start with 6, 7, 8, or 9 and be exactly 10 digits + System.out.println("Phone Number" + phoneNumber); + String regex = "^[6789]\\d{9}$"; + + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(phoneNumber); + + return matcher.matches(); + } + + private Map getHeaderMap(Row headerRow) { + Map headerMap = new HashMap<>(); + for (Cell cell : headerRow) { + headerMap.put(cell.getStringCellValue().trim(), cell.getColumnIndex()); + } + return headerMap; + } + + private Integer getIntegerValue(Row row, Integer cellIndex) { + if (cellIndex == null) return null; + Cell cell = row.getCell(cellIndex); + return (cell != null && cell.getCellType() == CellType.NUMERIC) ? (int) cell.getNumericCellValue() : null; + } + + private Long getLongValue(Row row, Integer cellIndex) { + if (cellIndex == null) return null; + Cell cell = row.getCell(cellIndex); + return (cell != null && cell.getCellType() == CellType.NUMERIC) ? (long) cell.getNumericCellValue() : null; + } + + + private String getStringValue(Row row, Integer cellIndex) { + if (cellIndex == null || row.getCell(cellIndex) == null) return null; + Cell cell = row.getCell(cellIndex); + return (cell.getCellType() == CellType.STRING) ? cell.getStringCellValue().trim() : null; + } + + private void validateHeaders(Map headerMap, List requiredHeaders) { + for (String header : requiredHeaders) { + if (!headerMap.containsKey(header)) { + throw new RuntimeException("Missing required header: " + header); + } + } + } + + private Timestamp getTimestampValue(Row row, Integer cellIndex) { + if (cellIndex == null) return null; + Cell cell = row.getCell(cellIndex); + if (cell != null && cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)) { + return new Timestamp(cell.getDateCellValue().getTime()); + } + return null; + } + + + public Date convertStringIntoDate(String dateString) throws ParseException { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime dateTime = LocalDateTime.parse(dateString+" "+"00:00:00", formatter); + + + // Convert String to Date + return Date.valueOf(String.valueOf(dateTime)); + + } + + + private Timestamp getTimestampValue(String dateString) { + if (dateString == null || dateString.trim().isEmpty()) { + } + + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // + try { + return new Timestamp(dateFormat.parse(dateString).getTime()); + } catch (ParseException e) { + e.printStackTrace(); // + return null; + } + } + + + public String generateStrongPassword(String password) throws NoSuchAlgorithmException, InvalidKeySpecException { + int iterations = 1001; + char[] chars = password.toCharArray(); + byte[] salt = getSalt(); + + PBEKeySpec spec = new PBEKeySpec(chars, salt, iterations, 512); + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); + byte[] hash = skf.generateSecret(spec).getEncoded(); + return iterations + ":" + toHex(salt) + ":" + toHex(hash); + } + + private byte[] getSalt() throws NoSuchAlgorithmException { + SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); + byte[] salt = new byte[16]; + sr.nextBytes(salt); + return salt; + } + + private String toHex(byte[] array) throws NoSuchAlgorithmException { + BigInteger bi = new BigInteger(1, array); + String hex = bi.toString(16); + int paddingLength = array.length * 2 - hex.length(); + if (paddingLength > 0) { + return String.format(new StringBuilder().append("%0").append(paddingLength).append("d").toString(), + new Object[]{Integer.valueOf(0)}) + hex; + } + return hex; + } + + +} \ No newline at end of file diff --git a/src/main/java/com/iemr/admin/service/bulkRegistration/EmployeeXmlService.java b/src/main/java/com/iemr/admin/service/bulkRegistration/EmployeeXmlService.java new file mode 100644 index 0000000..7c10bb8 --- /dev/null +++ b/src/main/java/com/iemr/admin/service/bulkRegistration/EmployeeXmlService.java @@ -0,0 +1,21 @@ +package com.iemr.admin.service.bulkRegistration; + + +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.iemr.admin.data.bulkuser.EmployeeList; +import org.springframework.stereotype.Service; + +@Service +public class EmployeeXmlService { + + private final XmlMapper xmlMapper = new XmlMapper(); + + // Convert XML to EmployeeList (Java Object) + public EmployeeList parseXml(String xmlData) throws Exception { + System.out.println("user_xml_date"+xmlData.toString()); + + return xmlMapper.readValue(xmlData, EmployeeList.class); + } + + +} diff --git a/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterInter.java b/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterInter.java index aae5837..d91d8c7 100644 --- a/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterInter.java +++ b/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterInter.java @@ -184,4 +184,5 @@ Boolean checkingEmpDetails(String userName, String aadhaarNo, String getpAN, Str M_UserServiceRoleMapping2 deleteuserrolemapTM(M_UserServiceRoleMapping2 pre) throws Exception; + M_User1 saveBulkUserEmployee(M_User1 mUser); } diff --git a/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterServiceImpl.java b/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterServiceImpl.java index 41ee880..28d5072 100644 --- a/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterServiceImpl.java +++ b/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterServiceImpl.java @@ -1178,4 +1178,14 @@ public M_UserServiceRoleMapping2 deleteuserrolemapTM(M_UserServiceRoleMapping2 u return dataout; } + @Override + public M_User1 saveBulkUserEmployee(M_User1 mUser) { + logger.info("EmployeeMasterServiceImpl.saveEmployee - start"); + M_User1 data = employeeMasterRepo11.save(mUser); +// logger.info("Encrypt password returned " + encryptUserPassword.encryptUserCredentials(data).toString()); + Integer data1 = data.getUserID(); + logger.info("EmployeeMasterServiceImpl.saveEmployee - finish"); + return data; + } + } diff --git a/src/main/java/com/iemr/admin/service/rolemaster/Role_MasterInter.java b/src/main/java/com/iemr/admin/service/rolemaster/Role_MasterInter.java index 6cc99a4..9c432d9 100644 --- a/src/main/java/com/iemr/admin/service/rolemaster/Role_MasterInter.java +++ b/src/main/java/com/iemr/admin/service/rolemaster/Role_MasterInter.java @@ -24,12 +24,7 @@ import java.util.ArrayList; import java.util.List; -import com.iemr.admin.data.rolemaster.RoleMaster; -import com.iemr.admin.data.rolemaster.M_Role104; -import com.iemr.admin.data.rolemaster.M_Screen; -import com.iemr.admin.data.rolemaster.M_UserservicerolemappingForRoleProviderAdmin; -import com.iemr.admin.data.rolemaster.RoleScreenMapping; -import com.iemr.admin.data.rolemaster.StateServiceMapping; +import com.iemr.admin.data.rolemaster.*; public interface Role_MasterInter { @@ -56,7 +51,7 @@ public interface Role_MasterInter { List mapScreen(RoleScreenMapping mRoles2); String settingScreenId(Integer sRSMappingID, Integer screenID); - + public ArrayList getProStateServRoles1(int pssmID); List mapfeature(List mRoles3); @@ -64,7 +59,7 @@ public interface Role_MasterInter { ArrayList getServiceByServiceProviderIds(Integer userID); ArrayList getStateByServiceProviderIdAndServiceLines(Integer userID, - Integer serviceID,Boolean isNational); + Integer serviceID,Boolean isNational); ArrayList getAllByMapId(Integer serviceProviderID, Integer serviceID); @@ -76,8 +71,10 @@ ArrayList getStateByServiceProvide RoleMaster configWrapUpTime(RoleMaster role) throws Exception; + ArrayList getAllState(); + + - } diff --git a/src/main/java/com/iemr/admin/service/rolemaster/Role_Master_ServiceImpl.java b/src/main/java/com/iemr/admin/service/rolemaster/Role_Master_ServiceImpl.java index 1471395..683487d 100644 --- a/src/main/java/com/iemr/admin/service/rolemaster/Role_Master_ServiceImpl.java +++ b/src/main/java/com/iemr/admin/service/rolemaster/Role_Master_ServiceImpl.java @@ -46,8 +46,8 @@ import jakarta.persistence.EntityManager; @Service -public class Role_Master_ServiceImpl implements Role_MasterInter -{ +public class Role_Master_ServiceImpl implements Role_MasterInter { + @Autowired private StateMasterRepo stateMasterRepo; @@ -62,7 +62,7 @@ public class Role_Master_ServiceImpl implements Role_MasterInter @Autowired private RoleScreenMappingRepo roleScreenMappingRepo; - + @Autowired private M_ScreenRepo m_ScreenRepo; @@ -279,7 +279,7 @@ public ArrayList getServiceByServi @Override public ArrayList - getStateByServiceProviderIdAndServiceLines(Integer userID, Integer serviceID, Boolean isNational) + getStateByServiceProviderIdAndServiceLines(Integer userID, Integer serviceID, Boolean isNational) { if (isNational == false) { @@ -364,7 +364,7 @@ public ArrayList getProStateServRolesActive(Integer providerServiceM public RoleMaster configWrapUpTime(RoleMaster role) throws Exception { // TODO Auto-generated method stub RoleMaster buff=mRoleRepo.findByRoleID(role.getRoleID()); - + if(buff==null) { throw new Exception("Invalid Role"); } @@ -374,8 +374,14 @@ public RoleMaster configWrapUpTime(RoleMaster role) throws Exception { buff.setIsWrapUpTime(role.getIsWrapUpTime()); buff.setWrapUpTime(role.getWrapUpTime()); buff.setModifiedBy(role.getModifiedBy()); - + return mRoleRepo.save(buff); } + @Override + public ArrayList getAllState() { + return stateMasterRepo.getAllState(); + } + + } From 23cccacd1126a01a5a3c39ad33dcf405535524c7 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Mar 2025 14:10:44 +0530 Subject: [PATCH 2/5] Bulk registration --- .../controller/bulkRegistration/BulkRegistrationController.java | 2 -- .../service/bulkRegistration/BulkRegistrationServiceImpl.java | 1 - 2 files changed, 3 deletions(-) diff --git a/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java b/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java index 9275237..dde1937 100644 --- a/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java +++ b/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java @@ -39,7 +39,6 @@ public class BulkRegistrationController { private Map response = new HashMap<>(); - @CrossOrigin() @RequestMapping(value = "/bulkRegistration",method = RequestMethod.POST,headers = "Authorization") public ResponseEntity> registerBulkUser(@RequestBody String m_user) throws Exception { logger.info("M_user Request"+m_user.toString()); @@ -64,7 +63,6 @@ public ResponseEntity> registerBulkUser(@RequestBody String return ResponseEntity.ok(response); } - @CrossOrigin() @Operation(description = "Download formatted Excel sheet") @RequestMapping(value = {"/downloadExcelSheet"},method = {RequestMethod.GET},consumes = {"application/octet-stream"}) public ResponseEntity exportIntoExcelFile(){ diff --git a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java index b961385..b4b1cfc 100644 --- a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java +++ b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java @@ -443,7 +443,6 @@ private Timestamp getTimestampValue(String dateString) { try { return new Timestamp(dateFormat.parse(dateString).getTime()); } catch (ParseException e) { - e.printStackTrace(); // return null; } } From 83f693ebb9bfb5be3f58631548e34ee7f70922f5 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 13 Mar 2025 11:30:50 +0530 Subject: [PATCH 3/5] Bulk registration --- .../BulkRegistrationController.java | 6 +- .../BulkRegistrationService.java | 2 +- .../BulkRegistrationServiceImpl.java | 131 +++--------------- 3 files changed, 20 insertions(+), 119 deletions(-) diff --git a/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java b/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java index dde1937..24b146a 100644 --- a/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java +++ b/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java @@ -40,10 +40,10 @@ public class BulkRegistrationController { @RequestMapping(value = "/bulkRegistration",method = RequestMethod.POST,headers = "Authorization") - public ResponseEntity> registerBulkUser(@RequestBody String m_user) throws Exception { - logger.info("M_user Request"+m_user.toString()); + public ResponseEntity> registerBulkUser(@RequestBody String m_user,@RequestHeader String authorization) throws Exception { + logger.info("Bulk registration request received. Request payload is omitted from logs."); try { - bulkRegistrationService.registerBulkUser(m_user); + bulkRegistrationService.registerBulkUser(m_user,authorization); response.put("status","Success"); response.put("statusCode",200); response.put("totalUser",bulkRegistrationServiceimpl.totalEmployeeListSize); diff --git a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationService.java b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationService.java index 55f42b7..2e5d0dd 100644 --- a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationService.java +++ b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationService.java @@ -1,5 +1,5 @@ package com.iemr.admin.service.bulkRegistration; public interface BulkRegistrationService { - void registerBulkUser(String user); + void registerBulkUser(String user,String authorization); } diff --git a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java index b4b1cfc..c7c7e99 100644 --- a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java +++ b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java @@ -8,9 +8,8 @@ import com.iemr.admin.service.employeemaster.EmployeeMasterInter; import com.iemr.admin.service.locationmaster.LocationMasterServiceInter; import com.iemr.admin.service.rolemaster.Role_MasterInter; +import com.iemr.admin.utils.JwtUtil; import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellType; -import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Row; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,9 +24,7 @@ import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; import java.sql.Date; -import java.sql.Timestamp; import java.text.ParseException; -import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -43,6 +40,8 @@ public class BulkRegistrationServiceImpl implements BulkRegistrationService { private static final String EMAIL_REGEX = "^[\\w-.]+@[\\w-]+\\.[a-zA-Z]{2,}$"; public Integer totalEmployeeListSize = 0; private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); + @Autowired + JwtUtil jwtUtil; @Autowired private EmployeeMasterInter employeeMasterInter; @@ -58,7 +57,6 @@ public class BulkRegistrationServiceImpl implements BulkRegistrationService { public List errorLogs = new ArrayList<>(); public ArrayList m_bulkUser = new ArrayList<>(); - // public ArrayList m_bulkUser1 = new ArrayList<>(); public ArrayList m_UserDemographics = new ArrayList<>(); private List m_districts; @@ -69,33 +67,29 @@ public List getValidationError() { } - - @Override - public void registerBulkUser(String xml) { + public void registerBulkUser(String xml, String authorization) { try { EmployeeList employeeList = employeeXmlService.parseXml(xml); logger.info("employee_list" + employeeList.getEmployees().toString()); totalEmployeeListSize = employeeList.getEmployees().size(); for (int i = 0; i < employeeList.getEmployees().size(); i++) { - saveUserUser(employeeList.getEmployees().get(i), i); + saveUserUser(employeeList.getEmployees().get(i), i, authorization); } } catch (Exception e) { - System.out.println(e.getMessage()); + logger.error("Exception:" + e.getMessage()); } } - private void saveUserUser(Employee employee, Integer row) throws Exception { + private void saveUserUser(Employee employee, Integer row, String authorization) throws Exception { logger.info("employee_list after for loop" + employee.toString()); - - if (employee.getTitle() == null || employee.getTitle().isEmpty() || getTitleId(employee.getTitle()) == 0) { validationErrors.add("Title is missing or invalid."); } @@ -136,15 +130,15 @@ private void saveUserUser(Employee employee, Integer row) throws Exception { if (getDistrictId(employee.getPermanentDistrict()) == 0) { validationErrors.add("Permanent District is invalid."); } - if(employee.getPincode()==null|| employee.getPincode().isEmpty()){ + if (employee.getPincode() == null || employee.getPincode().isEmpty()) { validationErrors.add("Pincode is invalid."); } - if(employee.getPermanentPincode()==null|| employee.getPermanentPincode().isEmpty()){ + if (employee.getPermanentPincode() == null || employee.getPermanentPincode().isEmpty()) { validationErrors.add("Permanent Pincode is invalid."); } - if(isValidPAN(employee.getPan())){ + if (!isValidPAN(employee.getPan())) { validationErrors.add("PAN is invalid."); } @@ -155,35 +149,6 @@ private void saveUserUser(Employee employee, Integer row) throws Exception { try { - logger.info("Title: " + employee.getTitle()); - logger.info("Title Id: " + getTitleId(employee.getTitle())); - logger.info("First Name: " + employee.getFirstName()); - logger.info("Last Name: " + employee.getLastName()); - logger.info("Email: " + employee.getEmail()); - logger.info("Contact No: " + employee.getContactNo()); - logger.info("Emergency Contact No: " + employee.getEmergencyContactNo()); - logger.info("Age: " + employee.getAge()); - logger.info("DOB: " + employee.getDob()); - logger.info("State: " + employee.getState()); - logger.info("State ID: " + getStateId(employee.getState())); - logger.info("District: " + employee.getDistrict()); - logger.info("District ID: " + getDistrictId(employee.getDistrict())); - logger.info("Designation: " + employee.getDesignation()); - logger.info("Designation Id: " + getDesignationId(employee.getDesignation())); - logger.info("Qualification: " + employee.getQualification()); - logger.info("Father Name: " + employee.getFatherName()); - logger.info("Mother Name: " + employee.getMotherName()); - logger.info("Address Line 1: " + employee.getAddressLine1()); - logger.info("Permanent Address: " + employee.getPermanentAddressLine1()); - logger.info("Aadhaar No: " + employee.getAadhaarNo()); - logger.info("PAN: " + employee.getPan()); - logger.info("Gender: " + employee.getGender()); - logger.info("Date of Joining: " + employee.getDateOfJoining()); - logger.info("Religion: " + employee.getReligion()); - logger.info("Community: " + employee.getCommunity()); - logger.info("Pincode: " + employee.getPincode()); - - M_User1 mUser = new M_User1(); M_UserDemographics mUserDemographics = new M_UserDemographics(); @@ -201,27 +166,23 @@ private void saveUserUser(Employee employee, Integer row) throws Exception { mUser.setMiddleName(employee.getMiddleName()); mUser.setAadhaarNo(String.valueOf(employee.getAadhaarNo())); mUser.setpAN(employee.getPan()); -// mUser.setMaritalStatusID(getMaritalStatusID(employee.getMaritalStatus())); mUser.setMaritalStatusID(1); mUser.setEmailID(employee.getEmail()); mUser.setGenderID(Short.parseShort(String.valueOf(getGenderId(employee.getGender())))); mUser.setQualificationID(getQualificationId(employee.getQualification())); mUser.setdOJ(convertStringIntoDate(employee.getDateOfJoining())); - mUser.setCreatedBy("PSMRIL2"); - mUser.setModifiedBy("PSMRIL2"); + mUser.setCreatedBy(jwtUtil.extractUsername(authorization)); + mUser.setModifiedBy(jwtUtil.extractUsername(authorization)); mUser.setIsSupervisor(false); mUser.setServiceProviderID(15); mUser.setPassword(generateStrongPassword("Test@123")); - logger.info("M_user" + mUser); M_User1 bulkUserID = employeeMasterInter.saveBulkUserEmployee(mUser); - System.out.println("bulk_userID" + bulkUserID.getUserID().toString()); - logger.info("M_user Id" + bulkUserID.getUserID()); mUserDemographics.setUserID(bulkUserID.getUserID()); mUserDemographics.setCountryID(91); mUserDemographics.setCommunityID(getCommunityId(employee.getCommunity())); mUserDemographics.setReligionID(getReligionStringId(employee.getReligion())); mUserDemographics.setFathersName(employee.getFatherName()); - mUserDemographics.setCreatedBy("PSMRIL2"); + mUserDemographics.setCreatedBy(jwtUtil.extractUsername(authorization)); mUserDemographics.setAddressLine1(employee.getAddressLine1()); mUserDemographics.setPermAddressLine1(employee.getPermanentAddressLine1()); mUserDemographics.setPermStateID(getStateId(employee.getPermanentState())); @@ -240,15 +201,13 @@ private void saveUserUser(Employee employee, Integer row) throws Exception { m_UserDemographics.add(mUserDemographics); } catch (Exception e) { - errorLogs.add("Row : " + (row+1) + e.getMessage()); + errorLogs.add("Row : " + (row + 1) + e.getMessage()); } } - - public int getGenderId(String genderString) { int genderId = employeeMasterInter.getAllGender() .stream() @@ -267,8 +226,6 @@ public int getGenderId(String genderString) { } - - public int getTitleId(String titleString) { int titleId = employeeMasterInter.getAllTitle() .stream() @@ -282,7 +239,6 @@ public int getTitleId(String titleString) { } - public int getDesignationId(String designationString) { return 20; @@ -310,11 +266,9 @@ public int getQualificationId(String qualificationString) { .orElse(0); - return qualificationId; } - //Religion public int getReligionStringId(String religionString) { return employeeMasterInter.getAllReligion() @@ -359,10 +313,6 @@ public int getStateId(String stateName) { return stateId; } - - - - private boolean isValidPAN(String pan) { // Check if the PAN matches the regex return Pattern.matches(PAN_REGEX, pan); @@ -387,64 +337,15 @@ private Map getHeaderMap(Row headerRow) { return headerMap; } - private Integer getIntegerValue(Row row, Integer cellIndex) { - if (cellIndex == null) return null; - Cell cell = row.getCell(cellIndex); - return (cell != null && cell.getCellType() == CellType.NUMERIC) ? (int) cell.getNumericCellValue() : null; - } - - private Long getLongValue(Row row, Integer cellIndex) { - if (cellIndex == null) return null; - Cell cell = row.getCell(cellIndex); - return (cell != null && cell.getCellType() == CellType.NUMERIC) ? (long) cell.getNumericCellValue() : null; - } - - - private String getStringValue(Row row, Integer cellIndex) { - if (cellIndex == null || row.getCell(cellIndex) == null) return null; - Cell cell = row.getCell(cellIndex); - return (cell.getCellType() == CellType.STRING) ? cell.getStringCellValue().trim() : null; - } - - private void validateHeaders(Map headerMap, List requiredHeaders) { - for (String header : requiredHeaders) { - if (!headerMap.containsKey(header)) { - throw new RuntimeException("Missing required header: " + header); - } - } - } - - private Timestamp getTimestampValue(Row row, Integer cellIndex) { - if (cellIndex == null) return null; - Cell cell = row.getCell(cellIndex); - if (cell != null && cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)) { - return new Timestamp(cell.getDateCellValue().getTime()); - } - return null; - } - public Date convertStringIntoDate(String dateString) throws ParseException { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - LocalDateTime dateTime = LocalDateTime.parse(dateString+" "+"00:00:00", formatter); + LocalDateTime dateTime = LocalDateTime.parse(dateString + " " + "00:00:00", formatter); // Convert String to Date - return Date.valueOf(String.valueOf(dateTime)); - - } - + return Date.valueOf(String.valueOf(dateTime)); - private Timestamp getTimestampValue(String dateString) { - if (dateString == null || dateString.trim().isEmpty()) { - } - - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // - try { - return new Timestamp(dateFormat.parse(dateString).getTime()); - } catch (ParseException e) { - return null; - } } From cdd7b2a1a0d0d7ca2c8977bc895abc9b46693639 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 31 Mar 2025 13:12:10 +0530 Subject: [PATCH 4/5] add userName and password in Bulk registration --- pom.xml | 13 +- .../BulkRegistrationController.java | 65 +- .../data/bulkuser/BulkRegistrationError.java | 12 + .../iemr/admin/data/bulkuser/Employee.java | 74 +- .../admin/data/employeemaster/M_Religion.java | 3 +- .../employeemaster/EmployeeMasterRepoo.java | 7 + .../BulkRegistrationServiceImpl.java | 707 ++++++++++++++---- .../employeemaster/EmployeeMasterInter.java | 3 + .../EmployeeMasterServiceImpl.java | 19 + .../utils/JwtUserIdValidationFilter.java | 187 ++--- 10 files changed, 787 insertions(+), 303 deletions(-) create mode 100644 src/main/java/com/iemr/admin/data/bulkuser/BulkRegistrationError.java diff --git a/pom.xml b/pom.xml index 13d9b28..5d04359 100644 --- a/pom.xml +++ b/pom.xml @@ -31,6 +31,7 @@ 1.2.0.Final 1.16.18 ${ENV_VAR} + target/classes/application.properties target/classes/admin_${environment}.properties @@ -77,6 +78,11 @@ org.springframework.boot spring-boot-starter-data-jpa + + org.apache.commons + commons-compress + 1.21 + org.springframework.boot spring-boot-starter-web @@ -185,12 +191,7 @@ org.apache.poi poi-ooxml 5.2.3 - - - org.apache.commons - commons-compress - - + diff --git a/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java b/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java index 24b146a..fafa4d2 100644 --- a/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java +++ b/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java @@ -6,6 +6,7 @@ import com.iemr.admin.service.bulkRegistration.EmployeeXmlService; import com.iemr.admin.service.locationmaster.LocationMasterServiceInter; import io.swagger.v3.oas.annotations.Operation; +import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,7 +20,6 @@ import java.util.Map; @RestController - public class BulkRegistrationController { @Autowired private EmployeeXmlService employeeXmlService; @@ -33,50 +33,59 @@ public class BulkRegistrationController { @Autowired private EmployeeMasterRepoo employeeMasterRepoo; - private Map errorResponse = new HashMap<>(); + private Map errorResponse = new HashMap<>(); @Autowired private LocationMasterServiceInter locationMasterServiceInter; - private Map response = new HashMap<>(); - + private Map response = new HashMap<>(); - @RequestMapping(value = "/bulkRegistration",method = RequestMethod.POST,headers = "Authorization") - public ResponseEntity> registerBulkUser(@RequestBody String m_user,@RequestHeader String authorization) throws Exception { - logger.info("Bulk registration request received. Request payload is omitted from logs."); + @CrossOrigin() + @PostMapping(value = "/bulkRegistration", headers = "Authorization") + public ResponseEntity> registerBulkUser(@RequestBody String m_user, @RequestHeader String authorization) { + bulkRegistrationServiceimpl.bulkRegistrationErrors.clear(); + logger.info("Bulk registration request received. Request payload is omitted from logs."); try { - bulkRegistrationService.registerBulkUser(m_user,authorization); - response.put("status","Success"); - response.put("statusCode",200); - response.put("totalUser",bulkRegistrationServiceimpl.totalEmployeeListSize); - response.put("registeredUser",bulkRegistrationServiceimpl.m_bulkUser.size()); - response.put("error",bulkRegistrationServiceimpl.errorLogs.toString()); + bulkRegistrationService.registerBulkUser(m_user, authorization); + response.put("status", "Success"); + response.put("statusCode", 200); + response.put("totalUser", bulkRegistrationServiceimpl.totalEmployeeListSize); + response.put("registeredUser", bulkRegistrationServiceimpl.m_bulkUser.size()); + response.put("error", bulkRegistrationServiceimpl.errorLogs.toString()); bulkRegistrationServiceimpl.m_bulkUser.clear(); bulkRegistrationServiceimpl.m_UserDemographics.clear(); bulkRegistrationServiceimpl.errorLogs.clear(); - bulkRegistrationServiceimpl.validationErrors.clear(); + bulkRegistrationServiceimpl.totalEmployeeListSize=0; } catch (Exception e) { - response.put("status","Fail"); - response.put("statusCode",500); - throw new RuntimeException(e); + response.put("message", e.getMessage()); + response.put("statusCode", 500); + } return ResponseEntity.ok(response); } - @Operation(description = "Download formatted Excel sheet") - @RequestMapping(value = {"/downloadExcelSheet"},method = {RequestMethod.GET},consumes = {"application/octet-stream"}) - public ResponseEntity exportIntoExcelFile(){ - // Load the Excel file from resources - ClassPathResource excelFile = new ClassPathResource("xlsxfile/bulkuser_excel_sheet.xlsx"); + @CrossOrigin() + @GetMapping("/download-error-sheet") + public ResponseEntity downloadErrorSheet() { + try { + byte[] fileContent = bulkRegistrationServiceimpl.insertErrorLog(); + + HttpHeaders headers = new HttpHeaders(); + headers.add("Content-Disposition", "attachment; filename=error_log.xlsx"); - // Return the Excel file as a response with proper headers - return ResponseEntity.ok() - .contentType(MediaType.parseMediaType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) - .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + excelFile.getFilename() + "\"") - .body(excelFile); - } + if(!bulkRegistrationServiceimpl.bulkRegistrationErrors.isEmpty()){ + bulkRegistrationServiceimpl.bulkRegistrationErrors.clear(); + } + return ResponseEntity.ok() + .headers(headers) + .contentType(MediaType.APPLICATION_OCTET_STREAM) + .body(fileContent); + } catch (Exception e) { + return ResponseEntity.status(500).body(null); + } + } } diff --git a/src/main/java/com/iemr/admin/data/bulkuser/BulkRegistrationError.java b/src/main/java/com/iemr/admin/data/bulkuser/BulkRegistrationError.java new file mode 100644 index 0000000..cf3a14c --- /dev/null +++ b/src/main/java/com/iemr/admin/data/bulkuser/BulkRegistrationError.java @@ -0,0 +1,12 @@ +package com.iemr.admin.data.bulkuser; + +import lombok.Data; + +import java.util.List; + +@Data +public class BulkRegistrationError { + String userName; + Integer rowNumber; + List error; +} diff --git a/src/main/java/com/iemr/admin/data/bulkuser/Employee.java b/src/main/java/com/iemr/admin/data/bulkuser/Employee.java index 74a1483..984060d 100644 --- a/src/main/java/com/iemr/admin/data/bulkuser/Employee.java +++ b/src/main/java/com/iemr/admin/data/bulkuser/Employee.java @@ -9,86 +9,94 @@ public class Employee { @JacksonXmlProperty(localName = "Title") - private String title; + private String title=""; @JacksonXmlProperty(localName = "FirstName") - private String firstName; + private String firstName=""; @JacksonXmlProperty(localName = "MiddleName") - private String middleName; + private String middleName=""; @JacksonXmlProperty(localName = "LastName") - private String lastName; + private String lastName=""; @JacksonXmlProperty(localName = "Gender") - private String gender; + private String gender=""; @JacksonXmlProperty(localName = "ContactNo") - private String contactNo; + private String contactNo=""; @JacksonXmlProperty(localName = "Designation") - private String designation; + private String designation=""; @JacksonXmlProperty(localName = "EmergencyContactNo") - private String emergencyContactNo; + private String emergencyContactNo=""; - @JacksonXmlProperty(localName = "DOB") - private String dob; + @JacksonXmlProperty(localName = "DateOfBirth") + private String dob=""; @JacksonXmlProperty(localName = "Age") - private int age; + private int age=0; @JacksonXmlProperty(localName = "Email") - private String email; + private String email=""; @JacksonXmlProperty(localName = "MaritalStatus") - private String maritalStatus; + private String maritalStatus=""; @JacksonXmlProperty(localName = "AadhaarNo") - private String aadhaarNo; + private String aadhaarNo=""; @JacksonXmlProperty(localName = "PAN") - private String pan; + private String pan=""; @JacksonXmlProperty(localName = "Qualification") - private String qualification; + private String qualification=""; @JacksonXmlProperty(localName = "FatherName") - private String fatherName; + private String fatherName=""; @JacksonXmlProperty(localName = "MotherName") - private String motherName; + private String motherName=""; @JacksonXmlProperty(localName = "Community") - private String community; + private String community=""; @JacksonXmlProperty(localName = "Religion") - private String religion; + private String religion=""; - @JacksonXmlProperty(localName = "AddressLine1") - private String addressLine1; + @JacksonXmlProperty(localName = "CurrentAddressLine1") + private String addressLine1=""; - @JacksonXmlProperty(localName = "State") - private String state; + @JacksonXmlProperty(localName = "CurrentState") + private String state=""; - @JacksonXmlProperty(localName = "District") - private String district; + @JacksonXmlProperty(localName = "CurrentDistrict") + private String district=""; - @JacksonXmlProperty(localName = "Pincode") - private String pincode; + @JacksonXmlProperty(localName = "CurrentPincode") + private String pincode=""; @JacksonXmlProperty(localName = "PermanentAddressLine1") - private String permanentAddressLine1; + private String permanentAddressLine1=""; @JacksonXmlProperty(localName = "PermanentState") - private String permanentState; + private String permanentState=""; @JacksonXmlProperty(localName = "PermanentDistrict") - private String permanentDistrict; + private String permanentDistrict=""; @JacksonXmlProperty(localName = "PermanentPincode") - private String permanentPincode; + private String permanentPincode=""; @JacksonXmlProperty(localName = "DateOfJoining") - private String dateOfJoining; + private String dateOfJoining=""; + + @JacksonXmlProperty(localName = "UserName") + private String UserName=""; + + @JacksonXmlProperty(localName = "Password") + private String Password=""; + + } diff --git a/src/main/java/com/iemr/admin/data/employeemaster/M_Religion.java b/src/main/java/com/iemr/admin/data/employeemaster/M_Religion.java index 2e733ac..dd2bfd9 100644 --- a/src/main/java/com/iemr/admin/data/employeemaster/M_Religion.java +++ b/src/main/java/com/iemr/admin/data/employeemaster/M_Religion.java @@ -36,8 +36,7 @@ @Entity @Table(name = "m_Religion") -public class M_Religion -{ +public class M_Religion { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/iemr/admin/repo/employeemaster/EmployeeMasterRepoo.java b/src/main/java/com/iemr/admin/repo/employeemaster/EmployeeMasterRepoo.java index 9865245..3c90c81 100644 --- a/src/main/java/com/iemr/admin/repo/employeemaster/EmployeeMasterRepoo.java +++ b/src/main/java/com/iemr/admin/repo/employeemaster/EmployeeMasterRepoo.java @@ -40,9 +40,16 @@ public interface EmployeeMasterRepoo extends CrudRepository @Query("SELECT u FROM M_User1 u WHERE u.userID=:userID AND deleted=false") M_User1 editEmployee(@Param("userID") Integer userID); + @Query("SELECT u FROM M_User1 u WHERE u.aadhaarNo=:aadhaar AND deleted=false ") + M_User1 findEmployeeAadhaarNo(@Param("aadhaar") String userName); + @Query("SELECT u FROM M_User1 u WHERE u.userName=:userName AND deleted=false ") M_User1 findEmployeeByName(@Param("userName") String userName); + + @Query("SELECT u FROM M_User1 u WHERE u.contactNo=:contactNo AND deleted=false ") + M_User1 findEmployeeByContact(@Param("contactNo") String userName); + @Query("SELECT u FROM M_User1 u WHERE u.userName=:userName OR u.aadhaarNo=:aadhaarNo OR u.pAN=:getpAN OR u.employeeID=:employeeID OR u.healthProfessionalID=:healthProfessionalID AND deleted=false ") M_User1 checkingEmpDetails(@Param("userName") String userName, @Param("aadhaarNo") String aadhaarNo, @Param("getpAN") String getpAN,@Param("employeeID") String employeeID, @Param("healthProfessionalID") String healthProfessionalID); diff --git a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java index c7c7e99..56f9a26 100644 --- a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java +++ b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java @@ -1,36 +1,40 @@ package com.iemr.admin.service.bulkRegistration; +import com.iemr.admin.data.bulkuser.BulkRegistrationError; import com.iemr.admin.data.bulkuser.Employee; import com.iemr.admin.data.bulkuser.EmployeeList; import com.iemr.admin.data.employeemaster.*; import com.iemr.admin.data.locationmaster.M_District; import com.iemr.admin.data.rolemaster.StateMasterForRole; +import com.iemr.admin.data.user.M_UserServiceRoleMapping; import com.iemr.admin.service.employeemaster.EmployeeMasterInter; import com.iemr.admin.service.locationmaster.LocationMasterServiceInter; import com.iemr.admin.service.rolemaster.Role_MasterInter; import com.iemr.admin.utils.JwtUtil; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; -import java.io.ByteArrayOutputStream; +import java.io.*; import java.math.BigInteger; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; import java.sql.Date; import java.text.ParseException; -import java.time.LocalDateTime; +import java.time.*; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.time.format.DateTimeParseException; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -42,6 +46,9 @@ public class BulkRegistrationServiceImpl implements BulkRegistrationService { private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); @Autowired JwtUtil jwtUtil; + public static final String FILE_PATH = "error_log.xlsx"; // Excel file path + public List bulkRegistrationErrors = new ArrayList<>(); + @Autowired private EmployeeMasterInter employeeMasterInter; @@ -50,31 +57,29 @@ public class BulkRegistrationServiceImpl implements BulkRegistrationService { @Autowired private LocationMasterServiceInter locationMasterServiceInter; - ByteArrayOutputStream out; @Autowired EmployeeXmlService employeeXmlService; - public List validationErrors = new ArrayList<>(); - public List errorLogs = new ArrayList<>(); + public ArrayList errorLogs = new ArrayList<>(); public ArrayList m_bulkUser = new ArrayList<>(); public ArrayList m_UserDemographics = new ArrayList<>(); private List m_districts; - public List getValidationError() { - return validationErrors; - - } - - @Override public void registerBulkUser(String xml, String authorization) { try { EmployeeList employeeList = employeeXmlService.parseXml(xml); - logger.info("employee_list" + employeeList.getEmployees().toString()); - totalEmployeeListSize = employeeList.getEmployees().size(); - for (int i = 0; i < employeeList.getEmployees().size(); i++) { - saveUserUser(employeeList.getEmployees().get(i), i, authorization); + if (!employeeList.getEmployees().isEmpty()) { + logger.info("employee_list" + employeeList.getEmployees().toString()); + totalEmployeeListSize = employeeList.getEmployees().size(); + for (int i = 0; i < employeeList.getEmployees().size(); i++) { + saveUserUser(employeeList.getEmployees().get(i), i, authorization); + + + } + } else { + errorLogs.add("Data is invalid or empty"); } @@ -88,127 +93,455 @@ public void registerBulkUser(String xml, String authorization) { private void saveUserUser(Employee employee, Integer row, String authorization) throws Exception { + List validationErrors = new ArrayList<>(); + BulkRegistrationError bulkRegistrationErrors_ = new BulkRegistrationError(); + M_User1 mUser = new M_User1(); + M_UserDemographics mUserDemographics = new M_UserDemographics(); + M_UserServiceRoleMapping2 m_userServiceRoleMapping = new M_UserServiceRoleMapping2(); + logger.info("employee_list after for loop" + employee.toString()); + if (!employee.getUserName().isEmpty()) { + String checkUserIsExist = employeeMasterInter.FindEmployeeName(employee.getUserName()); + String checkContactIsExist = employeeMasterInter.FindEmployeeContact(employee.getContactNo()); + logger.info("checkAAdharIsExist" + checkUserIsExist); + if (checkUserIsExist.equalsIgnoreCase("usernotexist")) { + if (checkContactIsExist.equalsIgnoreCase("contactnotexist")) { + if (employee.getTitle() == null || employee.getTitle().isEmpty()) { + validationErrors.add("Title is missing."); + } + if (!employee.getTitle().isEmpty()) { + if (getTitleId(employee.getTitle()) == 0) { + validationErrors.add("Title is invalid."); + + } + + } + + if (employee.getFirstName() == null || employee.getFirstName().isEmpty()) { + validationErrors.add("First Name is missing."); + } + if(!employee.getFirstName().isEmpty()){ + if(employee.getFirstName().length()>50){ + validationErrors.add("First name is invalid."); + + } + if(isNumeric(employee.getFirstName())){ + validationErrors.add("First name is invalid."); + + } + } + + if(!employee.getMiddleName().isEmpty()){ + if(employee.getMiddleName().length()>50){ + validationErrors.add("Middle name is invalid."); + + } + if(isNumeric(employee.getMiddleName())){ + validationErrors.add("Middle name is invalid."); + + } + } + if (employee.getLastName() == null || employee.getLastName().isEmpty()) { + validationErrors.add("Last Name is missing."); + } + if(!employee.getLastName().isEmpty()){ + if(employee.getLastName().length()>50){ + validationErrors.add("Last name is invalid."); + + } + if(isNumeric(employee.getLastName())){ + validationErrors.add("Last name is invalid."); + + } + } + if (employee.getGender().isEmpty()) { + validationErrors.add("Gender is missing"); + + } + if (employee.getContactNo().isEmpty()) { + validationErrors.add("Contact number missing"); + + } + if (!employee.getContactNo().isEmpty()) { + if (!isValidPhoneNumber(String.valueOf(employee.getContactNo()))) { + validationErrors.add("Contact Number is invalid"); + } + } + + if (employee.getDesignation().isEmpty()) { + validationErrors.add("Designation is missing"); + + } + if (employee.getEmergencyContactNo().isEmpty()) { + validationErrors.add("Emergency contact number is missing"); + + } + if (!employee.getEmergencyContactNo().isEmpty()) { + if (!isValidPhoneNumber(String.valueOf(employee.getEmergencyContactNo()))) { + validationErrors.add("Emergency Contact Number is invalid."); + } + } + + if (employee.getDob().isEmpty()) { + validationErrors.add("Date of Birth is missing."); + + } + if(!employee.getDob().isEmpty()){ + if(!isValidDate(convertStringIntoDate(employee.getDob()).toString())){ + validationErrors.add("Date of Birth is invalid."); + + } + } + + if(employee.getEmail().isEmpty()){ + validationErrors.add("Email is missing."); + + } + if(!employee.getEmail().isEmpty()){ + if (!employee.getEmail().matches(EMAIL_REGEX)) { + validationErrors.add("Invalid Email format."); + } + } + + if (employee.getPassword().isEmpty()) { + validationErrors.add("Please Enter valid password."); + + } + + if (!employee.getAadhaarNo().isEmpty()) { + if (!employeeMasterInter.FindEmployeeAadhaar(employee.getAadhaarNo()).equalsIgnoreCase("aadhaarnotexist")) { + validationErrors.add("Duplicate aadhaar number found"); - if (employee.getTitle() == null || employee.getTitle().isEmpty() || getTitleId(employee.getTitle()) == 0) { - validationErrors.add("Title is missing or invalid."); - } - if (employee.getFirstName() == null || employee.getFirstName().isEmpty()) { - validationErrors.add("First Name is missing."); - } - if (employee.getLastName() == null || employee.getLastName().isEmpty()) { - validationErrors.add("Last Name is missing."); - } - if (employee.getEmail() == null || !employee.getEmail().matches(EMAIL_REGEX)) { - validationErrors.add("Invalid Email format."); - } - if (!isValidPhoneNumber(String.valueOf(employee.getContactNo()))) { - validationErrors.add("Contact Number must be exactly 10 digits."); - } - if (!isValidPhoneNumber(String.valueOf(employee.getEmergencyContactNo()))) { - validationErrors.add("Emergency Contact Number must be exactly 10 digits."); - } - if (!String.valueOf(employee.getAge()).matches("\\d{1,2}")) { - validationErrors.add("Age should be a 1 or 2-digit number."); - } - if (employee.getDob() == null || employee.getDob().toString().isEmpty()) { - validationErrors.add("Date of Birth is invalid."); - } - if (employee.getDateOfJoining() == null || employee.getDateOfJoining().toString().isEmpty()) { - validationErrors.add("Date of Joining is invalid."); - } - if (getStateId(employee.getState()) == 0) { - validationErrors.add("State is invalid."); - } - if (getDistrictId(employee.getDistrict()) == 0) { - validationErrors.add("District is invalid."); - } + } + if(isValidAadhar(employee.getAadhaarNo())){ + validationErrors.add("Aadhaar number is invalid"); + + } + } - if (getStateId(employee.getPermanentState()) == 0) { - validationErrors.add("Permanent State is invalid."); - } - if (getDistrictId(employee.getPermanentDistrict()) == 0) { - validationErrors.add("Permanent District is invalid."); - } - if (employee.getPincode() == null || employee.getPincode().isEmpty()) { - validationErrors.add("Pincode is invalid."); - } - if (employee.getPermanentPincode() == null || employee.getPermanentPincode().isEmpty()) { - validationErrors.add("Permanent Pincode is invalid."); + if (employee.getQualification().isEmpty()) { + validationErrors.add("Qualification is missing"); - } - if (!isValidPAN(employee.getPan())) { - validationErrors.add("PAN is invalid."); + } + + if (employee.getState().isEmpty()) { + validationErrors.add("Current State is missing."); + } + if (!employee.getState().isEmpty()) { + if (getStateId(employee.getState()) == 0) { + validationErrors.add("Current State is invalid."); + + } + } + if (employee.getDistrict().isEmpty()) { + validationErrors.add("Current District is missing."); + } + if (!employee.getDistrict().isEmpty()) { + if (getDistrictId(employee.getDistrict()) == 0) { + validationErrors.add("Current District is invalid."); + + } + } + + if (employee.getPermanentState().isEmpty()) { + validationErrors.add("Permanent State is missing."); + } + if (!employee.getPermanentState().isEmpty()) { + if (getStateId(employee.getPermanentState()) == 0) { + validationErrors.add("Permanent State is invalid."); + + } + } + if (employee.getPermanentDistrict().isEmpty()) { + validationErrors.add("Permanent District is missing."); + } + + if (!employee.getPermanentDistrict().isEmpty()) { + if (getDistrictId(employee.getPermanentDistrict()) == 0) { + validationErrors.add("Permanent District is invalid."); + + } + } + + if(employee.getDateOfJoining().isEmpty()){ + validationErrors.add("Date of Joining is missing."); + + } + if(!employee.getDateOfJoining().isEmpty()){ + if(!isValidDate(convertStringIntoDate(employee.getDateOfJoining()).toString())){ + validationErrors.add("Date of Joining is invalid."); + + } + } + + + + if (!validationErrors.isEmpty()) { + errorLogs.add("Row " + (row + 1) + ": " + String.join(", ", validationErrors)); + bulkRegistrationErrors_.setRowNumber((row + 1)); + bulkRegistrationErrors_.setUserName(employee.getUserName()); + bulkRegistrationErrors_.setError(validationErrors); + bulkRegistrationErrors.add(bulkRegistrationErrors_); + + + + } + + + // showLogger(employee); + + if (!employee.getTitle().isEmpty() && !employee.getFirstName().isEmpty() && !employee.getLastName().isEmpty() && !employee.getContactNo().isEmpty() && !employee.getEmergencyContactNo().isEmpty() && !employee.getDob().isEmpty() && !employee.getUserName().isEmpty() && !employee.getPassword().isEmpty() && !employee.getState().isEmpty() && !employee.getDistrict().isEmpty() && !employee.getPermanentState().isEmpty() && !employee.getPermanentDistrict().isEmpty() && !employee.getGender().isEmpty() && !employee.getQualification().isEmpty() && isValidDate(convertStringIntoDate(employee.getDob()).toString()) && isValidDate(convertStringIntoDate(employee.getDateOfJoining()).toString())) { + try { + + mUser.setTitleID(getTitleId(employee.getTitle())); + mUser.setFirstName(employee.getFirstName()); + mUser.setLastName(employee.getLastName()); + mUser.setUserName(employee.getUserName()); + mUser.setdOB(convertStringIntoDate(employee.getDob())); + mUser.setEmployeeID(employee.getContactNo()); + mUser.setEmergencyContactNo(String.valueOf(employee.getEmergencyContactNo())); + mUser.setContactNo(String.valueOf(employee.getContactNo())); + if (!employee.getMiddleName().isEmpty()) { + mUser.setMiddleName(employee.getMiddleName()); + + } + if (!employee.getDesignation().isEmpty()) { + mUser.setDesignationID(getDesignationId(employee.getDesignation())); + + } + if (!employee.getDesignation().isEmpty()) { + mUser.setDesignationName(employee.getDesignation()); + + } + if (!isValidAadhar(employee.getAadhaarNo()) && employeeMasterInter.FindEmployeeAadhaar(employee.getAadhaarNo()).equalsIgnoreCase("aadhaarnotexist")) { + mUser.setAadhaarNo(String.valueOf(employee.getAadhaarNo())); + + } + + if (!employee.getPan().isEmpty()) { + mUser.setpAN(employee.getPan()); + + } + mUser.setMaritalStatusID(1); + mUser.setEmailID(employee.getEmail()); + mUser.setGenderID(Short.parseShort(String.valueOf(getGenderId(employee.getGender())))); + mUser.setQualificationID(4); + if (!employee.getQualification().isEmpty()) { + mUser.setQualificationID(getQualificationId(employee.getQualification())); + + } + mUser.setdOJ(convertStringIntoDate(employee.getDateOfJoining())); + //mUser.setCreatedBy(jwtUtil.extractUsername(authorization)); + mUser.setCreatedBy("Psmril2"); + //mUser.setModifiedBy(jwtUtil.extractUsername(authorization)); + mUser.setModifiedBy("Psmril2"); + mUser.setStatusID(1); + mUser.setIsSupervisor(false); + mUser.setServiceProviderID(15); + mUser.setPassword(generateStrongPassword(employee.getPassword())); + logger.info("Register_user:" + mUser); + M_User1 bulkUserID = employeeMasterInter.saveBulkUserEmployee(mUser); + logger.info("BulkUser:" + bulkUserID); + m_userServiceRoleMapping.setUserID(bulkUserID.getUserID()); + m_userServiceRoleMapping.setServiceProviderID(bulkUserID.getServiceProviderID()); + m_userServiceRoleMapping.setCreatedBy("Psmril2"); + m_userServiceRoleMapping.setRoleID(133); + m_userServiceRoleMapping.setProviderServiceMapID(1); + //m_userServiceRoleMapping.setWorkingLocationID(117); + m_userServiceRoleMapping.setIsSanjeevani(false); + m_userServiceRoleMapping.setBlockName("Biswanath"); + String[] villageName = {"Bagijuli"}; + m_userServiceRoleMapping.setVillageName(villageName); + String[] villageID = {"25460"}; + m_userServiceRoleMapping.setVillageID(villageID); + m_userServiceRoleMapping.setBlockID(920); + + mUserDemographics.setUserID(bulkUserID.getUserID()); + mUserDemographics.setCountryID(91); + if (!employee.getCommunity().isEmpty()) { + mUserDemographics.setCommunityID(getCommunityId(employee.getCommunity())); + + } + if (!employee.getReligion().isEmpty()) { + mUserDemographics.setReligionID(getReligionStringId(employee.getReligion())); + + } +// mUserDemographics.setReligionID(1); +// mUserDemographics.setCreatedBy(jwtUtil.extractUsername(authorization)); + mUserDemographics.setCreatedBy("Psmril2"); + // Permanent Address + if (!employee.getPermanentAddressLine1().isEmpty()) { + mUserDemographics.setPermAddressLine1(employee.getPermanentAddressLine1()); + + } + if (!employee.getPermanentState().isEmpty()) { + mUserDemographics.setPermStateID(getStateId(employee.getPermanentState())); + + } + if (!employee.getPermanentDistrict().isEmpty()) { + mUserDemographics.setPermDistrictID(getDistrictId(employee.getPermanentDistrict())); + + } + mUserDemographics.setIsPermanent(false); + if (!employee.getPermanentPincode().isEmpty()) { + mUserDemographics.setPermPinCode(Integer.valueOf(employee.getPermanentPincode())); + + } + if (!employee.getMotherName().isEmpty()) { + mUserDemographics.setMothersName(employee.getMotherName()); + + } + if (!employee.getFatherName().isEmpty()) { + mUserDemographics.setFathersName(employee.getFatherName()); + + } + // correspondence address + if (!employee.getAddressLine1().isEmpty()) { + mUserDemographics.setAddressLine1(employee.getAddressLine1()); + + } + if (!employee.getState().isEmpty()) { + mUserDemographics.setStateID(getStateId(employee.getState())); + + } + mUserDemographics.setIsPresent(false); + if (!employee.getDistrict().isEmpty()) { + mUserDemographics.setDistrictID(getDistrictId(employee.getDistrict())); + + } + if (!employee.getPincode().isEmpty()) { + mUserDemographics.setPinCode(employee.getPincode().toString()); + + } + employeeMasterInter.saveDemography(mUserDemographics); + m_bulkUser.add(mUser); + m_UserDemographics.add(mUserDemographics); + employeeMasterInter.saveRoleMappingeditedData(m_userServiceRoleMapping, authorization); + + } catch (Exception e) { + errorLogs.add("Row :" + (row + 1) + e.getMessage()); + bulkRegistrationErrors_.setRowNumber((row + 1)); + bulkRegistrationErrors_.setUserName(employee.getUserName()); + bulkRegistrationErrors_.setError(validationErrors); + bulkRegistrationErrors.add(bulkRegistrationErrors_); + + + } + } + + } else { + validationErrors.add("Contact No Already exist"); + if (!validationErrors.isEmpty()) { + + errorLogs.add("Row " + (row + 1) + ": " + String.join(", ", validationErrors)); + bulkRegistrationErrors_.setRowNumber((row + 1)); + bulkRegistrationErrors_.setUserName(employee.getUserName()); + bulkRegistrationErrors_.setError(validationErrors); + bulkRegistrationErrors.add(bulkRegistrationErrors_); + + + } + } + + } else { + validationErrors.add("User Already exist"); + if (!validationErrors.isEmpty()) { + + errorLogs.add("Row " + (row + 1) + ": " + String.join(", ", validationErrors)); + bulkRegistrationErrors_.setRowNumber((row + 1)); + bulkRegistrationErrors_.setUserName(employee.getUserName()); + bulkRegistrationErrors_.setError(validationErrors); + bulkRegistrationErrors.add(bulkRegistrationErrors_); + + + } + + } + } else { + validationErrors.add("Please Enter UserName"); + if (!validationErrors.isEmpty()) { + errorLogs.add("Row " + (row + 1) + ": " + String.join(", ", validationErrors)); + bulkRegistrationErrors_.setRowNumber((row + 1)); + bulkRegistrationErrors_.setUserName(employee.getUserName()); + bulkRegistrationErrors_.setError(validationErrors); + bulkRegistrationErrors.add(bulkRegistrationErrors_); - } - if (!validationErrors.isEmpty()) { - errorLogs.add("Row " + (row + 1) + ": " + String.join(", ", validationErrors)); + } } + } + /** + * Validate employee details. + */ + + + private boolean isValidDate(String dateStr) { try { + String[] parts = dateStr.split("-"); + int year = Integer.parseInt(parts[0]); - M_User1 mUser = new M_User1(); - M_UserDemographics mUserDemographics = new M_UserDemographics(); - - mUser.setTitleID(getTitleId(employee.getTitle())); - mUser.setDesignationID(getDesignationId(employee.getDesignation())); - mUser.setDesignationName("ASHA"); - mUser.setFirstName(employee.getFirstName()); - mUser.setLastName(employee.getLastName()); - mUser.setUserName(employee.getContactNo()); - mUser.setdOB(convertStringIntoDate(employee.getDob())); - mUser.setEmployeeID(employee.getContactNo()); - mUser.setEmergencyContactNo(String.valueOf(employee.getEmergencyContactNo())); - mUser.setContactNo(String.valueOf(employee.getContactNo())); - mUser.setMiddleName(employee.getMiddleName()); - mUser.setAadhaarNo(String.valueOf(employee.getAadhaarNo())); - mUser.setpAN(employee.getPan()); - mUser.setMaritalStatusID(1); - mUser.setEmailID(employee.getEmail()); - mUser.setGenderID(Short.parseShort(String.valueOf(getGenderId(employee.getGender())))); - mUser.setQualificationID(getQualificationId(employee.getQualification())); - mUser.setdOJ(convertStringIntoDate(employee.getDateOfJoining())); - mUser.setCreatedBy(jwtUtil.extractUsername(authorization)); - mUser.setModifiedBy(jwtUtil.extractUsername(authorization)); - mUser.setIsSupervisor(false); - mUser.setServiceProviderID(15); - mUser.setPassword(generateStrongPassword("Test@123")); - M_User1 bulkUserID = employeeMasterInter.saveBulkUserEmployee(mUser); - mUserDemographics.setUserID(bulkUserID.getUserID()); - mUserDemographics.setCountryID(91); - mUserDemographics.setCommunityID(getCommunityId(employee.getCommunity())); - mUserDemographics.setReligionID(getReligionStringId(employee.getReligion())); - mUserDemographics.setFathersName(employee.getFatherName()); - mUserDemographics.setCreatedBy(jwtUtil.extractUsername(authorization)); - mUserDemographics.setAddressLine1(employee.getAddressLine1()); - mUserDemographics.setPermAddressLine1(employee.getPermanentAddressLine1()); - mUserDemographics.setPermStateID(getStateId(employee.getPermanentState())); - mUserDemographics.setPermDistrictID(getDistrictId(employee.getPermanentDistrict())); - mUserDemographics.setIsPermanent(false); - mUserDemographics.setPermPinCode(Integer.valueOf(employee.getPermanentPincode())); - mUserDemographics.setMothersName(employee.getMotherName()); - mUserDemographics.setAddressLine1(employee.getPermanentAddressLine1()); - mUserDemographics.setStateID(getStateId(employee.getState())); - mUserDemographics.setIsPresent(false); - mUserDemographics.setStateID(getStateId(employee.getState())); - mUserDemographics.setDistrictID(getDistrictId(employee.getDistrict())); - mUserDemographics.setPinCode(employee.getPincode().toString()); - employeeMasterInter.saveDemography(mUserDemographics); - m_bulkUser.add(mUser); - m_UserDemographics.add(mUserDemographics); + if (year > 2025) { + return false; // Year should not be greater than 2025 + } + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate.parse(dateStr, formatter); // Validates if the full date is correct + + return true; // Valid date within range } catch (Exception e) { - errorLogs.add("Row : " + (row + 1) + e.getMessage()); + return false; // Invalid date format or parsing error } + } + private int calculateAge(String dob) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate birthDate = LocalDate.parse(dob, formatter); + // Get current date + LocalDate currentDate = LocalDate.now(); + + // Calculate age + return Period.between(birthDate, currentDate).getYears(); } + private void showLogger(Employee employee) { + logger.info("Title: " + employee.getTitle()); + logger.info("Title Id: " + getTitleId(employee.getTitle())); + logger.info("First Name: " + employee.getFirstName()); + logger.info("Last Name: " + employee.getLastName()); + logger.info("Email: " + employee.getEmail()); + logger.info("Contact No: " + employee.getContactNo()); + logger.info("Emergency Contact No: " + employee.getEmergencyContactNo()); + logger.info("Age: " + employee.getAge()); + logger.info("DOB: " + employee.getDob()); + logger.info("State: " + employee.getState()); + logger.info("State ID: " + getStateId(employee.getState())); + logger.info("District: " + employee.getDistrict()); + logger.info("District ID: " + getDistrictId(employee.getDistrict())); + logger.info("Designation: " + employee.getDesignation()); + logger.info("Designation Id: " + getDesignationId(employee.getDesignation())); + logger.info("Qualification: " + employee.getQualification()); + logger.info("Father Name: " + employee.getFatherName()); + logger.info("Mother Name: " + employee.getMotherName()); + logger.info("Address Line 1: " + employee.getAddressLine1()); + logger.info("Permanent Address: " + employee.getPermanentAddressLine1()); + logger.info("Aadhaar No: " + employee.getAadhaarNo()); + logger.info("PAN: " + employee.getPan()); + logger.info("Gender: " + employee.getGender()); + logger.info("Date of Joining: " + employee.getDateOfJoining()); + logger.info("Religion: " + employee.getReligion()); + logger.info("Community: " + employee.getCommunity()); + logger.info("Pincode: " + employee.getPincode()); + logger.info("Dob_formated: " + convertStringIntoDate(employee.getDob())); + logger.info("doj_formated: " + convertStringIntoDate(employee.getDateOfJoining())); + + } - public int getGenderId(String genderString) { + + private int getGenderId(String genderString) { int genderId = employeeMasterInter.getAllGender() .stream() .filter(gender -> gender.getGenderName().equalsIgnoreCase(genderString)) @@ -225,14 +558,36 @@ public int getGenderId(String genderString) { return genderId; } + public static boolean isNumeric(String str) { + try { + Integer.parseInt(str); + return true; + } catch (NumberFormatException e) { + return false; + } + } + - public int getTitleId(String titleString) { - int titleId = employeeMasterInter.getAllTitle() - .stream() - .filter(title -> title.getTitleName().equalsIgnoreCase(titleString)) - .map(M_Title::getTitleID) - .findFirst() - .orElse(0); + private int getTitleId(String titleString) { + int titleId = 0; + + if (!titleString.isEmpty()) { + if (titleString.equalsIgnoreCase("Major") || titleString.equalsIgnoreCase("Madame")) { + titleId = employeeMasterInter.getAllTitle() + .stream() + .filter(title -> title.getTitleName().equalsIgnoreCase(titleString)) + .map(M_Title::getTitleID) + .findFirst() + .orElse(0); + } else { + titleId = employeeMasterInter.getAllTitle() + .stream() + .filter(title -> title.getTitleName().equalsIgnoreCase(titleString + ".")) + .map(M_Title::getTitleID) + .findFirst() + .orElse(0); + } + } return titleId; @@ -260,7 +615,7 @@ public int getCommunityId(String communityString) { public int getQualificationId(String qualificationString) { int qualificationId = employeeMasterInter.getQualification() .stream() - .filter(q -> q.getUserQualificationDesc().equalsIgnoreCase(qualificationString)) + .filter(q -> q.getName().equalsIgnoreCase(qualificationString)) .map(M_Userqualification::getQualificationID) .findFirst() .orElse(0); @@ -271,21 +626,30 @@ public int getQualificationId(String qualificationString) { //Religion public int getReligionStringId(String religionString) { - return employeeMasterInter.getAllReligion() - .stream() - .filter(religion -> religion.getReligionType().equalsIgnoreCase(religionString)) - .map(M_Religion::getReligionID) - .findFirst() - .orElse(0); + if (religionString.equalsIgnoreCase("Not given")) { + return 0; + } else { + return employeeMasterInter.getAllReligion() + .stream() + .filter(religion -> religion.getReligionType().equalsIgnoreCase(religionString)) + .map(M_Religion::getReligionID) + .findFirst() + .orElse(0); + } } public int getDistrictId(String districtName) { - return m_districts.stream() - .filter(m_district -> m_district.getDistrictName().equalsIgnoreCase(districtName)) - .map(M_District::getDistrictID) - .findFirst() - .orElse(0); + if (!districtName.isEmpty()) { + return m_districts.stream() + .filter(m_district -> m_district.getDistrictName().equalsIgnoreCase(districtName)) + .map(M_District::getDistrictID) + .findFirst() + .orElse(0); + } else { + return 0; + } + } @@ -338,13 +702,16 @@ private Map getHeaderMap(Row headerRow) { } - public Date convertStringIntoDate(String dateString) throws ParseException { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - LocalDateTime dateTime = LocalDateTime.parse(dateString + " " + "00:00:00", formatter); + public static Date convertStringIntoDate(String date) { + + final long MILLISECONDS_PER_DAY = 86400000L; + final long EPOCH_OFFSET = 2209161600000L; + // Calculate milliseconds since epoch + long javaMillis = (long) (Double.parseDouble(date) * MILLISECONDS_PER_DAY - EPOCH_OFFSET); + + return new Date(javaMillis); - // Convert String to Date - return Date.valueOf(String.valueOf(dateTime)); } @@ -378,5 +745,57 @@ private String toHex(byte[] array) throws NoSuchAlgorithmException { return hex; } + public static boolean isValidAadhar(String aadharNumber) { + if (!Pattern.matches("\\d{12}", aadharNumber)) { + return true; // Must be a 12-digit number + } + return false; + + } + + + public byte[] insertErrorLog() { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Workbook workbook = new XSSFWorkbook(); + Sheet sheet = workbook.createSheet("Error Log"); + + try { + // **Create Header Row (Only Once)** + Row headerRow = sheet.createRow(0); + headerRow.createCell(0).setCellValue("UserName"); + headerRow.createCell(1).setCellValue("Remark"); + + // **Start inserting data from row 1** + int rowIndex = 1; // Start from row 1 (row 0 is header) + int rowIndex2 = 1; // Start from row 1 (row 0 is header) + logger.info("Error Size" + bulkRegistrationErrors.size()); + for (BulkRegistrationError bulkRegistrationError : bulkRegistrationErrors) { + Row row = sheet.createRow(rowIndex++); + + row.createCell(0).setCellValue(bulkRegistrationError.getUserName()); + row.createCell(1).setCellValue(bulkRegistrationError.getError().toString()); + + + } + + + // **Auto-Size Columns for Better Readability** + sheet.autoSizeColumn(0); + sheet.autoSizeColumn(1); + + // **Write to ByteArrayOutputStream** + workbook.write(baos); + workbook.close(); + + System.out.println("Error log generated successfully!"); + + } catch (IOException e) { + logger.error("IOException" + e.getMessage()); + e.printStackTrace(); + } + + return baos.toByteArray(); + } + } \ No newline at end of file diff --git a/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterInter.java b/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterInter.java index d91d8c7..3378667 100644 --- a/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterInter.java +++ b/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterInter.java @@ -110,6 +110,9 @@ ArrayList getEmployeeDetails11(Intege ArrayList getlocationByMapid2(int tempProSerStatMapID, Integer districtID); String FindEmployeeName(String userName); + String FindEmployeeContact(String contactNo); + String FindEmployeeAadhaar(String aadhaarNo); + public M_User1 FindEmployeeName1(String userName); diff --git a/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterServiceImpl.java b/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterServiceImpl.java index 28d5072..a0f1762 100644 --- a/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterServiceImpl.java +++ b/src/main/java/com/iemr/admin/service/employeemaster/EmployeeMasterServiceImpl.java @@ -638,6 +638,25 @@ public String FindEmployeeName(String userName) { } + @Override + public String FindEmployeeContact(String contactNo) { + M_User1 user = employeeMasterRepoo.findEmployeeByContact(contactNo); + if (user == null) { + return "contactnotexist"; + } else { + return "contactexist"; + } } + + @Override + public String FindEmployeeAadhaar(String aadhaarNo) { + M_User1 user = employeeMasterRepoo.findEmployeeAadhaarNo(aadhaarNo); + if (user == null) { + return "aadhaarnotexist"; + } else { + return "aadhaarexist"; + } + } + @Override public M_User1 FindEmployeeName1(String userName) { diff --git a/src/main/java/com/iemr/admin/utils/JwtUserIdValidationFilter.java b/src/main/java/com/iemr/admin/utils/JwtUserIdValidationFilter.java index 7fe71e4..b9cb53c 100644 --- a/src/main/java/com/iemr/admin/utils/JwtUserIdValidationFilter.java +++ b/src/main/java/com/iemr/admin/utils/JwtUserIdValidationFilter.java @@ -18,94 +18,101 @@ @Component public class JwtUserIdValidationFilter implements Filter { - private final JwtAuthenticationUtil jwtAuthenticationUtil; - private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); - - public JwtUserIdValidationFilter(JwtAuthenticationUtil jwtAuthenticationUtil) { - this.jwtAuthenticationUtil = jwtAuthenticationUtil; - } - - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) - throws IOException, ServletException { - HttpServletRequest request = (HttpServletRequest) servletRequest; - HttpServletResponse response = (HttpServletResponse) servletResponse; - - String path = request.getRequestURI(); - String contextPath = request.getContextPath(); - logger.info("JwtUserIdValidationFilter invoked for path: " + path); - - // Log cookies for debugging - Cookie[] cookies = request.getCookies(); - if (cookies != null) { - for (Cookie cookie : cookies) { - if ("userId".equals(cookie.getName())) { - logger.warn("userId found in cookies! Clearing it..."); - clearUserIdCookie(response); // Explicitly remove userId cookie - } - } - } else { - logger.info("No cookies found in the request"); - } - - // Log headers for debugging - String jwtTokenFromHeader = request.getHeader("Jwttoken"); - logger.info("JWT token from header: "); - - // Skip login and public endpoints - if (path.equals(contextPath + "/user/userAuthenticate") - || path.equalsIgnoreCase(contextPath + "/user/logOutUserFromConcurrentSession") - || path.startsWith(contextPath + "/public")) { - logger.info("Skipping filter for path: " + path); - filterChain.doFilter(servletRequest, servletResponse); - return; - } - - try { - // Retrieve JWT token from cookies - String jwtTokenFromCookie = getJwtTokenFromCookies(request); - logger.info("JWT token from cookie: "); - - // Determine which token (cookie or header) to validate - String jwtToken = jwtTokenFromCookie != null ? jwtTokenFromCookie : jwtTokenFromHeader; - if (jwtToken == null) { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "JWT token not found in cookies or headers"); - return; - } - - // Validate JWT token and userId - boolean isValid = jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtToken); - - if (isValid) { - // If token is valid, allow the request to proceed - filterChain.doFilter(servletRequest, servletResponse); - } else { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid JWT token"); - } - } catch (Exception e) { - logger.error("Authorization error: ", e); - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization error: "); - } - } - - private String getJwtTokenFromCookies(HttpServletRequest request) { - Cookie[] cookies = request.getCookies(); - if (cookies != null) { - for (Cookie cookie : cookies) { - if (cookie.getName().equals("Jwttoken")) { - return cookie.getValue(); - } - } - } - return null; - } - - private void clearUserIdCookie(HttpServletResponse response) { - Cookie cookie = new Cookie("userId", null); - cookie.setPath("/"); - cookie.setHttpOnly(true); - cookie.setSecure(true); - cookie.setMaxAge(0); // Invalidate the cookie - response.addCookie(cookie); - } + private final JwtAuthenticationUtil jwtAuthenticationUtil; + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public JwtUserIdValidationFilter(JwtAuthenticationUtil jwtAuthenticationUtil) { + this.jwtAuthenticationUtil = jwtAuthenticationUtil; + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) + throws IOException, ServletException { + HttpServletRequest request = (HttpServletRequest) servletRequest; + HttpServletResponse response = (HttpServletResponse) servletResponse; + + String path = request.getRequestURI(); + String contextPath = request.getContextPath(); + logger.info("JwtUserIdValidationFilter invoked for path: " + path); + + + // Log cookies for debugging + Cookie[] cookies = request.getCookies(); + if (cookies != null) { + for (Cookie cookie : cookies) { + if ("userId".equals(cookie.getName())) { + logger.warn("userId found in cookies! Clearing it..."); + clearUserIdCookie(response); // Explicitly remove userId cookie + } + } + } else { + logger.info("No cookies found in the request"); + } + + // Log headers for debugging + String jwtTokenFromHeader = request.getHeader("Jwttoken"); + logger.info("JWT token from header: "); + + // Skip login and public endpoints + if (path.equals(contextPath + "/user/userAuthenticate") + || path.equalsIgnoreCase(contextPath + "/user/logOutUserFromConcurrentSession") + || path.startsWith(contextPath + "/public") || + path.startsWith(contextPath + "/swagger") || + path.startsWith(contextPath + "/bulkRegistration") || + path.startsWith(contextPath + "/download-error-sheet") || + path.startsWith(contextPath + "/v3/api-docs") || + path.startsWith(contextPath + "/swagger-ui") || + path.startsWith(contextPath + "/swagger-resources")) { + logger.info("Skipping filter for path: " + path); + filterChain.doFilter(servletRequest, servletResponse); + return; + } + + try { + // Retrieve JWT token from cookies + String jwtTokenFromCookie = getJwtTokenFromCookies(request); + logger.info("JWT token from cookie: "); + + // Determine which token (cookie or header) to validate + String jwtToken = jwtTokenFromCookie != null ? jwtTokenFromCookie : jwtTokenFromHeader; + if (jwtToken == null) { + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "JWT token not found in cookies or headers"); + return; + } + + // Validate JWT token and userId + boolean isValid = jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtToken); + + if (isValid) { + // If token is valid, allow the request to proceed + filterChain.doFilter(servletRequest, servletResponse); + } else { + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid JWT token"); + } + } catch (Exception e) { + logger.error("Authorization error: ", e); + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization error: "); + } + } + + private String getJwtTokenFromCookies(HttpServletRequest request) { + Cookie[] cookies = request.getCookies(); + if (cookies != null) { + for (Cookie cookie : cookies) { + if (cookie.getName().equals("Jwttoken")) { + return cookie.getValue(); + } + } + } + return null; + } + + private void clearUserIdCookie(HttpServletResponse response) { + Cookie cookie = new Cookie("userId", null); + cookie.setPath("/"); + cookie.setHttpOnly(true); + cookie.setSecure(true); + cookie.setMaxAge(0); // Invalidate the cookie + response.addCookie(cookie); + } } From 128c8f91fbbf124c503146dc674ad9efe6049f7b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 19 Jun 2025 12:05:53 +0530 Subject: [PATCH 5/5] add userName and password in Bulk registration --- .../controller/bulkRegistration/BulkRegistrationController.java | 1 + .../service/bulkRegistration/BulkRegistrationServiceImpl.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java b/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java index fafa4d2..2f46481 100644 --- a/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java +++ b/src/main/java/com/iemr/admin/controller/bulkRegistration/BulkRegistrationController.java @@ -16,6 +16,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java index 56f9a26..007559d 100644 --- a/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java +++ b/src/main/java/com/iemr/admin/service/bulkRegistration/BulkRegistrationServiceImpl.java @@ -86,6 +86,8 @@ public void registerBulkUser(String xml, String authorization) { } catch (Exception e) { logger.error("Exception:" + e.getMessage()); + errorLogs.add("Data is invalid or empty"); + }