From 7f969c601d570806218af57ce2868d73b79b1f8a Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 11:29:34 +0530 Subject: [PATCH 01/24] fix: remove condition for i_beneficiarydetails --- .../GetDataFromVanAndSyncToDBImpl.java | 70 ++++++------------- 1 file changed, 22 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index cd33c2b5..fe34bd9b 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -103,7 +103,7 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E } String syncTableName = syncUploadDataDigester.getTableName(); - +logger.info("Syncing data for table: {}", syncTableName); // Handle specific tables first, if their logic is distinct if ("m_beneficiaryregidmapping".equalsIgnoreCase(syncTableName)) { String result = update_M_BeneficiaryRegIdMapping_for_provisioned_benID(syncUploadDataDigester); @@ -113,15 +113,17 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E logger.error("Sync failed for m_beneficiaryregidmapping: {}", result); return "Sync failed for m_beneficiaryregidmapping."; } - } else if ("i_beneficiarydetails".equalsIgnoreCase(syncTableName)) { - String result = update_I_BeneficiaryDetails_for_processed_in_batches(syncUploadDataDigester); - if ("data sync passed".equals(result)) { - return "Sync successful for i_beneficiarydetails."; - } else { - logger.error("Sync failed for i_beneficiarydetails: {}", result); - return "Sync failed for i_beneficiarydetails."; - } - } else { + } + // else if ("i_beneficiarydetails".equalsIgnoreCase(syncTableName)) { + // String result = update_I_BeneficiaryDetails_for_processed_in_batches(syncUploadDataDigester); + // if ("data sync passed".equals(result)) { + // return "Sync successful for i_beneficiarydetails."; + // } else { + // logger.error("Sync failed for i_beneficiarydetails: {}", result); + // return "Sync failed for i_beneficiarydetails."; + // } + // } + else { // Determine the group for the current table or iterate through all if no // specific table is given boolean syncSuccess = true; @@ -149,8 +151,7 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E syncSuccess = performGenericTableSync(syncUploadDataDigester); } } else { - // If no specific table is in the request (e.g., a general sync trigger), - // iterate through groups + logger.info("No specific table provided. Attempting to sync all tables group by group."); for (Map.Entry> entry : TABLE_GROUPS.entrySet()) { Integer groupId = entry.getKey(); @@ -158,17 +159,7 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E logger.info("Starting sync for Group {}", groupId); for (String table : tablesInGroup) { try { - // Create a new digester for each table within the group, - // or adapt if the original digester contains data for multiple tables. - // For simplicity, assuming syncDataDigester needs to be tailored per table or - // group. - // If your requestOBJ contains data for only one table at a time, this loop - // might need adjustment - // to fetch data for each table in the group. - // For now, it will use the syncData from the original requestOBJ, which implies - // the original requestOBJ should represent data for a single table. - // A more robust solution would involve fetching data for each table - // dynamically. + boolean currentTableSyncResult = syncTablesInGroup(syncUploadDataDigester.getSchemaName(), table, syncUploadDataDigester); if (!currentTableSyncResult) { @@ -176,10 +167,8 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E errorMessage += "Failed to sync table: " + table + " in Group " + groupId + ". "; logger.error("Sync failed for table '{}' in Group {}. Error: {}", table, groupId, errorMessage); - // Optionally, you can choose to break here or continue to sync other tables in - // the group/next group - // For now, let's continue to attempt other tables within the group. - } else { + + } else { logger.info("Successfully synced table: {} in Group {}", table, groupId); } } catch (Exception e) { @@ -202,34 +191,18 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E } } - /** - * Helper method to sync tables belonging to a specific group. - * This method assumes that the `syncUploadDataDigester` will be populated - * with relevant data for the `currentTableName` before calling this. - * In a real-world scenario, you might fetch data for each table here. - */ + private boolean syncTablesInGroup(String schemaName, String currentTableName, SyncUploadDataDigester originalDigester) { - logger.info("Attempting generic sync for table: {}", currentTableName); - // This is a simplification. In a production system, you would likely need - // to retrieve the actual data for 'currentTableName' from the local DB - // based on the group sync approach. For this example, we'll assume the - // originalDigester's syncData is relevant or needs to be re-populated. - - // Create a new digester instance or modify the existing one for the current - // table + logger.info("Table name from sync tables in group: {}", currentTableName); + logger.info("Van inc =",originalDigester.getVanAutoIncColumnName()); SyncUploadDataDigester tableSpecificDigester = new SyncUploadDataDigester(); tableSpecificDigester.setSchemaName(schemaName); tableSpecificDigester.setTableName(currentTableName); tableSpecificDigester.setSyncedBy(originalDigester.getSyncedBy()); tableSpecificDigester.setFacilityID(originalDigester.getFacilityID()); tableSpecificDigester.setVanAutoIncColumnName(originalDigester.getVanAutoIncColumnName()); - tableSpecificDigester.setServerColumns(originalDigester.getServerColumns()); // Assuming serverColumns is - // generic or set per table - - // !!! IMPORTANT: You'll need to fetch the data for 'currentTableName' from your local DB here. - // The `originalDigester.getSyncData()` might not be correct for all tables in a group. - // For demonstration, I'm just using the original digester's data, which is likely incorrect + tableSpecificDigester.setServerColumns(originalDigester.getServerColumns()); tableSpecificDigester.setSyncData(originalDigester.getSyncData()); return performGenericTableSync(tableSpecificDigester); } @@ -364,7 +337,8 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig String vanAutoIncColumnName = syncUploadDataDigester.getVanAutoIncColumnName(); String schemaName = syncUploadDataDigester.getSchemaName(); Integer facilityIDFromDigester = syncUploadDataDigester.getFacilityID(); - +logger.info("Syncing data for table: {}", syncTableName); + logger.info("Van Auto Increment Column Name: {}", vanAutoIncColumnName); for (Map map : dataToBesync) { String vanSerialNo = String.valueOf(map.get(vanAutoIncColumnName)); String vanID = String.valueOf(map.get("VanID")); From 23659f8abf3482008396fa92cd5158f3812a627a Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 11:34:36 +0530 Subject: [PATCH 02/24] fix: add logs --- .../service/dataSyncLayerCentral/DataSyncRepositoryCentral.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java index a5d8422d..02945587 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java @@ -101,6 +101,8 @@ private boolean isValidColumnNamesList(String columnNames) { public int checkRecordIsAlreadyPresentOrNot(String schemaName, String tableName, String vanSerialNo, String vanID, String vanAutoIncColumnName, int syncFacilityID) { + logger.info("From checks records exists="+tableName+"::"+vanSerialNo+"::"+vanID+"::"+syncFacilityID); + jdbcTemplate = getJdbcTemplate(); List params = new ArrayList<>(); From cb4c105c472b968416888529e82d083d927e02e9 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 11:51:39 +0530 Subject: [PATCH 03/24] fix: add logs --- .../dataSyncLayerCentral/DataSyncRepositoryCentral.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java index 02945587..ef05b1e5 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java @@ -101,7 +101,11 @@ private boolean isValidColumnNamesList(String columnNames) { public int checkRecordIsAlreadyPresentOrNot(String schemaName, String tableName, String vanSerialNo, String vanID, String vanAutoIncColumnName, int syncFacilityID) { - logger.info("From checks records exists="+tableName+"::"+vanSerialNo+"::"+vanID+"::"+syncFacilityID); + logger.info("From checks records exists="+tableName); + logger.info("Van Auto Increment Column Name: {}", vanAutoIncColumnName); + logger.info("Van Serial No: {}", vanSerialNo); + logger.info("Van ID: {}", vanID); + jdbcTemplate = getJdbcTemplate(); List params = new ArrayList<>(); From 65ffe6e8a243df03f1ae53bf2b5ca136ced582ba Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 12:02:00 +0530 Subject: [PATCH 04/24] fix: remove db_iemr --- .../com/iemr/mmu/repo/location/DistrictBlockMasterRepo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/mmu/repo/location/DistrictBlockMasterRepo.java b/src/main/java/com/iemr/mmu/repo/location/DistrictBlockMasterRepo.java index db6a9d40..97452c65 100644 --- a/src/main/java/com/iemr/mmu/repo/location/DistrictBlockMasterRepo.java +++ b/src/main/java/com/iemr/mmu/repo/location/DistrictBlockMasterRepo.java @@ -36,7 +36,7 @@ public interface DistrictBlockMasterRepo extends CrudRepository getDistrictBlockMaster(@Param("districtID") Integer districtID); - @Query(value = " SELECT distinct StateID, StateName,WorkingDistrictID,WorkingDistrictName,blockid,blockname,villageid,villagename FROM db_iemr.v_userservicerolemapping WHERE UserID = :userId and UserServciceRoleDeleted is false",nativeQuery = true) + @Query(value = " SELECT distinct StateID, StateName,WorkingDistrictID,WorkingDistrictName,blockid,blockname,villageid,villagename FROM v_userservicerolemapping WHERE UserID = :userId and UserServciceRoleDeleted is false",nativeQuery = true) public List getUserservicerolemapping(@Param("userId") Integer userId); } From 938024241a8036e255bd5f3a45ddb749600d69b7 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 12:14:54 +0530 Subject: [PATCH 05/24] fix: add log for show column names too --- .../dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index fe34bd9b..89be00f9 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -338,6 +338,7 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig String schemaName = syncUploadDataDigester.getSchemaName(); Integer facilityIDFromDigester = syncUploadDataDigester.getFacilityID(); logger.info("Syncing data for table: {}", syncTableName); +logger.info("column name="+syncUploadDataDigester.getServerColumns()); logger.info("Van Auto Increment Column Name: {}", vanAutoIncColumnName); for (Map map : dataToBesync) { String vanSerialNo = String.valueOf(map.get(vanAutoIncColumnName)); From 1f28389819014de644cf0f4c63d63e18701ada9a Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 12:51:21 +0530 Subject: [PATCH 06/24] fix: add date-format condition --- .../GetDataFromVanAndSyncToDBImpl.java | 86 ++++++++++++++----- 1 file changed, 66 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index 89be00f9..dd76dbdd 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -505,31 +505,77 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig return insertSuccess && updateSuccess; } - private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { - String[] columnsArr = null; - if (serverColumns != null) - columnsArr = serverColumns.split(","); +private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { + logger.info("From insert query-> server columns: {}", serverColumns); + String[] columnsArr = null; + if (serverColumns != null) + columnsArr = serverColumns.split(","); + StringBuilder preparedStatementSetter = new StringBuilder(); + StringBuilder cleanedColumns = new StringBuilder(); + + if (columnsArr != null && columnsArr.length > 0) { + for (int i = 0; i < columnsArr.length; i++) { + String col = columnsArr[i].trim(); + + // If column starts with date_format(...), extract the real column name + if (col.toLowerCase().startsWith("date_format(")) { + int openParenIndex = col.indexOf("("); + int commaIndex = col.indexOf(",", openParenIndex); + if (commaIndex > 0) { + col = col.substring(openParenIndex + 1, commaIndex).trim(); // keep only column name + } + } - StringBuilder preparedStatementSetter = new StringBuilder(); + cleanedColumns.append(col); + preparedStatementSetter.append("?"); - if (columnsArr != null && columnsArr.length > 0) { - for (int i = 0; i < columnsArr.length; i++) { - preparedStatementSetter.append("?"); - if (i < columnsArr.length - 1) { - preparedStatementSetter.append(", "); - } + if (i < columnsArr.length - 1) { + cleanedColumns.append(", "); + preparedStatementSetter.append(", "); } } - - StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); - queryBuilder.append(schemaName).append(".").append(tableName); - queryBuilder.append("("); - queryBuilder.append(serverColumns); - queryBuilder.append(") VALUES ("); - queryBuilder.append(preparedStatementSetter); - queryBuilder.append(")"); - return queryBuilder.toString(); } + logger.info("Cleaned columns: {}", cleanedColumns.toString()); + logger.info("Prepared statement setter: {}", preparedStatementSetter.toString()); + StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); + queryBuilder.append(schemaName).append(".").append(tableName); + queryBuilder.append("("); + queryBuilder.append(cleanedColumns); + queryBuilder.append(") VALUES ("); + queryBuilder.append(preparedStatementSetter); + queryBuilder.append(")"); + + return queryBuilder.toString(); +} + + + // private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { + // String[] columnsArr = null; + // if (serverColumns != null) + // columnsArr = serverColumns.split(","); + + // StringBuilder preparedStatementSetter = new StringBuilder(); + + // if (columnsArr != null && columnsArr.length > 0) { + // for (int i = 0; i < columnsArr.length; i++) { + // preparedStatementSetter.append("?"); + // if (i < columnsArr.length - 1) { + // preparedStatementSetter.append(", "); + // } + // } + // } + + + + // StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); + // queryBuilder.append(schemaName).append(".").append(tableName); + // queryBuilder.append("("); + // queryBuilder.append(serverColumns); + // queryBuilder.append(") VALUES ("); + // queryBuilder.append(preparedStatementSetter); + // queryBuilder.append(")"); + // return queryBuilder.toString(); + // } public String getQueryToUpdateDataToServerDB(String schemaName, String serverColumns, String tableName) { String[] columnsArr = null; From 446f3f89d4fede331b07f39e34ed0b905f16a6b8 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 12:54:29 +0530 Subject: [PATCH 07/24] fix: change valid column name --- .../DataSyncRepositoryCentral.java | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java index ef05b1e5..ca92cf80 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java @@ -87,17 +87,40 @@ private boolean isValidTableName(String tableName) { return VALID_TABLES.contains(tableName.toLowerCase()); } - private boolean isValidColumnNamesList(String columnNames) { - if (columnNames == null || columnNames.trim().isEmpty()) { - return false; - } - for (String col : columnNames.split(",")) { - if (!isValidDatabaseIdentifierCharacter(col.trim())) { - return false; + // private boolean isValidColumnNamesList(String columnNames) { + // if (columnNames == null || columnNames.trim().isEmpty()) { + // return false; + // } + // for (String col : columnNames.split(",")) { + // if (!isValidDatabaseIdentifierCharacter(col.trim())) { + // return false; + // } + // } + // return true; + // } + +private boolean isValidColumnNamesList(String columnNames) { + if (columnNames == null || columnNames.trim().isEmpty()) { + return false; + } + for (String col : columnNames.split(",")) { + String trimmed = col.trim(); + + // Handle date_format(...) style + if (trimmed.toLowerCase().startsWith("date_format(")) { + int openParenIndex = trimmed.indexOf("("); + int commaIndex = trimmed.indexOf(",", openParenIndex); + if (commaIndex > 0) { + trimmed = trimmed.substring(openParenIndex + 1, commaIndex).trim(); // get only column name } } - return true; + + if (!isValidDatabaseIdentifierCharacter(trimmed)) { + return false; + } } + return true; +} public int checkRecordIsAlreadyPresentOrNot(String schemaName, String tableName, String vanSerialNo, String vanID, String vanAutoIncColumnName, int syncFacilityID) { From af7e586c7729dcb6f07598f23174fac8007aa351 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 12:54:39 +0530 Subject: [PATCH 08/24] fix: change valid column name --- .../service/dataSyncLayerCentral/DataSyncRepositoryCentral.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java index ca92cf80..9a5a66a9 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java @@ -103,6 +103,7 @@ private boolean isValidColumnNamesList(String columnNames) { if (columnNames == null || columnNames.trim().isEmpty()) { return false; } + logger.info("Validating column names: {}", columnNames); for (String col : columnNames.split(",")) { String trimmed = col.trim(); From 7b46f269d934e84d3a41c0c63beafd62d755a660 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 13:23:32 +0530 Subject: [PATCH 09/24] fix: change valid column name --- .../DataSyncRepositoryCentral.java | 3 +- .../GetDataFromVanAndSyncToDBImpl.java | 33 ++++++------------- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java index 9a5a66a9..00e0d305 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java @@ -112,7 +112,7 @@ private boolean isValidColumnNamesList(String columnNames) { int openParenIndex = trimmed.indexOf("("); int commaIndex = trimmed.indexOf(",", openParenIndex); if (commaIndex > 0) { - trimmed = trimmed.substring(openParenIndex + 1, commaIndex).trim(); // get only column name + trimmed = trimmed.substring(openParenIndex + 1, commaIndex).trim(); } } @@ -123,6 +123,7 @@ private boolean isValidColumnNamesList(String columnNames) { return true; } + public int checkRecordIsAlreadyPresentOrNot(String schemaName, String tableName, String vanSerialNo, String vanID, String vanAutoIncColumnName, int syncFacilityID) { logger.info("From checks records exists="+tableName); diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index dd76dbdd..7dac9539 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -504,51 +504,38 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig } return insertSuccess && updateSuccess; } - private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { - logger.info("From insert query-> server columns: {}", serverColumns); + logger.info("Server Columns: {}", serverColumns); String[] columnsArr = null; if (serverColumns != null) columnsArr = serverColumns.split(","); + StringBuilder preparedStatementSetter = new StringBuilder(); - StringBuilder cleanedColumns = new StringBuilder(); - + if (columnsArr != null && columnsArr.length > 0) { for (int i = 0; i < columnsArr.length; i++) { - String col = columnsArr[i].trim(); - - // If column starts with date_format(...), extract the real column name - if (col.toLowerCase().startsWith("date_format(")) { - int openParenIndex = col.indexOf("("); - int commaIndex = col.indexOf(",", openParenIndex); - if (commaIndex > 0) { - col = col.substring(openParenIndex + 1, commaIndex).trim(); // keep only column name - } - } - - cleanedColumns.append(col); preparedStatementSetter.append("?"); - if (i < columnsArr.length - 1) { - cleanedColumns.append(", "); preparedStatementSetter.append(", "); } } } - logger.info("Cleaned columns: {}", cleanedColumns.toString()); - logger.info("Prepared statement setter: {}", preparedStatementSetter.toString()); StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); queryBuilder.append(schemaName).append(".").append(tableName); queryBuilder.append("("); - queryBuilder.append(cleanedColumns); + queryBuilder.append( + serverColumns.replaceAll( + "(?i)date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", + "$1" + ) + ); queryBuilder.append(") VALUES ("); queryBuilder.append(preparedStatementSetter); queryBuilder.append(")"); - + logger.info("Query to Insert Data: {}", queryBuilder.toString()); return queryBuilder.toString(); } - // private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { // String[] columnsArr = null; // if (serverColumns != null) From 33363f4ff25b7aadb87d8935866411abc6924292 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 13:40:24 +0530 Subject: [PATCH 10/24] fix: change valid column name --- .../GetDataFromVanAndSyncToDBImpl.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index 7dac9539..27e93a65 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -505,10 +505,9 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig return insertSuccess && updateSuccess; } private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { - logger.info("Server Columns: {}", serverColumns); String[] columnsArr = null; if (serverColumns != null) - columnsArr = serverColumns.split(","); + columnsArr = serverColumns.split(",(?![^()]*\\))"); // <-- fixed split StringBuilder preparedStatementSetter = new StringBuilder(); @@ -520,19 +519,15 @@ private String getQueryToInsertDataToServerDB(String schemaName, String tableNam } } } + StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); queryBuilder.append(schemaName).append(".").append(tableName); queryBuilder.append("("); - queryBuilder.append( - serverColumns.replaceAll( - "(?i)date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", - "$1" - ) - ); + queryBuilder.append(serverColumns); queryBuilder.append(") VALUES ("); queryBuilder.append(preparedStatementSetter); queryBuilder.append(")"); - logger.info("Query to Insert Data: {}", queryBuilder.toString()); + logger.info("Generated insert query: {}", queryBuilder.toString()); return queryBuilder.toString(); } From 8199671319db53d9db999d7cf54ad5fa703ffd11 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 13:57:41 +0530 Subject: [PATCH 11/24] fix: update insert query --- .../GetDataFromVanAndSyncToDBImpl.java | 73 ++++++++++++++++--- 1 file changed, 63 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index 27e93a65..4f1e3c78 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -505,32 +505,85 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig return insertSuccess && updateSuccess; } private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { + + // Split original columns first for debugging + String[] columnsArr = null; + if (serverColumns != null) - columnsArr = serverColumns.split(",(?![^()]*\\))"); // <-- fixed split - + + columnsArr = serverColumns.split(","); + + // Clean the server columns first + + String cleanedColumns = serverColumns.replaceAll( + + "(?i)date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", + + "$1" + + ); + + // Split the CLEANED columns to get the correct count + + String[] cleanedColumnsArr = cleanedColumns.split(","); + + // Add debugging logs + + logger.info("Original serverColumns: {}", serverColumns); + + logger.info("Original columns count: {}", (columnsArr != null ? columnsArr.length : 0)); + + logger.info("Cleaned columns: {}", cleanedColumns); + + logger.info("Cleaned columns count: {}", cleanedColumnsArr.length); + StringBuilder preparedStatementSetter = new StringBuilder(); - - if (columnsArr != null && columnsArr.length > 0) { - for (int i = 0; i < columnsArr.length; i++) { + + // Use the cleaned columns array for placeholder generation + + if (cleanedColumnsArr != null && cleanedColumnsArr.length > 0) { + + for (int i = 0; i < cleanedColumnsArr.length; i++) { + preparedStatementSetter.append("?"); - if (i < columnsArr.length - 1) { + + if (i < cleanedColumnsArr.length - 1) { + preparedStatementSetter.append(", "); + } + } + } - + StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); + queryBuilder.append(schemaName).append(".").append(tableName); + queryBuilder.append("("); - queryBuilder.append(serverColumns); + + queryBuilder.append(cleanedColumns); // Use cleaned columns + queryBuilder.append(") VALUES ("); + queryBuilder.append(preparedStatementSetter); + queryBuilder.append(")"); - logger.info("Generated insert query: {}", queryBuilder.toString()); + + // Optional: Add logging for debugging + + logger.info("Cleaned columns count: {}", cleanedColumnsArr.length); + + logger.info("Placeholders count: {}", cleanedColumnsArr.length); + + logger.info("Final query: {}", queryBuilder.toString()); + return queryBuilder.toString(); -} +} + // private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { // String[] columnsArr = null; // if (serverColumns != null) From 560dafb9c773299844ab959a27d5bb902131ca0f Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 14:37:10 +0530 Subject: [PATCH 12/24] fix: update cleaned column list --- .../GetDataFromVanAndSyncToDBImpl.java | 88 ++++--------------- 1 file changed, 18 insertions(+), 70 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index 4f1e3c78..7c6ee2fb 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -333,6 +333,7 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig return true; // Nothing to sync, consider it a success } + String syncTableName = syncUploadDataDigester.getTableName(); String vanAutoIncColumnName = syncUploadDataDigester.getVanAutoIncColumnName(); String schemaName = syncUploadDataDigester.getSchemaName(); @@ -423,10 +424,12 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig // Prepare Object array for insert/update Object[] objArr; - List serverColumnsList = Arrays.asList(syncUploadDataDigester.getServerColumns().split(",")); + // List serverColumnsList = Arrays.asList(syncUploadDataDigester.getServerColumns().split(",")); + List cleanedColumnsList = Arrays.asList(cleanColumnNames(syncUploadDataDigester.getServerColumns()).split(",")); + List currentRecordValues = new ArrayList<>(); - for (String column : serverColumnsList) { + for (String column : cleanedColumnsList) { Object value = map.get(column.trim()); // Handle boolean conversion if necessary, though String.valueOf should // generally work for prepared statements @@ -441,6 +444,7 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig objArr = currentRecordValues.toArray(); + if (recordCheck == 0) { syncDataListInsert.add(objArr); } else { @@ -505,85 +509,25 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig return insertSuccess && updateSuccess; } private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { - - // Split original columns first for debugging - - String[] columnsArr = null; - - if (serverColumns != null) - - columnsArr = serverColumns.split(","); - - // Clean the server columns first - - String cleanedColumns = serverColumns.replaceAll( - - "(?i)date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", - - "$1" - - ); - - // Split the CLEANED columns to get the correct count - + String cleanedColumns = cleanColumnNames(serverColumns); String[] cleanedColumnsArr = cleanedColumns.split(","); - // Add debugging logs - - logger.info("Original serverColumns: {}", serverColumns); - - logger.info("Original columns count: {}", (columnsArr != null ? columnsArr.length : 0)); - - logger.info("Cleaned columns: {}", cleanedColumns); - - logger.info("Cleaned columns count: {}", cleanedColumnsArr.length); - StringBuilder preparedStatementSetter = new StringBuilder(); - - // Use the cleaned columns array for placeholder generation - - if (cleanedColumnsArr != null && cleanedColumnsArr.length > 0) { - - for (int i = 0; i < cleanedColumnsArr.length; i++) { - - preparedStatementSetter.append("?"); - - if (i < cleanedColumnsArr.length - 1) { - - preparedStatementSetter.append(", "); - - } - + for (int i = 0; i < cleanedColumnsArr.length; i++) { + preparedStatementSetter.append("?"); + if (i < cleanedColumnsArr.length - 1) { + preparedStatementSetter.append(", "); } - } StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); - queryBuilder.append(schemaName).append(".").append(tableName); - - queryBuilder.append("("); - - queryBuilder.append(cleanedColumns); // Use cleaned columns - - queryBuilder.append(") VALUES ("); - - queryBuilder.append(preparedStatementSetter); - - queryBuilder.append(")"); - - // Optional: Add logging for debugging - - logger.info("Cleaned columns count: {}", cleanedColumnsArr.length); - - logger.info("Placeholders count: {}", cleanedColumnsArr.length); - - logger.info("Final query: {}", queryBuilder.toString()); - + queryBuilder.append("(").append(cleanedColumns).append(") VALUES (").append(preparedStatementSetter).append(")"); return queryBuilder.toString(); - } + + // private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { // String[] columnsArr = null; // if (serverColumns != null) @@ -675,4 +619,8 @@ private String getFailedRecords(int[] results, List data) { logger.info("Failed records info: {}", failedRecordsInfo); return String.join("; ", failedRecordsInfo); } +private String cleanColumnNames(String serverColumns) { + // Remove all date_format(...) expressions and keep only the column name + return serverColumns.replaceAll("date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", "$1"); +} } \ No newline at end of file From 1c01c6cb7d610aabbbf62398713953ac73a12bb9 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 14:51:50 +0530 Subject: [PATCH 13/24] fix: date conversion --- .../GetDataFromVanAndSyncToDBImpl.java | 59 +++++++++++++++---- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index 7c6ee2fb..ab646e0c 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -429,18 +429,34 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig List currentRecordValues = new ArrayList<>(); - for (String column : cleanedColumnsList) { - Object value = map.get(column.trim()); - // Handle boolean conversion if necessary, though String.valueOf should - // generally work for prepared statements - if (value instanceof Boolean) { - currentRecordValues.add(value); - } else if (value != null) { - currentRecordValues.add(String.valueOf(value)); - } else { - currentRecordValues.add(null); - } - } +for (String column : cleanedColumnsList) { + Object value = map.get(column.trim()); + if (value instanceof Boolean) { + currentRecordValues.add(value); + } else if (value != null) { + // Handle date conversion for known date columns + if (isDateColumn(column.trim()) && value instanceof String) { + String formatted = formatDateForMySQL((String) value); + currentRecordValues.add(formatted); + } else { + currentRecordValues.add(String.valueOf(value)); + } + } else { + currentRecordValues.add(null); + } +} + // for (String column : cleanedColumnsList) { + // Object value = map.get(column.trim()); + // // Handle boolean conversion if necessary, though String.valueOf should + // // generally work for prepared statements + // if (value instanceof Boolean) { + // currentRecordValues.add(value); + // } else if (value != null) { + // currentRecordValues.add(String.valueOf(value)); + // } else { + // currentRecordValues.add(null); + // } + // } objArr = currentRecordValues.toArray(); @@ -623,4 +639,23 @@ private String cleanColumnNames(String serverColumns) { // Remove all date_format(...) expressions and keep only the column name return serverColumns.replaceAll("date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", "$1"); } + +private boolean isDateColumn(String columnName) { + // List all your date/datetime columns here + return Arrays.asList("MarriageDate", "DOB", "CreatedDate", "LastModDate", "SyncedDate", "ReservedOn").contains(columnName); +} + +private String formatDateForMySQL(String dateStr) { + // Convert ISO string to MySQL DATETIME format + if (dateStr == null || dateStr.isEmpty()) return null; + try { + // Try parsing as LocalDateTime + LocalDateTime ldt = LocalDateTime.parse(dateStr); + return ldt.toString().replace('T', ' '); // "2025-08-12 14:30:00" + } catch (Exception e) { + // If parsing fails, return as is (or handle as needed) + return dateStr; + } +} + } \ No newline at end of file From 4c7da578ebd0c3b7f28e47258522818d1f62c304 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 15:17:35 +0530 Subject: [PATCH 14/24] fix: conversion date-time --- .../GetDataFromVanAndSyncToDBImpl.java | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index ab646e0c..1c6604d6 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -646,16 +646,33 @@ private boolean isDateColumn(String columnName) { } private String formatDateForMySQL(String dateStr) { - // Convert ISO string to MySQL DATETIME format + logger.info("Format date value="+dateStr); if (dateStr == null || dateStr.isEmpty()) return null; + // Try ISO_LOCAL_DATE_TIME first try { - // Try parsing as LocalDateTime LocalDateTime ldt = LocalDateTime.parse(dateStr); - return ldt.toString().replace('T', ' '); // "2025-08-12 14:30:00" - } catch (Exception e) { - // If parsing fails, return as is (or handle as needed) + return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } catch (Exception ignore) {} + // Try MySQL DATETIME format (already correct) + if (dateStr.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}")) { return dateStr; } + // Try parsing with other common formats + try { + java.time.format.DateTimeFormatter[] formatters = new java.time.format.DateTimeFormatter[] { + java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"), + java.time.format.DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"), + java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd") + }; + for (java.time.format.DateTimeFormatter fmt : formatters) { + try { + LocalDateTime ldt = LocalDateTime.parse(dateStr, fmt); + logger.info("Parsed date value="+ldt); + return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } catch (Exception ignore2) {} + } + } catch (Exception ignore3) {} + // If all parsing fails, return null to avoid inserting invalid data + return null; } - } \ No newline at end of file From d1e8067d8bd58fe45b026883abe3e40d433f4b72 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 16:46:12 +0530 Subject: [PATCH 15/24] fix: add date conversion --- .../dataSyncActivity/DataSyncRepository.java | 3 +++ .../UploadDataToServerImpl.java | 7 +++++-- .../GetDataFromVanAndSyncToDBImpl.java | 17 +++++++++++++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java index 9b020a4e..dccc7ab8 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java @@ -98,6 +98,9 @@ public int updateProcessedFlagInVan(String schemaName, String tableName, StringB jdbcTemplate = getJdbcTemplate(); String query = ""; + logger.info("Updating processed flag in table: " + tableName + " for vanSerialNos: " + vanSerialNos); + logger.info("autoIncreamentColumn: " + autoIncreamentColumn); + if (tableName != null && tableName.toLowerCase().equals("i_ben_flow_outreach")) { query = "UPDATE " + schemaName + "." + tableName + " SET created_date = ? , processed = 'P', SyncedDate = ?, Syncedby = ? " diff --git a/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java index 2c24dc2c..e86cdfa5 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java @@ -348,8 +348,9 @@ public String syncDataToServer(int vanID, String schemaName, String tableName, S if (response != null && response.hasBody()) { JSONObject obj = new JSONObject(response.getBody()); if (obj != null && obj.has("statusCode") && obj.getInt("statusCode") == 200) { + logger.info("Check datasync"); StringBuilder vanSerialNos = getVanSerialNoListForSyncedData(vanAutoIncColumnName, dataToBesync); - + logger.info("Van serial no from response="+vanSerialNos); i = dataSyncRepository.updateProcessedFlagInVan(schemaName, tableName, vanSerialNos, vanAutoIncColumnName, user); } @@ -371,7 +372,8 @@ public StringBuilder getVanSerialNoListForSyncedData(String vanAutoIncColumnName List> dataToBesync) throws Exception { // comma separated van serial no StringBuilder vanSerialNos = new StringBuilder(); - +logger.info("Data to be synced: {}", dataToBesync); +logger.info("vanAutoIncColumnName: {}", vanAutoIncColumnName); int pointer1 = 0; for (Map map : dataToBesync) { if (pointer1 == dataToBesync.size() - 1) @@ -381,6 +383,7 @@ public StringBuilder getVanSerialNoListForSyncedData(String vanAutoIncColumnName pointer1++; } + logger.info("Van Serial Nos: {}", vanSerialNos); return vanSerialNos; } diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index 1c6604d6..becb23e0 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -196,6 +196,8 @@ private boolean syncTablesInGroup(String schemaName, String currentTableName, SyncUploadDataDigester originalDigester) { logger.info("Table name from sync tables in group: {}", currentTableName); logger.info("Van inc =",originalDigester.getVanAutoIncColumnName()); + logger.info("Table data="+ originalDigester.getSyncData()); + SyncUploadDataDigester tableSpecificDigester = new SyncUploadDataDigester(); tableSpecificDigester.setSchemaName(schemaName); tableSpecificDigester.setTableName(currentTableName); @@ -459,7 +461,7 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig // } objArr = currentRecordValues.toArray(); - +logger.info("Object array for sync: {}", Arrays.toString(objArr)); if (recordCheck == 0) { syncDataListInsert.add(objArr); @@ -646,9 +648,16 @@ private boolean isDateColumn(String columnName) { } private String formatDateForMySQL(String dateStr) { - logger.info("Format date value="+dateStr); + logger.info("Format date value=" + dateStr); if (dateStr == null || dateStr.isEmpty()) return null; - // Try ISO_LOCAL_DATE_TIME first + // Try parsing with nanoseconds + try { + // Handles "2025-08-12T15:29:15.041257900" + java.time.format.DateTimeFormatter nanoFormatter = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS"); + LocalDateTime ldt = LocalDateTime.parse(dateStr, nanoFormatter); + return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } catch (Exception ignore) {} + // Try ISO_LOCAL_DATE_TIME (without nanos) try { LocalDateTime ldt = LocalDateTime.parse(dateStr); return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); @@ -667,7 +676,7 @@ private String formatDateForMySQL(String dateStr) { for (java.time.format.DateTimeFormatter fmt : formatters) { try { LocalDateTime ldt = LocalDateTime.parse(dateStr, fmt); - logger.info("Parsed date value="+ldt); + logger.info("Parsed date value=" + ldt); return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); } catch (Exception ignore2) {} } From f66849c74e5e950403d5a469369a7141f4bf41e6 Mon Sep 17 00:00:00 2001 From: vishwab1 Date: Tue, 12 Aug 2025 17:24:15 +0530 Subject: [PATCH 16/24] fix: logs added --- .../GetDataFromVanAndSyncToDBImpl.java | 331 +++++++++--------- 1 file changed, 172 insertions(+), 159 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index becb23e0..f645b56b 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -46,7 +46,6 @@ public class GetDataFromVanAndSyncToDBImpl implements GetDataFromVanAndSyncToDB @Autowired private DataSyncRepositoryCentral dataSyncRepositoryCentral; - private static final Map> TABLE_GROUPS = new HashMap<>(); static { TABLE_GROUPS.put(1, @@ -96,14 +95,15 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E ObjectMapper mapper = new ObjectMapper(); SyncUploadDataDigester syncUploadDataDigester = mapper.readValue(requestOBJ, SyncUploadDataDigester.class); -List> dataToBesync = syncUploadDataDigester.getSyncData(); + List> dataToBesync = syncUploadDataDigester.getSyncData(); + logger.info("Data to be synced: {}", dataToBesync); if (syncUploadDataDigester == null || syncUploadDataDigester.getTableName() == null) { logger.error("Invalid SyncUploadDataDigester object or tableName is null."); return "Error: Invalid sync request."; } String syncTableName = syncUploadDataDigester.getTableName(); -logger.info("Syncing data for table: {}", syncTableName); + logger.info("Syncing data for table: {}", syncTableName); // Handle specific tables first, if their logic is distinct if ("m_beneficiaryregidmapping".equalsIgnoreCase(syncTableName)) { String result = update_M_BeneficiaryRegIdMapping_for_provisioned_benID(syncUploadDataDigester); @@ -113,17 +113,18 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E logger.error("Sync failed for m_beneficiaryregidmapping: {}", result); return "Sync failed for m_beneficiaryregidmapping."; } - } + } // else if ("i_beneficiarydetails".equalsIgnoreCase(syncTableName)) { - // String result = update_I_BeneficiaryDetails_for_processed_in_batches(syncUploadDataDigester); - // if ("data sync passed".equals(result)) { - // return "Sync successful for i_beneficiarydetails."; - // } else { - // logger.error("Sync failed for i_beneficiarydetails: {}", result); - // return "Sync failed for i_beneficiarydetails."; - // } + // String result = + // update_I_BeneficiaryDetails_for_processed_in_batches(syncUploadDataDigester); + // if ("data sync passed".equals(result)) { + // return "Sync successful for i_beneficiarydetails."; + // } else { + // logger.error("Sync failed for i_beneficiarydetails: {}", result); + // return "Sync failed for i_beneficiarydetails."; // } - else { + // } + else { // Determine the group for the current table or iterate through all if no // specific table is given boolean syncSuccess = true; @@ -134,10 +135,10 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E // Otherwise, iterate through all defined groups. if (syncTableName != null && !syncTableName.isEmpty()) { boolean foundInGroup = false; - - for (Map map : dataToBesync) { + + for (Map map : dataToBesync) { // if (entry.getValue().contains(syncTableName.toLowerCase())) { - if(map.get("tableName") != null + if (map.get("tableName") != null && map.get("tableName").toString().equalsIgnoreCase(syncTableName)) { syncSuccess = syncTablesInGroup(syncUploadDataDigester.getSchemaName(), syncTableName, syncUploadDataDigester); @@ -151,7 +152,7 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E syncSuccess = performGenericTableSync(syncUploadDataDigester); } } else { - + logger.info("No specific table provided. Attempting to sync all tables group by group."); for (Map.Entry> entry : TABLE_GROUPS.entrySet()) { Integer groupId = entry.getKey(); @@ -159,7 +160,7 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E logger.info("Starting sync for Group {}", groupId); for (String table : tablesInGroup) { try { - + boolean currentTableSyncResult = syncTablesInGroup(syncUploadDataDigester.getSchemaName(), table, syncUploadDataDigester); if (!currentTableSyncResult) { @@ -167,8 +168,8 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E errorMessage += "Failed to sync table: " + table + " in Group " + groupId + ". "; logger.error("Sync failed for table '{}' in Group {}. Error: {}", table, groupId, errorMessage); - - } else { + + } else { logger.info("Successfully synced table: {} in Group {}", table, groupId); } } catch (Exception e) { @@ -191,12 +192,11 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E } } - private boolean syncTablesInGroup(String schemaName, String currentTableName, SyncUploadDataDigester originalDigester) { - logger.info("Table name from sync tables in group: {}", currentTableName); - logger.info("Van inc =",originalDigester.getVanAutoIncColumnName()); - logger.info("Table data="+ originalDigester.getSyncData()); + logger.info("Table name from sync tables in group: {}", currentTableName); + logger.info("Van inc =", originalDigester.getVanAutoIncColumnName()); + logger.info("Table data=" + originalDigester.getSyncData()); SyncUploadDataDigester tableSpecificDigester = new SyncUploadDataDigester(); tableSpecificDigester.setSchemaName(schemaName); @@ -204,14 +204,14 @@ private boolean syncTablesInGroup(String schemaName, String currentTableName, tableSpecificDigester.setSyncedBy(originalDigester.getSyncedBy()); tableSpecificDigester.setFacilityID(originalDigester.getFacilityID()); tableSpecificDigester.setVanAutoIncColumnName(originalDigester.getVanAutoIncColumnName()); - tableSpecificDigester.setServerColumns(originalDigester.getServerColumns()); + tableSpecificDigester.setServerColumns(originalDigester.getServerColumns()); tableSpecificDigester.setSyncData(originalDigester.getSyncData()); return performGenericTableSync(tableSpecificDigester); } private String update_M_BeneficiaryRegIdMapping_for_provisioned_benID( SyncUploadDataDigester syncUploadDataDigester) { - + List> dataToBesync = syncUploadDataDigester.getSyncData(); List syncData = new ArrayList<>(); @@ -236,7 +236,8 @@ private String update_M_BeneficiaryRegIdMapping_for_provisioned_benID( if (!syncData.isEmpty()) { try { int[] i = dataSyncRepositoryCentral.syncDataToCentralDB(syncUploadDataDigester.getSchemaName(), - syncUploadDataDigester.getTableName(), syncUploadDataDigester.getServerColumns(), query, syncData); + syncUploadDataDigester.getTableName(), syncUploadDataDigester.getServerColumns(), query, + syncData); if (i.length == syncData.size()) { logger.info("Successfully updated {} records for m_beneficiaryregidmapping.", i.length); @@ -284,10 +285,10 @@ public String update_I_BeneficiaryDetails_for_processed_in_batches(SyncUploadDat String problematicWhereClause = " WHERE Processed <> 'P' AND VanID IS NOT NULL "; // Define it explicitly - while (true) { - List> batch; - try { - + while (true) { + List> batch; + try { + batch = dataSyncRepositoryCentral.getBatchForBenDetails( syncUploadDataDigester, problematicWhereClause, @@ -335,13 +336,12 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig return true; // Nothing to sync, consider it a success } - String syncTableName = syncUploadDataDigester.getTableName(); String vanAutoIncColumnName = syncUploadDataDigester.getVanAutoIncColumnName(); String schemaName = syncUploadDataDigester.getSchemaName(); Integer facilityIDFromDigester = syncUploadDataDigester.getFacilityID(); -logger.info("Syncing data for table: {}", syncTableName); -logger.info("column name="+syncUploadDataDigester.getServerColumns()); + logger.info("Syncing data for table: {}", syncTableName); + logger.info("column name=" + syncUploadDataDigester.getServerColumns()); logger.info("Van Auto Increment Column Name: {}", vanAutoIncColumnName); for (Map map : dataToBesync) { String vanSerialNo = String.valueOf(map.get(vanAutoIncColumnName)); @@ -353,11 +353,11 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig map.put("SyncedDate", String.valueOf(LocalDateTime.now())); // Ensure column name matches DB if (map.get("CreatedDate") == null || map.get("created_date") == null) { logger.info("CreatedDate was null for table: " + syncTableName + ", inserting current time"); - if(map.get("CreatedDate") == null) + if (map.get("CreatedDate") == null) map.put("CreatedDate", String.valueOf(LocalDateTime.now())); - if(map.get("created_date") == null) + if (map.get("created_date") == null) map.put("created_date", String.valueOf(LocalDateTime.now())); - } + } // Facility ID processing if (facilityIDFromDigester != null) { // Determine the 'Processed' status based on facility ID for specific tables @@ -426,42 +426,44 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig // Prepare Object array for insert/update Object[] objArr; - // List serverColumnsList = Arrays.asList(syncUploadDataDigester.getServerColumns().split(",")); - List cleanedColumnsList = Arrays.asList(cleanColumnNames(syncUploadDataDigester.getServerColumns()).split(",")); + // List serverColumnsList = + // Arrays.asList(syncUploadDataDigester.getServerColumns().split(",")); + List cleanedColumnsList = Arrays + .asList(cleanColumnNames(syncUploadDataDigester.getServerColumns()).split(",")); List currentRecordValues = new ArrayList<>(); -for (String column : cleanedColumnsList) { - Object value = map.get(column.trim()); - if (value instanceof Boolean) { - currentRecordValues.add(value); - } else if (value != null) { - // Handle date conversion for known date columns - if (isDateColumn(column.trim()) && value instanceof String) { - String formatted = formatDateForMySQL((String) value); - currentRecordValues.add(formatted); - } else { - currentRecordValues.add(String.valueOf(value)); - } - } else { - currentRecordValues.add(null); - } -} + for (String column : cleanedColumnsList) { + Object value = map.get(column.trim()); + if (value instanceof Boolean) { + currentRecordValues.add(value); + } else if (value != null) { + // Handle date conversion for known date columns + if (isDateColumn(column.trim()) && value instanceof String) { + String formatted = formatDateForMySQL((String) value); + currentRecordValues.add(formatted); + } else { + currentRecordValues.add(String.valueOf(value)); + } + } else { + currentRecordValues.add(null); + } + } // for (String column : cleanedColumnsList) { - // Object value = map.get(column.trim()); - // // Handle boolean conversion if necessary, though String.valueOf should - // // generally work for prepared statements - // if (value instanceof Boolean) { - // currentRecordValues.add(value); - // } else if (value != null) { - // currentRecordValues.add(String.valueOf(value)); - // } else { - // currentRecordValues.add(null); - // } + // Object value = map.get(column.trim()); + // // Handle boolean conversion if necessary, though String.valueOf should + // // generally work for prepared statements + // if (value instanceof Boolean) { + // currentRecordValues.add(value); + // } else if (value != null) { + // currentRecordValues.add(String.valueOf(value)); + // } else { + // currentRecordValues.add(null); + // } // } objArr = currentRecordValues.toArray(); -logger.info("Object array for sync: {}", Arrays.toString(objArr)); + logger.info("Object array for sync: {}", Arrays.toString(objArr)); if (recordCheck == 0) { syncDataListInsert.add(objArr); @@ -485,9 +487,12 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig boolean insertSuccess = true; boolean updateSuccess = true; + logger.info("sync data for insert: {}", syncDataListInsert); if (!syncDataListInsert.isEmpty()) { - String queryInsert = getQueryToInsertDataToServerDB(schemaName, syncTableName, syncUploadDataDigester.getServerColumns()); - + String queryInsert = getQueryToInsertDataToServerDB(schemaName, syncTableName, + syncUploadDataDigester.getServerColumns()); + logger.info("queryInsert", queryInsert); + try { int[] i = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, syncUploadDataDigester.getServerColumns(), queryInsert, syncDataListInsert); @@ -506,7 +511,8 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig } if (!syncDataListUpdate.isEmpty()) { - String queryUpdate = getQueryToUpdateDataToServerDB(schemaName, syncUploadDataDigester.getServerColumns(), syncTableName); + String queryUpdate = getQueryToUpdateDataToServerDB(schemaName, syncUploadDataDigester.getServerColumns(), + syncTableName); // Ensure the update query is correct and matches the expected format try { int[] j = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, @@ -526,52 +532,51 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig } return insertSuccess && updateSuccess; } -private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { - String cleanedColumns = cleanColumnNames(serverColumns); - String[] cleanedColumnsArr = cleanedColumns.split(","); - - StringBuilder preparedStatementSetter = new StringBuilder(); - for (int i = 0; i < cleanedColumnsArr.length; i++) { - preparedStatementSetter.append("?"); - if (i < cleanedColumnsArr.length - 1) { - preparedStatementSetter.append(", "); + + private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { + String cleanedColumns = cleanColumnNames(serverColumns); + String[] cleanedColumnsArr = cleanedColumns.split(","); + + StringBuilder preparedStatementSetter = new StringBuilder(); + for (int i = 0; i < cleanedColumnsArr.length; i++) { + preparedStatementSetter.append("?"); + if (i < cleanedColumnsArr.length - 1) { + preparedStatementSetter.append(", "); + } } + + StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); + queryBuilder.append(schemaName).append(".").append(tableName); + queryBuilder.append("(").append(cleanedColumns).append(") VALUES (").append(preparedStatementSetter) + .append(")"); + return queryBuilder.toString(); } - StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); - queryBuilder.append(schemaName).append(".").append(tableName); - queryBuilder.append("(").append(cleanedColumns).append(") VALUES (").append(preparedStatementSetter).append(")"); - return queryBuilder.toString(); -} - - - - // private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { - // String[] columnsArr = null; - // if (serverColumns != null) - // columnsArr = serverColumns.split(","); - - // StringBuilder preparedStatementSetter = new StringBuilder(); - - // if (columnsArr != null && columnsArr.length > 0) { - // for (int i = 0; i < columnsArr.length; i++) { - // preparedStatementSetter.append("?"); - // if (i < columnsArr.length - 1) { - // preparedStatementSetter.append(", "); - // } - // } - // } - - - - // StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); - // queryBuilder.append(schemaName).append(".").append(tableName); - // queryBuilder.append("("); - // queryBuilder.append(serverColumns); - // queryBuilder.append(") VALUES ("); - // queryBuilder.append(preparedStatementSetter); - // queryBuilder.append(")"); - // return queryBuilder.toString(); + // private String getQueryToInsertDataToServerDB(String schemaName, String + // tableName, String serverColumns) { + // String[] columnsArr = null; + // if (serverColumns != null) + // columnsArr = serverColumns.split(","); + + // StringBuilder preparedStatementSetter = new StringBuilder(); + + // if (columnsArr != null && columnsArr.length > 0) { + // for (int i = 0; i < columnsArr.length; i++) { + // preparedStatementSetter.append("?"); + // if (i < columnsArr.length - 1) { + // preparedStatementSetter.append(", "); + // } + // } + // } + + // StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); + // queryBuilder.append(schemaName).append(".").append(tableName); + // queryBuilder.append("("); + // queryBuilder.append(serverColumns); + // queryBuilder.append(") VALUES ("); + // queryBuilder.append(preparedStatementSetter); + // queryBuilder.append(")"); + // return queryBuilder.toString(); // } public String getQueryToUpdateDataToServerDB(String schemaName, String serverColumns, String tableName) { @@ -581,10 +586,10 @@ public String getQueryToUpdateDataToServerDB(String schemaName, String serverCol StringBuilder preparedStatementSetter = new StringBuilder(); - if (columnsArr != null && columnsArr.length > 0) { + if (columnsArr != null && columnsArr.length > 0) { for (int i = 0; i < columnsArr.length; i++) { String columnName = columnsArr[i].trim(); // ← NEW LINE - + // Special handling for CreatedDate - use COALESCE to prevent NULL if (columnName.equalsIgnoreCase("CreatedDate")) { // ← NEW BLOCK preparedStatementSetter.append(columnName); @@ -593,7 +598,7 @@ public String getQueryToUpdateDataToServerDB(String schemaName, String serverCol preparedStatementSetter.append(columnName); preparedStatementSetter.append(" = ?"); } - + if (i < columnsArr.length - 1) { preparedStatementSetter.append(", "); } @@ -637,51 +642,59 @@ private String getFailedRecords(int[] results, List data) { logger.info("Failed records info: {}", failedRecordsInfo); return String.join("; ", failedRecordsInfo); } -private String cleanColumnNames(String serverColumns) { - // Remove all date_format(...) expressions and keep only the column name - return serverColumns.replaceAll("date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", "$1"); -} - -private boolean isDateColumn(String columnName) { - // List all your date/datetime columns here - return Arrays.asList("MarriageDate", "DOB", "CreatedDate", "LastModDate", "SyncedDate", "ReservedOn").contains(columnName); -} - -private String formatDateForMySQL(String dateStr) { - logger.info("Format date value=" + dateStr); - if (dateStr == null || dateStr.isEmpty()) return null; - // Try parsing with nanoseconds - try { - // Handles "2025-08-12T15:29:15.041257900" - java.time.format.DateTimeFormatter nanoFormatter = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS"); - LocalDateTime ldt = LocalDateTime.parse(dateStr, nanoFormatter); - return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - } catch (Exception ignore) {} - // Try ISO_LOCAL_DATE_TIME (without nanos) - try { - LocalDateTime ldt = LocalDateTime.parse(dateStr); - return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - } catch (Exception ignore) {} - // Try MySQL DATETIME format (already correct) - if (dateStr.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}")) { - return dateStr; + + private String cleanColumnNames(String serverColumns) { + // Remove all date_format(...) expressions and keep only the column name + return serverColumns.replaceAll("date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", "$1"); } - // Try parsing with other common formats - try { - java.time.format.DateTimeFormatter[] formatters = new java.time.format.DateTimeFormatter[] { - java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"), - java.time.format.DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"), - java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd") - }; - for (java.time.format.DateTimeFormatter fmt : formatters) { - try { - LocalDateTime ldt = LocalDateTime.parse(dateStr, fmt); - logger.info("Parsed date value=" + ldt); - return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - } catch (Exception ignore2) {} + + private boolean isDateColumn(String columnName) { + // List all your date/datetime columns here + return Arrays.asList("MarriageDate", "DOB", "CreatedDate", "LastModDate", "SyncedDate", "ReservedOn") + .contains(columnName); + } + + private String formatDateForMySQL(String dateStr) { + logger.info("Format date value=" + dateStr); + if (dateStr == null || dateStr.isEmpty()) + return null; + // Try parsing with nanoseconds + try { + // Handles "2025-08-12T15:29:15.041257900" + java.time.format.DateTimeFormatter nanoFormatter = java.time.format.DateTimeFormatter + .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS"); + LocalDateTime ldt = LocalDateTime.parse(dateStr, nanoFormatter); + return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } catch (Exception ignore) { + } + // Try ISO_LOCAL_DATE_TIME (without nanos) + try { + LocalDateTime ldt = LocalDateTime.parse(dateStr); + return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } catch (Exception ignore) { } - } catch (Exception ignore3) {} - // If all parsing fails, return null to avoid inserting invalid data - return null; -} + // Try MySQL DATETIME format (already correct) + if (dateStr.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}")) { + return dateStr; + } + // Try parsing with other common formats + try { + java.time.format.DateTimeFormatter[] formatters = new java.time.format.DateTimeFormatter[] { + java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"), + java.time.format.DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"), + java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd") + }; + for (java.time.format.DateTimeFormatter fmt : formatters) { + try { + LocalDateTime ldt = LocalDateTime.parse(dateStr, fmt); + logger.info("Parsed date value=" + ldt); + return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } catch (Exception ignore2) { + } + } + } catch (Exception ignore3) { + } + // If all parsing fails, return null to avoid inserting invalid data + return null; + } } \ No newline at end of file From e7dc9cf18b7c70999ab09b8b676be718d5272bd8 Mon Sep 17 00:00:00 2001 From: vishwab1 Date: Tue, 12 Aug 2025 18:08:49 +0530 Subject: [PATCH 17/24] fix: new logger --- .../GetDataFromVanAndSyncToDBImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index f645b56b..9061ac56 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -466,8 +466,10 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig logger.info("Object array for sync: {}", Arrays.toString(objArr)); if (recordCheck == 0) { + logger.info("Sync table name", syncTableName); syncDataListInsert.add(objArr); } else { + logger.info("Sync table name else", syncTableName); // For update, append the WHERE clause parameters at the end of the array List updateParams = new ArrayList<>(Arrays.asList(objArr)); updateParams.add(String.valueOf(vanSerialNo)); @@ -491,7 +493,10 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig if (!syncDataListInsert.isEmpty()) { String queryInsert = getQueryToInsertDataToServerDB(schemaName, syncTableName, syncUploadDataDigester.getServerColumns()); - logger.info("queryInsert", queryInsert); + logger.info("queryInsert", queryInsert); + if ("i_beneficiaryaddress".equalsIgnoreCase(syncTableName)) { + logger.info("sync data for insert for address: {}", syncDataListInsert); + } try { int[] i = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, From 7ba640564597c7d60f65f3d45a42c80d892b5d75 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 22:08:05 +0530 Subject: [PATCH 18/24] fix: revert the date condition --- .../GetDataFromVanAndSyncToDBImpl.java | 171 +++++++++--------- 1 file changed, 85 insertions(+), 86 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index 9061ac56..505abfcb 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -27,7 +27,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -351,13 +350,13 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig // Update SyncedBy and SyncedDate in the xmap itself before processing map.put("SyncedBy", syncUploadDataDigester.getSyncedBy()); map.put("SyncedDate", String.valueOf(LocalDateTime.now())); // Ensure column name matches DB - if (map.get("CreatedDate") == null || map.get("created_date") == null) { - logger.info("CreatedDate was null for table: " + syncTableName + ", inserting current time"); - if (map.get("CreatedDate") == null) - map.put("CreatedDate", String.valueOf(LocalDateTime.now())); - if (map.get("created_date") == null) - map.put("created_date", String.valueOf(LocalDateTime.now())); - } + // if (map.get("CreatedDate") == null || map.get("created_date") == null) { + // logger.info("CreatedDate was null for table: " + syncTableName + ", inserting current time"); + // if (map.get("CreatedDate") == null) + // map.put("CreatedDate", String.valueOf(LocalDateTime.now())); + // if (map.get("created_date") == null) + // map.put("created_date", String.valueOf(LocalDateTime.now())); + // } // Facility ID processing if (facilityIDFromDigester != null) { // Determine the 'Processed' status based on facility ID for specific tables @@ -426,41 +425,41 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig // Prepare Object array for insert/update Object[] objArr; - // List serverColumnsList = - // Arrays.asList(syncUploadDataDigester.getServerColumns().split(",")); - List cleanedColumnsList = Arrays - .asList(cleanColumnNames(syncUploadDataDigester.getServerColumns()).split(",")); + List serverColumnsList = + Arrays.asList(syncUploadDataDigester.getServerColumns().split(",")); + // List cleanedColumnsList = Arrays + // .asList(cleanColumnNames(syncUploadDataDigester.getServerColumns()).split(",")); List currentRecordValues = new ArrayList<>(); - for (String column : cleanedColumnsList) { - Object value = map.get(column.trim()); - if (value instanceof Boolean) { - currentRecordValues.add(value); - } else if (value != null) { - // Handle date conversion for known date columns - if (isDateColumn(column.trim()) && value instanceof String) { - String formatted = formatDateForMySQL((String) value); - currentRecordValues.add(formatted); - } else { - currentRecordValues.add(String.valueOf(value)); - } - } else { - currentRecordValues.add(null); - } - } // for (String column : cleanedColumnsList) { - // Object value = map.get(column.trim()); - // // Handle boolean conversion if necessary, though String.valueOf should - // // generally work for prepared statements - // if (value instanceof Boolean) { - // currentRecordValues.add(value); - // } else if (value != null) { - // currentRecordValues.add(String.valueOf(value)); - // } else { - // currentRecordValues.add(null); - // } + // Object value = map.get(column.trim()); + // if (value instanceof Boolean) { + // currentRecordValues.add(value); + // } else if (value != null) { + // // Handle date conversion for known date columns + // if (isDateColumn(column.trim()) && value instanceof String) { + // String formatted = formatDateForMySQL((String) value); + // currentRecordValues.add(formatted); + // } else { + // currentRecordValues.add(String.valueOf(value)); + // } + // } else { + // currentRecordValues.add(null); + // } // } + for (String column : serverColumnsList) { + Object value = map.get(column.trim()); + // Handle boolean conversion if necessary, though String.valueOf should + // generally work for prepared statements + if (value instanceof Boolean) { + currentRecordValues.add(value); + } else if (value != null) { + currentRecordValues.add(String.valueOf(value)); + } else { + currentRecordValues.add(null); + } + } objArr = currentRecordValues.toArray(); logger.info("Object array for sync: {}", Arrays.toString(objArr)); @@ -653,53 +652,53 @@ private String cleanColumnNames(String serverColumns) { return serverColumns.replaceAll("date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", "$1"); } - private boolean isDateColumn(String columnName) { - // List all your date/datetime columns here - return Arrays.asList("MarriageDate", "DOB", "CreatedDate", "LastModDate", "SyncedDate", "ReservedOn") - .contains(columnName); - } + // private boolean isDateColumn(String columnName) { + // // List all your date/datetime columns here + // return Arrays.asList("MarriageDate", "DOB", "CreatedDate", "LastModDate", "SyncedDate", "ReservedOn") + // .contains(columnName); + // } - private String formatDateForMySQL(String dateStr) { - logger.info("Format date value=" + dateStr); - if (dateStr == null || dateStr.isEmpty()) - return null; - // Try parsing with nanoseconds - try { - // Handles "2025-08-12T15:29:15.041257900" - java.time.format.DateTimeFormatter nanoFormatter = java.time.format.DateTimeFormatter - .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS"); - LocalDateTime ldt = LocalDateTime.parse(dateStr, nanoFormatter); - return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - } catch (Exception ignore) { - } - // Try ISO_LOCAL_DATE_TIME (without nanos) - try { - LocalDateTime ldt = LocalDateTime.parse(dateStr); - return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - } catch (Exception ignore) { - } - // Try MySQL DATETIME format (already correct) - if (dateStr.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}")) { - return dateStr; - } - // Try parsing with other common formats - try { - java.time.format.DateTimeFormatter[] formatters = new java.time.format.DateTimeFormatter[] { - java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"), - java.time.format.DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"), - java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd") - }; - for (java.time.format.DateTimeFormatter fmt : formatters) { - try { - LocalDateTime ldt = LocalDateTime.parse(dateStr, fmt); - logger.info("Parsed date value=" + ldt); - return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - } catch (Exception ignore2) { - } - } - } catch (Exception ignore3) { - } - // If all parsing fails, return null to avoid inserting invalid data - return null; - } + // private String formatDateForMySQL(String dateStr) { + // logger.info("Format date value=" + dateStr); + // if (dateStr == null || dateStr.isEmpty()) + // return null; + // // Try parsing with nanoseconds + // try { + // // Handles "2025-08-12T15:29:15.041257900" + // java.time.format.DateTimeFormatter nanoFormatter = java.time.format.DateTimeFormatter + // .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS"); + // LocalDateTime ldt = LocalDateTime.parse(dateStr, nanoFormatter); + // return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + // } catch (Exception ignore) { + // } + // // Try ISO_LOCAL_DATE_TIME (without nanos) + // try { + // LocalDateTime ldt = LocalDateTime.parse(dateStr); + // return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + // } catch (Exception ignore) { + // } + // // Try MySQL DATETIME format (already correct) + // if (dateStr.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}")) { + // return dateStr; + // } + // // Try parsing with other common formats + // try { + // java.time.format.DateTimeFormatter[] formatters = new java.time.format.DateTimeFormatter[] { + // java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"), + // java.time.format.DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"), + // java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd") + // }; + // for (java.time.format.DateTimeFormatter fmt : formatters) { + // try { + // LocalDateTime ldt = LocalDateTime.parse(dateStr, fmt); + // logger.info("Parsed date value=" + ldt); + // return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + // } catch (Exception ignore2) { + // } + // } + // } catch (Exception ignore3) { + // } + // // If all parsing fails, return null to avoid inserting invalid data + // return null; + // } } \ No newline at end of file From 1bb4b5329ef264baa9abeebfa30b4eb61a8aeeda Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 22:38:45 +0530 Subject: [PATCH 19/24] fix: revert insert code --- .../GetDataFromVanAndSyncToDBImpl.java | 81 ++++++++++--------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index 505abfcb..ee0001ad 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -537,51 +537,52 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig return insertSuccess && updateSuccess; } - private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { - String cleanedColumns = cleanColumnNames(serverColumns); - String[] cleanedColumnsArr = cleanedColumns.split(","); - - StringBuilder preparedStatementSetter = new StringBuilder(); - for (int i = 0; i < cleanedColumnsArr.length; i++) { - preparedStatementSetter.append("?"); - if (i < cleanedColumnsArr.length - 1) { - preparedStatementSetter.append(", "); - } - } + // private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { + // String cleanedColumns = cleanColumnNames(serverColumns); + // String[] cleanedColumnsArr = cleanedColumns.split(","); + + // StringBuilder preparedStatementSetter = new StringBuilder(); + // for (int i = 0; i < cleanedColumnsArr.length; i++) { + // preparedStatementSetter.append("?"); + // if (i < cleanedColumnsArr.length - 1) { + // preparedStatementSetter.append(", "); + // } + // } - StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); - queryBuilder.append(schemaName).append(".").append(tableName); - queryBuilder.append("(").append(cleanedColumns).append(") VALUES (").append(preparedStatementSetter) - .append(")"); - return queryBuilder.toString(); - } + // StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); + // queryBuilder.append(schemaName).append(".").append(tableName); + // queryBuilder.append("(").append(cleanedColumns).append(") VALUES (").append(preparedStatementSetter) + // .append(")"); + // return queryBuilder.toString(); + // } - // private String getQueryToInsertDataToServerDB(String schemaName, String - // tableName, String serverColumns) { - // String[] columnsArr = null; - // if (serverColumns != null) - // columnsArr = serverColumns.split(","); + private String getQueryToInsertDataToServerDB(String schemaName, String + tableName, String serverColumns) { + String[] columnsArr = null; + if (serverColumns != null) + columnsArr = serverColumns.split(","); - // StringBuilder preparedStatementSetter = new StringBuilder(); + StringBuilder preparedStatementSetter = new StringBuilder(); - // if (columnsArr != null && columnsArr.length > 0) { - // for (int i = 0; i < columnsArr.length; i++) { - // preparedStatementSetter.append("?"); - // if (i < columnsArr.length - 1) { - // preparedStatementSetter.append(", "); - // } - // } - // } + if (columnsArr != null && columnsArr.length > 0) { + for (int i = 0; i < columnsArr.length; i++) { + preparedStatementSetter.append("?"); + if (i < columnsArr.length - 1) { + preparedStatementSetter.append(", "); + } + } + } - // StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); - // queryBuilder.append(schemaName).append(".").append(tableName); - // queryBuilder.append("("); - // queryBuilder.append(serverColumns); - // queryBuilder.append(") VALUES ("); - // queryBuilder.append(preparedStatementSetter); - // queryBuilder.append(")"); - // return queryBuilder.toString(); - // } + StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); + queryBuilder.append(schemaName).append(".").append(tableName); + queryBuilder.append("("); + queryBuilder.append(serverColumns); + queryBuilder.append(") VALUES ("); + queryBuilder.append(preparedStatementSetter); + queryBuilder.append(")"); + logger.info("Query builder="+queryBuilder.toString()); + return queryBuilder.toString(); + } public String getQueryToUpdateDataToServerDB(String schemaName, String serverColumns, String tableName) { String[] columnsArr = null; From b3ffddd5911c47dda69e8727687dbf6ec55d3f0c Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 12 Aug 2025 23:57:11 +0530 Subject: [PATCH 20/24] fix: revert insert code --- .../GetDataFromVanAndSyncToDBImpl.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index ee0001ad..db9ba954 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -591,24 +591,24 @@ public String getQueryToUpdateDataToServerDB(String schemaName, String serverCol StringBuilder preparedStatementSetter = new StringBuilder(); - if (columnsArr != null && columnsArr.length > 0) { - for (int i = 0; i < columnsArr.length; i++) { - String columnName = columnsArr[i].trim(); // ← NEW LINE - - // Special handling for CreatedDate - use COALESCE to prevent NULL - if (columnName.equalsIgnoreCase("CreatedDate")) { // ← NEW BLOCK - preparedStatementSetter.append(columnName); - preparedStatementSetter.append(" = COALESCE(?, CURRENT_TIMESTAMP)"); - } else { - preparedStatementSetter.append(columnName); - preparedStatementSetter.append(" = ?"); - } - - if (i < columnsArr.length - 1) { - preparedStatementSetter.append(", "); - } - } - } + // if (columnsArr != null && columnsArr.length > 0) { + // for (int i = 0; i < columnsArr.length; i++) { + // String columnName = columnsArr[i].trim(); // ← NEW LINE + + // // Special handling for CreatedDate - use COALESCE to prevent NULL + // if (columnName.equalsIgnoreCase("CreatedDate")) { // ← NEW BLOCK + // preparedStatementSetter.append(columnName); + // preparedStatementSetter.append(" = COALESCE(?, CURRENT_TIMESTAMP)"); + // } else { + // preparedStatementSetter.append(columnName); + // preparedStatementSetter.append(" = ?"); + // } + + // if (i < columnsArr.length - 1) { + // preparedStatementSetter.append(", "); + // } + // } + // } StringBuilder queryBuilder = new StringBuilder(" UPDATE "); queryBuilder.append(schemaName).append(".").append(tableName); queryBuilder.append(" SET "); @@ -648,10 +648,10 @@ private String getFailedRecords(int[] results, List data) { return String.join("; ", failedRecordsInfo); } - private String cleanColumnNames(String serverColumns) { - // Remove all date_format(...) expressions and keep only the column name - return serverColumns.replaceAll("date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", "$1"); - } + // private String cleanColumnNames(String serverColumns) { + // // Remove all date_format(...) expressions and keep only the column name + // return serverColumns.replaceAll("date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", "$1"); + // } // private boolean isDateColumn(String columnName) { // // List all your date/datetime columns here From a376b258e067c9490cc69681ee46362e23cc2101 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Wed, 13 Aug 2025 00:25:46 +0530 Subject: [PATCH 21/24] fix: date format issue --- .../GetDataFromVanAndSyncToDBImpl.java | 542 ++++++++++++------ 1 file changed, 368 insertions(+), 174 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index db9ba954..ca16f704 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -325,217 +325,411 @@ private String getQueryFor_I_BeneficiaryDetails(String schemaName, String tableN * Handles the generic synchronization logic for tables not covered by specific * handlers. */ + private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDigester) { - List> dataToBesync = syncUploadDataDigester.getSyncData(); - List syncDataListInsert = new ArrayList<>(); - List syncDataListUpdate = new ArrayList<>(); + List> dataToBesync = syncUploadDataDigester.getSyncData(); + List syncDataListInsert = new ArrayList<>(); + List syncDataListUpdate = new ArrayList<>(); - if (dataToBesync == null || dataToBesync.isEmpty()) { - logger.info("No data to sync for table: {}", syncUploadDataDigester.getTableName()); - return true; // Nothing to sync, consider it a success + if (dataToBesync == null || dataToBesync.isEmpty()) { + logger.info("No data to sync for table: {}", syncUploadDataDigester.getTableName()); + return true; // Nothing to sync, consider it a success + } + + String syncTableName = syncUploadDataDigester.getTableName(); + String vanAutoIncColumnName = syncUploadDataDigester.getVanAutoIncColumnName(); + String schemaName = syncUploadDataDigester.getSchemaName(); + Integer facilityIDFromDigester = syncUploadDataDigester.getFacilityID(); + String serverColumns = syncUploadDataDigester.getServerColumns(); + + logger.info("Syncing data for table: {}", syncTableName); + logger.info("column name=" + serverColumns); + logger.info("Van Auto Increment Column Name: {}", vanAutoIncColumnName); + + List serverColumnsList = Arrays.asList(serverColumns.split(",")); + + for (Map map : dataToBesync) { + // Create a new map with clean column names as keys + Map cleanRecord = new HashMap<>(); + for (String key : map.keySet()) { + String cleanKey = key; + // Handle keys with SQL functions like date_format + if (key.startsWith("date_format(") && key.endsWith(")")) { + int start = key.indexOf("(") + 1; + int end = key.indexOf(","); + if (end > start) { + cleanKey = key.substring(start, end).trim(); + } else { + // Fallback if format is unexpected + cleanKey = key.substring(start, key.indexOf(")")).trim(); + } + } + cleanRecord.put(cleanKey.trim(), map.get(key)); } - String syncTableName = syncUploadDataDigester.getTableName(); - String vanAutoIncColumnName = syncUploadDataDigester.getVanAutoIncColumnName(); - String schemaName = syncUploadDataDigester.getSchemaName(); - Integer facilityIDFromDigester = syncUploadDataDigester.getFacilityID(); - logger.info("Syncing data for table: {}", syncTableName); - logger.info("column name=" + syncUploadDataDigester.getServerColumns()); - logger.info("Van Auto Increment Column Name: {}", vanAutoIncColumnName); - for (Map map : dataToBesync) { - String vanSerialNo = String.valueOf(map.get(vanAutoIncColumnName)); - String vanID = String.valueOf(map.get("VanID")); - int syncFacilityID = 0; - - // Update SyncedBy and SyncedDate in the xmap itself before processing - map.put("SyncedBy", syncUploadDataDigester.getSyncedBy()); - map.put("SyncedDate", String.valueOf(LocalDateTime.now())); // Ensure column name matches DB - // if (map.get("CreatedDate") == null || map.get("created_date") == null) { - // logger.info("CreatedDate was null for table: " + syncTableName + ", inserting current time"); - // if (map.get("CreatedDate") == null) - // map.put("CreatedDate", String.valueOf(LocalDateTime.now())); - // if (map.get("created_date") == null) - // map.put("created_date", String.valueOf(LocalDateTime.now())); - // } - // Facility ID processing - if (facilityIDFromDigester != null) { - // Determine the 'Processed' status based on facility ID for specific tables - switch (syncTableName.toLowerCase()) { - case "t_indent": - case "t_indentorder": { - if (map.containsKey("FromFacilityID") && map.get("FromFacilityID") instanceof Double) { - Double fromFacilityID = (Double) map.get("FromFacilityID"); - if (fromFacilityID.intValue() == facilityIDFromDigester) { - map.put("Processed", "P"); - } + String vanSerialNo = String.valueOf(cleanRecord.get(vanAutoIncColumnName)); + String vanID = String.valueOf(cleanRecord.get("VanID")); + int syncFacilityID = 0; + + // Update SyncedBy and SyncedDate in the xmap itself before processing + cleanRecord.put("SyncedBy", syncUploadDataDigester.getSyncedBy()); + cleanRecord.put("SyncedDate", String.valueOf(LocalDateTime.now())); + + if (facilityIDFromDigester != null) { + // Determine the 'Processed' status based on facility ID for specific tables + switch (syncTableName.toLowerCase()) { + case "t_indent": + case "t_indentorder": { + if (cleanRecord.containsKey("FromFacilityID") && cleanRecord.get("FromFacilityID") instanceof Number) { + Number fromFacilityID = (Number) cleanRecord.get("FromFacilityID"); + if (fromFacilityID.intValue() == facilityIDFromDigester) { + cleanRecord.put("Processed", "P"); } - break; } - case "t_indentissue": { - if (map.containsKey("ToFacilityID") && map.get("ToFacilityID") instanceof Double) { - Double toFacilityID = (Double) map.get("ToFacilityID"); - if (toFacilityID.intValue() == facilityIDFromDigester) { - map.put("Processed", "P"); - } + break; + } + case "t_indentissue": { + if (cleanRecord.containsKey("ToFacilityID") && cleanRecord.get("ToFacilityID") instanceof Number) { + Number toFacilityID = (Number) cleanRecord.get("ToFacilityID"); + if (toFacilityID.intValue() == facilityIDFromDigester) { + cleanRecord.put("Processed", "P"); } - break; } - case "t_stocktransfer": { - if (map.containsKey("TransferToFacilityID") - && map.get("TransferToFacilityID") instanceof Double) { - Double transferToFacilityID = (Double) map.get("TransferToFacilityID"); - if (transferToFacilityID.intValue() == facilityIDFromDigester) { - map.put("Processed", "P"); - } + break; + } + case "t_stocktransfer": { + if (cleanRecord.containsKey("TransferToFacilityID") + && cleanRecord.get("TransferToFacilityID") instanceof Number) { + Number transferToFacilityID = (Number) cleanRecord.get("TransferToFacilityID"); + if (transferToFacilityID.intValue() == facilityIDFromDigester) { + cleanRecord.put("Processed", "P"); } - break; } - case "t_itemstockentry": { - if (map.containsKey("FacilityID") && map.get("FacilityID") instanceof Double) { - Double mapFacilityID = (Double) map.get("FacilityID"); - if (mapFacilityID.intValue() == facilityIDFromDigester) { - map.put("Processed", "P"); - } + break; + } + case "t_itemstockentry": { + if (cleanRecord.containsKey("FacilityID") && cleanRecord.get("FacilityID") instanceof Number) { + Number mapFacilityID = (Number) cleanRecord.get("FacilityID"); + if (mapFacilityID.intValue() == facilityIDFromDigester) { + cleanRecord.put("Processed", "P"); } - break; } - default: - // No specific facility ID logic for other tables, maintain existing 'Processed' - // status or default - break; + break; } + default: + // No specific facility ID logic for other tables + break; } + } - // Extract SyncFacilityID for checkRecordIsAlreadyPresentOrNot - if (map.containsKey("SyncFacilityID") && map.get("SyncFacilityID") instanceof Integer) { - syncFacilityID = (Integer) map.get("SyncFacilityID"); - } else if (map.containsKey("SyncFacilityID") && map.get("SyncFacilityID") instanceof Double) { - syncFacilityID = ((Double) map.get("SyncFacilityID")).intValue(); - } + // Extract SyncFacilityID for checkRecordIsAlreadyPresentOrNot + if (cleanRecord.containsKey("SyncFacilityID") && cleanRecord.get("SyncFacilityID") instanceof Number) { + syncFacilityID = ((Number) cleanRecord.get("SyncFacilityID")).intValue(); + } - int recordCheck; - try { - recordCheck = dataSyncRepositoryCentral.checkRecordIsAlreadyPresentOrNot( - schemaName, syncTableName, vanSerialNo, vanID, vanAutoIncColumnName, syncFacilityID); - } catch (Exception e) { - logger.error("Error checking record existence for table {}: VanSerialNo={}, VanID={}. Error: {}", - syncTableName, vanSerialNo, vanID, e.getMessage(), e); - return false; // Critical error, stop sync for this table - } + int recordCheck; + try { + recordCheck = dataSyncRepositoryCentral.checkRecordIsAlreadyPresentOrNot( + schemaName, syncTableName, vanSerialNo, vanID, vanAutoIncColumnName, syncFacilityID); + } catch (Exception e) { + logger.error("Error checking record existence for table {}: VanSerialNo={}, VanID={}. Error: {}", + syncTableName, vanSerialNo, vanID, e.getMessage(), e); + return false; // Critical error, stop sync for this table + } - // Prepare Object array for insert/update - Object[] objArr; - List serverColumnsList = - Arrays.asList(syncUploadDataDigester.getServerColumns().split(",")); - // List cleanedColumnsList = Arrays - // .asList(cleanColumnNames(syncUploadDataDigester.getServerColumns()).split(",")); - - List currentRecordValues = new ArrayList<>(); - - // for (String column : cleanedColumnsList) { - // Object value = map.get(column.trim()); - // if (value instanceof Boolean) { - // currentRecordValues.add(value); - // } else if (value != null) { - // // Handle date conversion for known date columns - // if (isDateColumn(column.trim()) && value instanceof String) { - // String formatted = formatDateForMySQL((String) value); - // currentRecordValues.add(formatted); - // } else { - // currentRecordValues.add(String.valueOf(value)); - // } - // } else { - // currentRecordValues.add(null); - // } - // } - for (String column : serverColumnsList) { - Object value = map.get(column.trim()); - // Handle boolean conversion if necessary, though String.valueOf should - // generally work for prepared statements + // Prepare Object array for insert/update + List currentRecordValues = new ArrayList<>(); + for (String column : serverColumnsList) { + Object value = cleanRecord.get(column.trim()); if (value instanceof Boolean) { - currentRecordValues.add(value); + currentRecordValues.add(value); } else if (value != null) { - currentRecordValues.add(String.valueOf(value)); + currentRecordValues.add(String.valueOf(value)); } else { - currentRecordValues.add(null); - } + currentRecordValues.add(null); } + } - objArr = currentRecordValues.toArray(); - logger.info("Object array for sync: {}", Arrays.toString(objArr)); + Object[] objArr = currentRecordValues.toArray(); + logger.info("Object array for sync: {}", Arrays.toString(objArr)); - if (recordCheck == 0) { - logger.info("Sync table name", syncTableName); - syncDataListInsert.add(objArr); + if (recordCheck == 0) { + logger.info("Sync table name", syncTableName); + syncDataListInsert.add(objArr); + } else { + logger.info("Sync table name else", syncTableName); + // For update, append the WHERE clause parameters at the end of the array + List updateParams = new ArrayList<>(Arrays.asList(objArr)); + updateParams.add(String.valueOf(vanSerialNo)); + + if (Arrays.asList("t_patientissue", "t_physicalstockentry", "t_stockadjustment", "t_saitemmapping", + "t_stocktransfer", "t_patientreturn", "t_facilityconsumption", "t_indent", + "t_indentorder", "t_indentissue", "t_itemstockentry", "t_itemstockexit") + .contains(syncTableName.toLowerCase()) && cleanRecord.containsKey("SyncFacilityID")) { + updateParams.add(String.valueOf(cleanRecord.get("SyncFacilityID"))); } else { - logger.info("Sync table name else", syncTableName); - // For update, append the WHERE clause parameters at the end of the array - List updateParams = new ArrayList<>(Arrays.asList(objArr)); - updateParams.add(String.valueOf(vanSerialNo)); - - if (Arrays.asList("t_patientissue", "t_physicalstockentry", "t_stockadjustment", "t_saitemmapping", - "t_stocktransfer", "t_patientreturn", "t_facilityconsumption", "t_indent", - "t_indentorder", "t_indentissue", "t_itemstockentry", "t_itemstockexit") - .contains(syncTableName.toLowerCase()) && map.containsKey("SyncFacilityID")) { - updateParams.add(String.valueOf(map.get("SyncFacilityID"))); - } else { - updateParams.add(String.valueOf(vanID)); - } - syncDataListUpdate.add(updateParams.toArray()); + updateParams.add(String.valueOf(vanID)); } + syncDataListUpdate.add(updateParams.toArray()); } + } - boolean insertSuccess = true; - boolean updateSuccess = true; + boolean insertSuccess = true; + boolean updateSuccess = true; - logger.info("sync data for insert: {}", syncDataListInsert); - if (!syncDataListInsert.isEmpty()) { - String queryInsert = getQueryToInsertDataToServerDB(schemaName, syncTableName, - syncUploadDataDigester.getServerColumns()); - logger.info("queryInsert", queryInsert); - if ("i_beneficiaryaddress".equalsIgnoreCase(syncTableName)) { - logger.info("sync data for insert for address: {}", syncDataListInsert); - } + logger.info("sync data for insert: {}", syncDataListInsert); + if (!syncDataListInsert.isEmpty()) { + String queryInsert = getQueryToInsertDataToServerDB(schemaName, syncTableName, serverColumns); + logger.info("queryInsert={}", queryInsert); - try { - int[] i = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, - syncUploadDataDigester.getServerColumns(), queryInsert, syncDataListInsert); - if (i.length != syncDataListInsert.size()) { - insertSuccess = false; - logger.error("Partial insert for table {}. Expected {} inserts, got {}. Failed records: {}", - syncTableName, syncDataListInsert.size(), i.length, - getFailedRecords(i, syncDataListInsert)); - } else { - logger.info("Successfully inserted {} records into table {}.", i.length, syncTableName); - } - } catch (Exception e) { + try { + int[] i = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, + serverColumns, queryInsert, syncDataListInsert); + if (i.length != syncDataListInsert.size()) { insertSuccess = false; - logger.error("Exception during insert for table {}: {}", syncTableName, e.getMessage(), e); + logger.error("Partial insert for table {}. Expected {} inserts, got {}. Failed records: {}", + syncTableName, syncDataListInsert.size(), i.length, + getFailedRecords(i, syncDataListInsert)); + } else { + logger.info("Successfully inserted {} records into table {}.", i.length, syncTableName); } + } catch (Exception e) { + insertSuccess = false; + logger.error("Exception during insert for table {}: {}", syncTableName, e.getMessage(), e); } + } - if (!syncDataListUpdate.isEmpty()) { - String queryUpdate = getQueryToUpdateDataToServerDB(schemaName, syncUploadDataDigester.getServerColumns(), - syncTableName); - // Ensure the update query is correct and matches the expected format - try { - int[] j = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, - SERVER_COLUMNS_NOT_REQUIRED, queryUpdate, syncDataListUpdate); - if (j.length != syncDataListUpdate.size()) { - updateSuccess = false; - logger.error("Partial update for table {}. Expected {} updates, got {}. Failed records: {}", - syncTableName, syncDataListUpdate.size(), j.length, - getFailedRecords(j, syncDataListUpdate)); - } else { - logger.info("Successfully updated {} records in table {}.", j.length, syncTableName); - } - } catch (Exception e) { + if (!syncDataListUpdate.isEmpty()) { + String queryUpdate = getQueryToUpdateDataToServerDB(schemaName, serverColumns, syncTableName); + try { + int[] j = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, + SERVER_COLUMNS_NOT_REQUIRED, queryUpdate, syncDataListUpdate); + if (j.length != syncDataListUpdate.size()) { updateSuccess = false; - logger.error("Exception during update for table {}: {}", syncTableName, e.getMessage(), e); + logger.error("Partial update for table {}. Expected {} updates, got {}. Failed records: {}", + syncTableName, syncDataListUpdate.size(), j.length, + getFailedRecords(j, syncDataListUpdate)); + } else { + logger.info("Successfully updated {} records in table {}.", j.length, syncTableName); } + } catch (Exception e) { + updateSuccess = false; + logger.error("Exception during update for table {}: {}", syncTableName, e.getMessage(), e); } - return insertSuccess && updateSuccess; } + return insertSuccess && updateSuccess; +} + // private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDigester) { + // List> dataToBesync = syncUploadDataDigester.getSyncData(); + // List syncDataListInsert = new ArrayList<>(); + // List syncDataListUpdate = new ArrayList<>(); + + // if (dataToBesync == null || dataToBesync.isEmpty()) { + // logger.info("No data to sync for table: {}", syncUploadDataDigester.getTableName()); + // return true; // Nothing to sync, consider it a success + // } + + // String syncTableName = syncUploadDataDigester.getTableName(); + // String vanAutoIncColumnName = syncUploadDataDigester.getVanAutoIncColumnName(); + // String schemaName = syncUploadDataDigester.getSchemaName(); + // Integer facilityIDFromDigester = syncUploadDataDigester.getFacilityID(); + // logger.info("Syncing data for table: {}", syncTableName); + // logger.info("column name=" + syncUploadDataDigester.getServerColumns()); + // logger.info("Van Auto Increment Column Name: {}", vanAutoIncColumnName); + // for (Map map : dataToBesync) { + // String vanSerialNo = String.valueOf(map.get(vanAutoIncColumnName)); + // String vanID = String.valueOf(map.get("VanID")); + // int syncFacilityID = 0; + + // // Update SyncedBy and SyncedDate in the xmap itself before processing + // map.put("SyncedBy", syncUploadDataDigester.getSyncedBy()); + // map.put("SyncedDate", String.valueOf(LocalDateTime.now())); // Ensure column name matches DB + // // if (map.get("CreatedDate") == null || map.get("created_date") == null) { + // // logger.info("CreatedDate was null for table: " + syncTableName + ", inserting current time"); + // // if (map.get("CreatedDate") == null) + // // map.put("CreatedDate", String.valueOf(LocalDateTime.now())); + // // if (map.get("created_date") == null) + // // map.put("created_date", String.valueOf(LocalDateTime.now())); + // // } + // // Facility ID processing + // if (facilityIDFromDigester != null) { + // // Determine the 'Processed' status based on facility ID for specific tables + // switch (syncTableName.toLowerCase()) { + // case "t_indent": + // case "t_indentorder": { + // if (map.containsKey("FromFacilityID") && map.get("FromFacilityID") instanceof Double) { + // Double fromFacilityID = (Double) map.get("FromFacilityID"); + // if (fromFacilityID.intValue() == facilityIDFromDigester) { + // map.put("Processed", "P"); + // } + // } + // break; + // } + // case "t_indentissue": { + // if (map.containsKey("ToFacilityID") && map.get("ToFacilityID") instanceof Double) { + // Double toFacilityID = (Double) map.get("ToFacilityID"); + // if (toFacilityID.intValue() == facilityIDFromDigester) { + // map.put("Processed", "P"); + // } + // } + // break; + // } + // case "t_stocktransfer": { + // if (map.containsKey("TransferToFacilityID") + // && map.get("TransferToFacilityID") instanceof Double) { + // Double transferToFacilityID = (Double) map.get("TransferToFacilityID"); + // if (transferToFacilityID.intValue() == facilityIDFromDigester) { + // map.put("Processed", "P"); + // } + // } + // break; + // } + // case "t_itemstockentry": { + // if (map.containsKey("FacilityID") && map.get("FacilityID") instanceof Double) { + // Double mapFacilityID = (Double) map.get("FacilityID"); + // if (mapFacilityID.intValue() == facilityIDFromDigester) { + // map.put("Processed", "P"); + // } + // } + // break; + // } + // default: + // // No specific facility ID logic for other tables, maintain existing 'Processed' + // // status or default + // break; + // } + // } + + // // Extract SyncFacilityID for checkRecordIsAlreadyPresentOrNot + // if (map.containsKey("SyncFacilityID") && map.get("SyncFacilityID") instanceof Integer) { + // syncFacilityID = (Integer) map.get("SyncFacilityID"); + // } else if (map.containsKey("SyncFacilityID") && map.get("SyncFacilityID") instanceof Double) { + // syncFacilityID = ((Double) map.get("SyncFacilityID")).intValue(); + // } + + // int recordCheck; + // try { + // recordCheck = dataSyncRepositoryCentral.checkRecordIsAlreadyPresentOrNot( + // schemaName, syncTableName, vanSerialNo, vanID, vanAutoIncColumnName, syncFacilityID); + // } catch (Exception e) { + // logger.error("Error checking record existence for table {}: VanSerialNo={}, VanID={}. Error: {}", + // syncTableName, vanSerialNo, vanID, e.getMessage(), e); + // return false; // Critical error, stop sync for this table + // } + + // // Prepare Object array for insert/update + // Object[] objArr; + // List serverColumnsList = + // Arrays.asList(syncUploadDataDigester.getServerColumns().split(",")); + // // List cleanedColumnsList = Arrays + // // .asList(cleanColumnNames(syncUploadDataDigester.getServerColumns()).split(",")); + + // List currentRecordValues = new ArrayList<>(); + + // // for (String column : cleanedColumnsList) { + // // Object value = map.get(column.trim()); + // // if (value instanceof Boolean) { + // // currentRecordValues.add(value); + // // } else if (value != null) { + // // // Handle date conversion for known date columns + // // if (isDateColumn(column.trim()) && value instanceof String) { + // // String formatted = formatDateForMySQL((String) value); + // // currentRecordValues.add(formatted); + // // } else { + // // currentRecordValues.add(String.valueOf(value)); + // // } + // // } else { + // // currentRecordValues.add(null); + // // } + // // } + // for (String column : serverColumnsList) { + // Object value = map.get(column.trim()); + // // Handle boolean conversion if necessary, though String.valueOf should + // // generally work for prepared statements + // if (value instanceof Boolean) { + // currentRecordValues.add(value); + // } else if (value != null) { + // currentRecordValues.add(String.valueOf(value)); + // } else { + // currentRecordValues.add(null); + // } + // } + + // objArr = currentRecordValues.toArray(); + // logger.info("Object array for sync: {}", Arrays.toString(objArr)); + + // if (recordCheck == 0) { + // logger.info("Sync table name", syncTableName); + // syncDataListInsert.add(objArr); + // } else { + // logger.info("Sync table name else", syncTableName); + // // For update, append the WHERE clause parameters at the end of the array + // List updateParams = new ArrayList<>(Arrays.asList(objArr)); + // updateParams.add(String.valueOf(vanSerialNo)); + + // if (Arrays.asList("t_patientissue", "t_physicalstockentry", "t_stockadjustment", "t_saitemmapping", + // "t_stocktransfer", "t_patientreturn", "t_facilityconsumption", "t_indent", + // "t_indentorder", "t_indentissue", "t_itemstockentry", "t_itemstockexit") + // .contains(syncTableName.toLowerCase()) && map.containsKey("SyncFacilityID")) { + // updateParams.add(String.valueOf(map.get("SyncFacilityID"))); + // } else { + // updateParams.add(String.valueOf(vanID)); + // } + // syncDataListUpdate.add(updateParams.toArray()); + // } + // } + + // boolean insertSuccess = true; + // boolean updateSuccess = true; + + // logger.info("sync data for insert: {}", syncDataListInsert); + // if (!syncDataListInsert.isEmpty()) { + // String queryInsert = getQueryToInsertDataToServerDB(schemaName, syncTableName, + // syncUploadDataDigester.getServerColumns()); + // logger.info("queryInsert", queryInsert); + // if ("i_beneficiaryaddress".equalsIgnoreCase(syncTableName)) { + // logger.info("sync data for insert for address: {}", syncDataListInsert); + // } + + // try { + // int[] i = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, + // syncUploadDataDigester.getServerColumns(), queryInsert, syncDataListInsert); + // if (i.length != syncDataListInsert.size()) { + // insertSuccess = false; + // logger.error("Partial insert for table {}. Expected {} inserts, got {}. Failed records: {}", + // syncTableName, syncDataListInsert.size(), i.length, + // getFailedRecords(i, syncDataListInsert)); + // } else { + // logger.info("Successfully inserted {} records into table {}.", i.length, syncTableName); + // } + // } catch (Exception e) { + // insertSuccess = false; + // logger.error("Exception during insert for table {}: {}", syncTableName, e.getMessage(), e); + // } + // } + + // if (!syncDataListUpdate.isEmpty()) { + // String queryUpdate = getQueryToUpdateDataToServerDB(schemaName, syncUploadDataDigester.getServerColumns(), + // syncTableName); + // // Ensure the update query is correct and matches the expected format + // try { + // int[] j = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, + // SERVER_COLUMNS_NOT_REQUIRED, queryUpdate, syncDataListUpdate); + // if (j.length != syncDataListUpdate.size()) { + // updateSuccess = false; + // logger.error("Partial update for table {}. Expected {} updates, got {}. Failed records: {}", + // syncTableName, syncDataListUpdate.size(), j.length, + // getFailedRecords(j, syncDataListUpdate)); + // } else { + // logger.info("Successfully updated {} records in table {}.", j.length, syncTableName); + // } + // } catch (Exception e) { + // updateSuccess = false; + // logger.error("Exception during update for table {}: {}", syncTableName, e.getMessage(), e); + // } + // } + // return insertSuccess && updateSuccess; + // } // private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { // String cleanedColumns = cleanColumnNames(serverColumns); From 80569112c8198320fe2c5cf3b643b5f0a1ec4fc5 Mon Sep 17 00:00:00 2001 From: vishwab1 Date: Wed, 13 Aug 2025 20:20:50 +0530 Subject: [PATCH 22/24] fix: logs add --- .../dataSyncActivity/DataSyncRepository.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java index dccc7ab8..5526ce1c 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java @@ -88,7 +88,12 @@ public List> getDataForGivenSchemaAndTable(String schema, St } } - + + logger.info("Select Query started:"); + logger.info("Table Name: {}", table); + + logger.info("Select Query: {}", baseQuery); + resultSetList = jdbcTemplate.queryForList(baseQuery); return resultSetList; } @@ -102,13 +107,13 @@ public int updateProcessedFlagInVan(String schemaName, String tableName, StringB logger.info("autoIncreamentColumn: " + autoIncreamentColumn); if (tableName != null && tableName.toLowerCase().equals("i_ben_flow_outreach")) { - query = "UPDATE " + schemaName + "." + tableName - + " SET created_date = ? , processed = 'P', SyncedDate = ?, Syncedby = ? " - + "WHERE " + autoIncreamentColumn + " IN (" + vanSerialNos + ")"; + query = "UPDATE " + schemaName + "." + tableName + + " SET created_date = ? , processed = 'P', SyncedDate = ?, Syncedby = ? " + + "WHERE " + autoIncreamentColumn + " IN (" + vanSerialNos + ")"; } else { - query = "UPDATE " + schemaName + "." + tableName - + " SET CreatedDate = ? , processed = 'P', SyncedDate = ?, Syncedby = ? " - + "WHERE " + autoIncreamentColumn + " IN (" + vanSerialNos + ")"; + query = "UPDATE " + schemaName + "." + tableName + + " SET CreatedDate = ? , processed = 'P', SyncedDate = ?, Syncedby = ? " + + "WHERE " + autoIncreamentColumn + " IN (" + vanSerialNos + ")"; } Timestamp syncedDate = new Timestamp(System.currentTimeMillis()); From c41f5f4589bf119d794ac0ba54404fb6bdfbdf44 Mon Sep 17 00:00:00 2001 From: vishwab1 Date: Wed, 13 Aug 2025 21:52:08 +0530 Subject: [PATCH 23/24] fix: log for group and group lsit --- .../UploadDataToServerImpl.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java index e86cdfa5..236c4a62 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java @@ -115,7 +115,7 @@ public String getDataToSyncToServer(int vanID, String user, String Authorization public String syncIntercepter(int vanID, String user, String Authorization, String token) throws Exception { // sync activity trigger - + String serverAcknowledgement = startDataSync(vanID, user, Authorization, token); return serverAcknowledgement; @@ -136,11 +136,17 @@ private String startDataSync(int vanID, String user, String Authorization, Strin ObjectMapper objectMapper = new ObjectMapper(); // fetch group masters List dataSyncGroupList = dataSyncGroupsRepo.findByDeleted(false); + logger.info("Fetched DataSyncGroups: {}", + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(dataSyncGroupList)); logger.debug("Fetched DataSyncGroups: {}", objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(dataSyncGroupList)); for (DataSyncGroups dataSyncGroups : dataSyncGroupList) { int groupId = dataSyncGroups.getSyncTableGroupID(); List syncUtilityClassList = getVanAndServerColumns(groupId); + // INFO log with groupId and full list + logger.info("Group ID: {} -> SyncUtilityClassList: {}", + groupId, + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(syncUtilityClassList)); logger.debug("Fetched SyncUtilityClass for groupId {}: {}", groupId, objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(syncUtilityClassList)); List> syncData; @@ -162,7 +168,6 @@ private String startDataSync(int vanID, String user, String Authorization, Strin logger.info("Starting batch sync for schema: {}, table: {} with {} full batches and {} remainder", obj.getSchemaName(), obj.getTableName(), fullBatchCount, remainder); - for (int i = 0; i < fullBatchCount; i++) { syncDataBatch = getBatchOfAskedSizeDataToSync(syncData, startIndex, BATCH_SIZE); @@ -226,7 +231,7 @@ private String startDataSync(int vanID, String user, String Authorization, Strin Map response = new HashMap<>(); response.put("response", "Data sync failed"); response.put("groupsProgress", responseStatus); - objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(response); + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(response); return objectMapper.writerWithDefaultPrettyPrinter() .writeValueAsString(Collections.singletonMap("data", response)); } else { @@ -316,11 +321,11 @@ private List> getBatchOfAskedSizeDataToSync(List> dataToBesync, String user, String Authorization, String token) + String serverColumns, List> dataToBesync, String user, String Authorization, + String token) throws Exception { - + RestTemplate restTemplate = new RestTemplate(); - Integer facilityID = masterVanRepo.getFacilityID(vanID); @@ -340,17 +345,17 @@ public String syncDataToServer(int vanID, String schemaName, String tableName, S dataMap.put("facilityID", facilityID); String requestOBJ = gson.toJson(dataMap); - HttpEntity request = RestTemplateUtil.createRequestEntity(requestOBJ, Authorization,"datasync"); + HttpEntity request = RestTemplateUtil.createRequestEntity(requestOBJ, Authorization, "datasync"); ResponseEntity response = restTemplate.exchange(dataSyncUploadUrl, HttpMethod.POST, request, String.class); - + int i = 0; if (response != null && response.hasBody()) { JSONObject obj = new JSONObject(response.getBody()); if (obj != null && obj.has("statusCode") && obj.getInt("statusCode") == 200) { logger.info("Check datasync"); StringBuilder vanSerialNos = getVanSerialNoListForSyncedData(vanAutoIncColumnName, dataToBesync); - logger.info("Van serial no from response="+vanSerialNos); + logger.info("Van serial no from response=" + vanSerialNos); i = dataSyncRepository.updateProcessedFlagInVan(schemaName, tableName, vanSerialNos, vanAutoIncColumnName, user); } @@ -372,8 +377,8 @@ public StringBuilder getVanSerialNoListForSyncedData(String vanAutoIncColumnName List> dataToBesync) throws Exception { // comma separated van serial no StringBuilder vanSerialNos = new StringBuilder(); -logger.info("Data to be synced: {}", dataToBesync); -logger.info("vanAutoIncColumnName: {}", vanAutoIncColumnName); + logger.info("Data to be synced: {}", dataToBesync); + logger.info("vanAutoIncColumnName: {}", vanAutoIncColumnName); int pointer1 = 0; for (Map map : dataToBesync) { if (pointer1 == dataToBesync.size() - 1) From e50abffdca9049613df8e097975e5edafb90e32e Mon Sep 17 00:00:00 2001 From: Vanitha Date: Thu, 14 Aug 2025 07:22:36 +0530 Subject: [PATCH 24/24] fix: clean the code --- .../dataSyncActivity/DataSyncRepository.java | 3 +- .../UploadDataToServerImpl.java | 17 +- .../DataSyncRepositoryCentral.java | 21 +- .../GetDataFromVanAndSyncToDBImpl.java | 339 +----------------- 4 files changed, 9 insertions(+), 371 deletions(-) diff --git a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java index 5526ce1c..f7a55d4a 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java @@ -104,8 +104,7 @@ public int updateProcessedFlagInVan(String schemaName, String tableName, StringB String query = ""; logger.info("Updating processed flag in table: " + tableName + " for vanSerialNos: " + vanSerialNos); - logger.info("autoIncreamentColumn: " + autoIncreamentColumn); - + if (tableName != null && tableName.toLowerCase().equals("i_ben_flow_outreach")) { query = "UPDATE " + schemaName + "." + tableName + " SET created_date = ? , processed = 'P', SyncedDate = ?, Syncedby = ? " diff --git a/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java index 236c4a62..51d8a32b 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java @@ -136,17 +136,11 @@ private String startDataSync(int vanID, String user, String Authorization, Strin ObjectMapper objectMapper = new ObjectMapper(); // fetch group masters List dataSyncGroupList = dataSyncGroupsRepo.findByDeleted(false); - logger.info("Fetched DataSyncGroups: {}", - objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(dataSyncGroupList)); logger.debug("Fetched DataSyncGroups: {}", objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(dataSyncGroupList)); for (DataSyncGroups dataSyncGroups : dataSyncGroupList) { int groupId = dataSyncGroups.getSyncTableGroupID(); List syncUtilityClassList = getVanAndServerColumns(groupId); - // INFO log with groupId and full list - logger.info("Group ID: {} -> SyncUtilityClassList: {}", - groupId, - objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(syncUtilityClassList)); logger.debug("Fetched SyncUtilityClass for groupId {}: {}", groupId, objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(syncUtilityClassList)); List> syncData; @@ -168,6 +162,7 @@ private String startDataSync(int vanID, String user, String Authorization, Strin logger.info("Starting batch sync for schema: {}, table: {} with {} full batches and {} remainder", obj.getSchemaName(), obj.getTableName(), fullBatchCount, remainder); + for (int i = 0; i < fullBatchCount; i++) { syncDataBatch = getBatchOfAskedSizeDataToSync(syncData, startIndex, BATCH_SIZE); @@ -280,6 +275,7 @@ public List getVanAndServerColumnList(Integer groupID) throws private List> getDataToSync(String schemaName, String tableName, String columnNames) throws Exception { + logger.info("Fetching data to sync for schema: {}, table: {}, columns: {}", schemaName, tableName, columnNames); List> resultSetList = dataSyncRepository.getDataForGivenSchemaAndTable(schemaName, tableName, columnNames); if (resultSetList != null) { @@ -353,9 +349,8 @@ public String syncDataToServer(int vanID, String schemaName, String tableName, S if (response != null && response.hasBody()) { JSONObject obj = new JSONObject(response.getBody()); if (obj != null && obj.has("statusCode") && obj.getInt("statusCode") == 200) { - logger.info("Check datasync"); StringBuilder vanSerialNos = getVanSerialNoListForSyncedData(vanAutoIncColumnName, dataToBesync); - logger.info("Van serial no from response=" + vanSerialNos); + i = dataSyncRepository.updateProcessedFlagInVan(schemaName, tableName, vanSerialNos, vanAutoIncColumnName, user); } @@ -377,8 +372,7 @@ public StringBuilder getVanSerialNoListForSyncedData(String vanAutoIncColumnName List> dataToBesync) throws Exception { // comma separated van serial no StringBuilder vanSerialNos = new StringBuilder(); - logger.info("Data to be synced: {}", dataToBesync); - logger.info("vanAutoIncColumnName: {}", vanAutoIncColumnName); + int pointer1 = 0; for (Map map : dataToBesync) { if (pointer1 == dataToBesync.size() - 1) @@ -388,7 +382,6 @@ public StringBuilder getVanSerialNoListForSyncedData(String vanAutoIncColumnName pointer1++; } - logger.info("Van Serial Nos: {}", vanSerialNos); return vanSerialNos; } @@ -400,4 +393,4 @@ public String getDataSyncGroupDetails() { return null; } -} \ No newline at end of file +} diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java index 00e0d305..6dba4611 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java @@ -87,19 +87,7 @@ private boolean isValidTableName(String tableName) { return VALID_TABLES.contains(tableName.toLowerCase()); } - // private boolean isValidColumnNamesList(String columnNames) { - // if (columnNames == null || columnNames.trim().isEmpty()) { - // return false; - // } - // for (String col : columnNames.split(",")) { - // if (!isValidDatabaseIdentifierCharacter(col.trim())) { - // return false; - // } - // } - // return true; - // } - -private boolean isValidColumnNamesList(String columnNames) { + private boolean isValidColumnNamesList(String columnNames) { if (columnNames == null || columnNames.trim().isEmpty()) { return false; } @@ -126,12 +114,7 @@ private boolean isValidColumnNamesList(String columnNames) { public int checkRecordIsAlreadyPresentOrNot(String schemaName, String tableName, String vanSerialNo, String vanID, String vanAutoIncColumnName, int syncFacilityID) { - logger.info("From checks records exists="+tableName); - logger.info("Van Auto Increment Column Name: {}", vanAutoIncColumnName); - logger.info("Van Serial No: {}", vanSerialNo); - logger.info("Van ID: {}", vanID); - - + jdbcTemplate = getJdbcTemplate(); List params = new ArrayList<>(); diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index ca16f704..fcc68fd3 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -113,30 +113,13 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E return "Sync failed for m_beneficiaryregidmapping."; } } - // else if ("i_beneficiarydetails".equalsIgnoreCase(syncTableName)) { - // String result = - // update_I_BeneficiaryDetails_for_processed_in_batches(syncUploadDataDigester); - // if ("data sync passed".equals(result)) { - // return "Sync successful for i_beneficiarydetails."; - // } else { - // logger.error("Sync failed for i_beneficiarydetails: {}", result); - // return "Sync failed for i_beneficiarydetails."; - // } - // } else { - // Determine the group for the current table or iterate through all if no - // specific table is given boolean syncSuccess = true; String errorMessage = ""; - - // If a specific table is provided in the request, try to find its group and - // sync only that table. - // Otherwise, iterate through all defined groups. if (syncTableName != null && !syncTableName.isEmpty()) { boolean foundInGroup = false; for (Map map : dataToBesync) { - // if (entry.getValue().contains(syncTableName.toLowerCase())) { if (map.get("tableName") != null && map.get("tableName").toString().equalsIgnoreCase(syncTableName)) { syncSuccess = syncTablesInGroup(syncUploadDataDigester.getSchemaName(), syncTableName, @@ -152,11 +135,9 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E } } else { - logger.info("No specific table provided. Attempting to sync all tables group by group."); for (Map.Entry> entry : TABLE_GROUPS.entrySet()) { Integer groupId = entry.getKey(); List tablesInGroup = entry.getValue(); - logger.info("Starting sync for Group {}", groupId); for (String table : tablesInGroup) { try { @@ -177,7 +158,6 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E + e.getMessage() + ". "; logger.error("Exception during sync for table '{}' in Group {}: {}", table, groupId, e.getMessage(), e); - // Continue to attempt other tables } } } @@ -193,10 +173,6 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E private boolean syncTablesInGroup(String schemaName, String currentTableName, SyncUploadDataDigester originalDigester) { - logger.info("Table name from sync tables in group: {}", currentTableName); - logger.info("Van inc =", originalDigester.getVanAutoIncColumnName()); - logger.info("Table data=" + originalDigester.getSyncData()); - SyncUploadDataDigester tableSpecificDigester = new SyncUploadDataDigester(); tableSpecificDigester.setSchemaName(schemaName); tableSpecificDigester.setTableName(currentTableName); @@ -342,10 +318,6 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig Integer facilityIDFromDigester = syncUploadDataDigester.getFacilityID(); String serverColumns = syncUploadDataDigester.getServerColumns(); - logger.info("Syncing data for table: {}", syncTableName); - logger.info("column name=" + serverColumns); - logger.info("Van Auto Increment Column Name: {}", vanAutoIncColumnName); - List serverColumnsList = Arrays.asList(serverColumns.split(",")); for (Map map : dataToBesync) { @@ -451,13 +423,9 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig } Object[] objArr = currentRecordValues.toArray(); - logger.info("Object array for sync: {}", Arrays.toString(objArr)); - if (recordCheck == 0) { - logger.info("Sync table name", syncTableName); syncDataListInsert.add(objArr); } else { - logger.info("Sync table name else", syncTableName); // For update, append the WHERE clause parameters at the end of the array List updateParams = new ArrayList<>(Arrays.asList(objArr)); updateParams.add(String.valueOf(vanSerialNo)); @@ -477,10 +445,8 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig boolean insertSuccess = true; boolean updateSuccess = true; - logger.info("sync data for insert: {}", syncDataListInsert); if (!syncDataListInsert.isEmpty()) { String queryInsert = getQueryToInsertDataToServerDB(schemaName, syncTableName, serverColumns); - logger.info("queryInsert={}", queryInsert); try { int[] i = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, @@ -519,237 +485,6 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig } return insertSuccess && updateSuccess; } - // private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDigester) { - // List> dataToBesync = syncUploadDataDigester.getSyncData(); - // List syncDataListInsert = new ArrayList<>(); - // List syncDataListUpdate = new ArrayList<>(); - - // if (dataToBesync == null || dataToBesync.isEmpty()) { - // logger.info("No data to sync for table: {}", syncUploadDataDigester.getTableName()); - // return true; // Nothing to sync, consider it a success - // } - - // String syncTableName = syncUploadDataDigester.getTableName(); - // String vanAutoIncColumnName = syncUploadDataDigester.getVanAutoIncColumnName(); - // String schemaName = syncUploadDataDigester.getSchemaName(); - // Integer facilityIDFromDigester = syncUploadDataDigester.getFacilityID(); - // logger.info("Syncing data for table: {}", syncTableName); - // logger.info("column name=" + syncUploadDataDigester.getServerColumns()); - // logger.info("Van Auto Increment Column Name: {}", vanAutoIncColumnName); - // for (Map map : dataToBesync) { - // String vanSerialNo = String.valueOf(map.get(vanAutoIncColumnName)); - // String vanID = String.valueOf(map.get("VanID")); - // int syncFacilityID = 0; - - // // Update SyncedBy and SyncedDate in the xmap itself before processing - // map.put("SyncedBy", syncUploadDataDigester.getSyncedBy()); - // map.put("SyncedDate", String.valueOf(LocalDateTime.now())); // Ensure column name matches DB - // // if (map.get("CreatedDate") == null || map.get("created_date") == null) { - // // logger.info("CreatedDate was null for table: " + syncTableName + ", inserting current time"); - // // if (map.get("CreatedDate") == null) - // // map.put("CreatedDate", String.valueOf(LocalDateTime.now())); - // // if (map.get("created_date") == null) - // // map.put("created_date", String.valueOf(LocalDateTime.now())); - // // } - // // Facility ID processing - // if (facilityIDFromDigester != null) { - // // Determine the 'Processed' status based on facility ID for specific tables - // switch (syncTableName.toLowerCase()) { - // case "t_indent": - // case "t_indentorder": { - // if (map.containsKey("FromFacilityID") && map.get("FromFacilityID") instanceof Double) { - // Double fromFacilityID = (Double) map.get("FromFacilityID"); - // if (fromFacilityID.intValue() == facilityIDFromDigester) { - // map.put("Processed", "P"); - // } - // } - // break; - // } - // case "t_indentissue": { - // if (map.containsKey("ToFacilityID") && map.get("ToFacilityID") instanceof Double) { - // Double toFacilityID = (Double) map.get("ToFacilityID"); - // if (toFacilityID.intValue() == facilityIDFromDigester) { - // map.put("Processed", "P"); - // } - // } - // break; - // } - // case "t_stocktransfer": { - // if (map.containsKey("TransferToFacilityID") - // && map.get("TransferToFacilityID") instanceof Double) { - // Double transferToFacilityID = (Double) map.get("TransferToFacilityID"); - // if (transferToFacilityID.intValue() == facilityIDFromDigester) { - // map.put("Processed", "P"); - // } - // } - // break; - // } - // case "t_itemstockentry": { - // if (map.containsKey("FacilityID") && map.get("FacilityID") instanceof Double) { - // Double mapFacilityID = (Double) map.get("FacilityID"); - // if (mapFacilityID.intValue() == facilityIDFromDigester) { - // map.put("Processed", "P"); - // } - // } - // break; - // } - // default: - // // No specific facility ID logic for other tables, maintain existing 'Processed' - // // status or default - // break; - // } - // } - - // // Extract SyncFacilityID for checkRecordIsAlreadyPresentOrNot - // if (map.containsKey("SyncFacilityID") && map.get("SyncFacilityID") instanceof Integer) { - // syncFacilityID = (Integer) map.get("SyncFacilityID"); - // } else if (map.containsKey("SyncFacilityID") && map.get("SyncFacilityID") instanceof Double) { - // syncFacilityID = ((Double) map.get("SyncFacilityID")).intValue(); - // } - - // int recordCheck; - // try { - // recordCheck = dataSyncRepositoryCentral.checkRecordIsAlreadyPresentOrNot( - // schemaName, syncTableName, vanSerialNo, vanID, vanAutoIncColumnName, syncFacilityID); - // } catch (Exception e) { - // logger.error("Error checking record existence for table {}: VanSerialNo={}, VanID={}. Error: {}", - // syncTableName, vanSerialNo, vanID, e.getMessage(), e); - // return false; // Critical error, stop sync for this table - // } - - // // Prepare Object array for insert/update - // Object[] objArr; - // List serverColumnsList = - // Arrays.asList(syncUploadDataDigester.getServerColumns().split(",")); - // // List cleanedColumnsList = Arrays - // // .asList(cleanColumnNames(syncUploadDataDigester.getServerColumns()).split(",")); - - // List currentRecordValues = new ArrayList<>(); - - // // for (String column : cleanedColumnsList) { - // // Object value = map.get(column.trim()); - // // if (value instanceof Boolean) { - // // currentRecordValues.add(value); - // // } else if (value != null) { - // // // Handle date conversion for known date columns - // // if (isDateColumn(column.trim()) && value instanceof String) { - // // String formatted = formatDateForMySQL((String) value); - // // currentRecordValues.add(formatted); - // // } else { - // // currentRecordValues.add(String.valueOf(value)); - // // } - // // } else { - // // currentRecordValues.add(null); - // // } - // // } - // for (String column : serverColumnsList) { - // Object value = map.get(column.trim()); - // // Handle boolean conversion if necessary, though String.valueOf should - // // generally work for prepared statements - // if (value instanceof Boolean) { - // currentRecordValues.add(value); - // } else if (value != null) { - // currentRecordValues.add(String.valueOf(value)); - // } else { - // currentRecordValues.add(null); - // } - // } - - // objArr = currentRecordValues.toArray(); - // logger.info("Object array for sync: {}", Arrays.toString(objArr)); - - // if (recordCheck == 0) { - // logger.info("Sync table name", syncTableName); - // syncDataListInsert.add(objArr); - // } else { - // logger.info("Sync table name else", syncTableName); - // // For update, append the WHERE clause parameters at the end of the array - // List updateParams = new ArrayList<>(Arrays.asList(objArr)); - // updateParams.add(String.valueOf(vanSerialNo)); - - // if (Arrays.asList("t_patientissue", "t_physicalstockentry", "t_stockadjustment", "t_saitemmapping", - // "t_stocktransfer", "t_patientreturn", "t_facilityconsumption", "t_indent", - // "t_indentorder", "t_indentissue", "t_itemstockentry", "t_itemstockexit") - // .contains(syncTableName.toLowerCase()) && map.containsKey("SyncFacilityID")) { - // updateParams.add(String.valueOf(map.get("SyncFacilityID"))); - // } else { - // updateParams.add(String.valueOf(vanID)); - // } - // syncDataListUpdate.add(updateParams.toArray()); - // } - // } - - // boolean insertSuccess = true; - // boolean updateSuccess = true; - - // logger.info("sync data for insert: {}", syncDataListInsert); - // if (!syncDataListInsert.isEmpty()) { - // String queryInsert = getQueryToInsertDataToServerDB(schemaName, syncTableName, - // syncUploadDataDigester.getServerColumns()); - // logger.info("queryInsert", queryInsert); - // if ("i_beneficiaryaddress".equalsIgnoreCase(syncTableName)) { - // logger.info("sync data for insert for address: {}", syncDataListInsert); - // } - - // try { - // int[] i = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, - // syncUploadDataDigester.getServerColumns(), queryInsert, syncDataListInsert); - // if (i.length != syncDataListInsert.size()) { - // insertSuccess = false; - // logger.error("Partial insert for table {}. Expected {} inserts, got {}. Failed records: {}", - // syncTableName, syncDataListInsert.size(), i.length, - // getFailedRecords(i, syncDataListInsert)); - // } else { - // logger.info("Successfully inserted {} records into table {}.", i.length, syncTableName); - // } - // } catch (Exception e) { - // insertSuccess = false; - // logger.error("Exception during insert for table {}: {}", syncTableName, e.getMessage(), e); - // } - // } - - // if (!syncDataListUpdate.isEmpty()) { - // String queryUpdate = getQueryToUpdateDataToServerDB(schemaName, syncUploadDataDigester.getServerColumns(), - // syncTableName); - // // Ensure the update query is correct and matches the expected format - // try { - // int[] j = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, - // SERVER_COLUMNS_NOT_REQUIRED, queryUpdate, syncDataListUpdate); - // if (j.length != syncDataListUpdate.size()) { - // updateSuccess = false; - // logger.error("Partial update for table {}. Expected {} updates, got {}. Failed records: {}", - // syncTableName, syncDataListUpdate.size(), j.length, - // getFailedRecords(j, syncDataListUpdate)); - // } else { - // logger.info("Successfully updated {} records in table {}.", j.length, syncTableName); - // } - // } catch (Exception e) { - // updateSuccess = false; - // logger.error("Exception during update for table {}: {}", syncTableName, e.getMessage(), e); - // } - // } - // return insertSuccess && updateSuccess; - // } - - // private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { - // String cleanedColumns = cleanColumnNames(serverColumns); - // String[] cleanedColumnsArr = cleanedColumns.split(","); - - // StringBuilder preparedStatementSetter = new StringBuilder(); - // for (int i = 0; i < cleanedColumnsArr.length; i++) { - // preparedStatementSetter.append("?"); - // if (i < cleanedColumnsArr.length - 1) { - // preparedStatementSetter.append(", "); - // } - // } - - // StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); - // queryBuilder.append(schemaName).append(".").append(tableName); - // queryBuilder.append("(").append(cleanedColumns).append(") VALUES (").append(preparedStatementSetter) - // .append(")"); - // return queryBuilder.toString(); - // } - private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { String[] columnsArr = null; @@ -774,7 +509,6 @@ private String getQueryToInsertDataToServerDB(String schemaName, String queryBuilder.append(") VALUES ("); queryBuilder.append(preparedStatementSetter); queryBuilder.append(")"); - logger.info("Query builder="+queryBuilder.toString()); return queryBuilder.toString(); } @@ -785,24 +519,6 @@ public String getQueryToUpdateDataToServerDB(String schemaName, String serverCol StringBuilder preparedStatementSetter = new StringBuilder(); - // if (columnsArr != null && columnsArr.length > 0) { - // for (int i = 0; i < columnsArr.length; i++) { - // String columnName = columnsArr[i].trim(); // ← NEW LINE - - // // Special handling for CreatedDate - use COALESCE to prevent NULL - // if (columnName.equalsIgnoreCase("CreatedDate")) { // ← NEW BLOCK - // preparedStatementSetter.append(columnName); - // preparedStatementSetter.append(" = COALESCE(?, CURRENT_TIMESTAMP)"); - // } else { - // preparedStatementSetter.append(columnName); - // preparedStatementSetter.append(" = ?"); - // } - - // if (i < columnsArr.length - 1) { - // preparedStatementSetter.append(", "); - // } - // } - // } StringBuilder queryBuilder = new StringBuilder(" UPDATE "); queryBuilder.append(schemaName).append(".").append(tableName); queryBuilder.append(" SET "); @@ -842,58 +558,5 @@ private String getFailedRecords(int[] results, List data) { return String.join("; ", failedRecordsInfo); } - // private String cleanColumnNames(String serverColumns) { - // // Remove all date_format(...) expressions and keep only the column name - // return serverColumns.replaceAll("date_format\\s*\\(\\s*([a-zA-Z0-9_]+)\\s*,\\s*'[^']*'\\s*\\)", "$1"); - // } - - // private boolean isDateColumn(String columnName) { - // // List all your date/datetime columns here - // return Arrays.asList("MarriageDate", "DOB", "CreatedDate", "LastModDate", "SyncedDate", "ReservedOn") - // .contains(columnName); - // } - - // private String formatDateForMySQL(String dateStr) { - // logger.info("Format date value=" + dateStr); - // if (dateStr == null || dateStr.isEmpty()) - // return null; - // // Try parsing with nanoseconds - // try { - // // Handles "2025-08-12T15:29:15.041257900" - // java.time.format.DateTimeFormatter nanoFormatter = java.time.format.DateTimeFormatter - // .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS"); - // LocalDateTime ldt = LocalDateTime.parse(dateStr, nanoFormatter); - // return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - // } catch (Exception ignore) { - // } - // // Try ISO_LOCAL_DATE_TIME (without nanos) - // try { - // LocalDateTime ldt = LocalDateTime.parse(dateStr); - // return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - // } catch (Exception ignore) { - // } - // // Try MySQL DATETIME format (already correct) - // if (dateStr.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}")) { - // return dateStr; - // } - // // Try parsing with other common formats - // try { - // java.time.format.DateTimeFormatter[] formatters = new java.time.format.DateTimeFormatter[] { - // java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"), - // java.time.format.DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"), - // java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd") - // }; - // for (java.time.format.DateTimeFormatter fmt : formatters) { - // try { - // LocalDateTime ldt = LocalDateTime.parse(dateStr, fmt); - // logger.info("Parsed date value=" + ldt); - // return ldt.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - // } catch (Exception ignore2) { - // } - // } - // } catch (Exception ignore3) { - // } - // // If all parsing fails, return null to avoid inserting invalid data - // return null; - // } + } \ No newline at end of file