You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

229 lines
11 KiB

2 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
2 years ago
2 years ago
​
​
​
​
2 years ago
​
​
​
​
​
​
2 years ago
2 years ago
2 years ago
​
2 years ago
​
2 years ago
2 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
2 years ago
2 years ago
2 years ago
2 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
2 years ago
​
​
  1. package in.gov.chennaicorporation.gccoffice.pensioner.scheduler;
  2. import java.time.LocalDate;
  3. import java.time.Period;
  4. import java.time.format.DateTimeFormatter;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.jdbc.core.JdbcTemplate;
  11. import org.springframework.scheduling.annotation.Scheduled;
  12. import org.springframework.stereotype.Component;
  13. import in.gov.chennaicorporation.gccoffice.pensioner.service.PendencyAutoConversionService;
  14. import in.gov.chennaicorporation.gccoffice.pensioner.service.ReceivedDeptProvisionalService;
  15. @Component
  16. public class PendencyAutoConversionScheduler {
  17. @Autowired
  18. private PendencyAutoConversionService pendencyAutoConversionService;
  19. @Autowired
  20. public ReceivedDeptProvisionalService ReceivedDeptProvisionalservice;
  21. /**
  22. * Scheduled method that runs every day 3.00am and 4.00 am to process auto-conversion tasks.
  23. */
  24. @Scheduled(cron = "0 0 3 * * ?", zone = "Asia/Kolkata")// Runs every 3.00 am
  25. public void executeAutoConversion() {
  26. try {
  27. System.out.println(" Running scheduled auto-conversion task... at 3.00 am");
  28. // Step 1: Fetch temp IDs that need processing
  29. List<Map<String, Object>> tempIds = pendencyAutoConversionService.getConvertingTempIds();
  30. if (tempIds == null || tempIds.isEmpty()) {
  31. System.out.println(" No records found for auto-conversion.");
  32. return;
  33. }
  34. System.out.println(" Found " + tempIds.size() + " records for processing.");
  35. // Step 2: Process each tempId
  36. for (Map<String, Object> tempIdMap : tempIds) {
  37. String tempId = tempIdMap.get("temp_id") != null ? tempIdMap.get("temp_id").toString() : null;
  38. if (tempId == null || tempId.trim().isEmpty()) {
  39. System.out.println(" Skipping empty temp_id.");
  40. continue;
  41. }
  42. System.out.println(" Processing tempId: " + tempId);
  43. // Step 3: Call service method to process auto-conversion
  44. boolean success = pendencyAutoConversionService.processAutoConversionForTempId(tempId);
  45. if (success) {
  46. System.out.println(" Auto-conversion completed for tempId: " + tempId);
  47. } else {
  48. System.out.println(" Auto-conversion failed for tempId: " + tempId);
  49. }
  50. }
  51. } catch (Exception e) {
  52. System.err.println(" Error during auto-conversion task: " + e.getMessage());
  53. e.printStackTrace();
  54. }
  55. }
  56. @Scheduled(cron = "0 0 4 * * ?", zone = "Asia/Kolkata") // Runs every day 4.00am
  57. public void scheduledPendencyUpdate() {
  58. System.out.println("Scheduled Task Started 4.00 am: Updating Pensioner Pending Duration");
  59. Map<String, Object> result = GetRecordsUpdatePendencyDuration();
  60. System.out.println("Scheduled Task Completed: " + result);
  61. // Fetch the pending pensioners count after the update
  62. int pendingCount = pendencyAutoConversionService.getPendingPensionersCount();
  63. System.out.println("Total pending pensioners after update: " + pendingCount);
  64. }
  65. public Map<String, Object> GetRecordsUpdatePendencyDuration() {
  66. Map<String, Object> response = new HashMap<>();
  67. // Lists to store tempIds based on update success or failure
  68. List<String> successfulUpdates = new ArrayList<>();
  69. List<String> failedUpdates = new ArrayList<>();
  70. List<Map<String, Object>> details = pendencyAutoConversionService.getPendencyUpdatingDuration();
  71. List<Map<String, Object>> prdetails = pendencyAutoConversionService.getProvisionalNoPendingDuration();
  72. if(!prdetails.isEmpty()) {
  73. for (Map<String, Object> prdetail : prdetails) {
  74. String tempId1 = prdetail.get("temp_id") != null ? String.valueOf(prdetail.get("temp_id")) : null;
  75. String retirementDateStr1 = prdetail.get("retirement_date") != null ? String.valueOf(prdetail.get("retirement_date")) : null;
  76. try {
  77. // Convert retirement_date to LocalDate
  78. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  79. LocalDate startDate1 = LocalDate.parse(retirementDateStr1, formatter);
  80. LocalDate endDate1 = LocalDate.now();
  81. System.out.printf("Processing Temp ID: %s | Start Date: %s | End Date: %s%n", tempId1, startDate1, endDate1);
  82. String updateDuration1 = pendencyAutoConversionService.calculatePendingDuration(startDate1, endDate1);
  83. System.out.println("Updated Duration: " + updateDuration1);
  84. boolean isUpdated1 = pendencyAutoConversionService.updatePendingDurationforPR(updateDuration1, tempId1);
  85. if (isUpdated1) {
  86. successfulUpdates.add(tempId1);
  87. String filemovedby=pendencyAutoConversionService.getFileMovedByTempId(tempId1);
  88. List<Map<String, Object>> empDetails=pendencyAutoConversionService.fetchEmployeeDetails(tempId1);
  89. boolean historySaved = ReceivedDeptProvisionalservice.savehistory(empDetails, filemovedby);
  90. if (!historySaved) {
  91. System.out.println("Failed to save prno history for tempId: " + tempId1);
  92. }
  93. } else {
  94. failedUpdates.add(tempId1);
  95. }
  96. }
  97. catch (Exception e) {
  98. System.err.println("Error parsing retirement_date for tempId " + tempId1 + ": " + e.getMessage());
  99. }
  100. }
  101. }
  102. if(!details.isEmpty()) {
  103. for (Map<String, Object> tempIdMap : details) {
  104. String tempId = tempIdMap.get("temp_id") != null ? String.valueOf(tempIdMap.get("temp_id")) : null;
  105. String retirementDateStr = tempIdMap.get("retirement_date") != null ? String.valueOf(tempIdMap.get("retirement_date")) : null;
  106. String serviceDeathDate = tempIdMap.get("service_death") != null ? String.valueOf(tempIdMap.get("service_death")) : null;
  107. // Corrected parsing for file_category
  108. int fileCat = tempIdMap.get("file_category") != null ? Integer.parseInt(tempIdMap.get("file_category").toString()) : null;
  109. if(fileCat==3 || fileCat==5) {
  110. if (retirementDateStr != null && !retirementDateStr.trim().isEmpty()) {
  111. try {
  112. // Convert retirement_date to LocalDate
  113. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  114. LocalDate startDate = LocalDate.parse(retirementDateStr, formatter);
  115. LocalDate endDate = LocalDate.now(); // Current date
  116. System.out.printf("Processing Temp ID: %s | Start Date: %s | End Date: %s%n", tempId, startDate, endDate);
  117. // Calculate duration
  118. String updateDuration = pendencyAutoConversionService.calculatePendingDuration(startDate, endDate);
  119. System.out.println("Updated Duration: " + updateDuration);
  120. // Update the record in the database
  121. boolean isUpdated = pendencyAutoConversionService.updatePendingDuration(updateDuration, tempId);
  122. // Add tempId to the respective list
  123. if (isUpdated) {
  124. successfulUpdates.add(tempId);
  125. } else {
  126. failedUpdates.add(tempId);
  127. }
  128. } catch (Exception e) {
  129. System.err.println("Error parsing retirement_date for tempId " + tempId + ": " + e.getMessage());
  130. }
  131. } else {
  132. System.out.println("Skipping: Retirement date is null or empty for tempId: " + tempId);
  133. }
  134. }
  135. if(fileCat==2) {
  136. if (serviceDeathDate != null && !serviceDeathDate.trim().isEmpty()) {
  137. try {
  138. // Convert retirement_date to LocalDate
  139. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  140. LocalDate startDate = LocalDate.parse(serviceDeathDate, formatter);
  141. LocalDate endDate = LocalDate.now(); // Current date
  142. System.out.printf("Processing Temp ID: %s | Start Date: %s | End Date: %s%n", tempId, startDate, endDate);
  143. // Calculate duration
  144. String updateDuration = pendencyAutoConversionService.calculatePendingDuration(startDate, endDate);
  145. System.out.println("Updated Duration: " + updateDuration);
  146. // Update the record in the database
  147. boolean isUpdated = pendencyAutoConversionService.updatePendingDuration(updateDuration, tempId);
  148. // Add tempId to the respective list
  149. if (isUpdated) {
  150. successfulUpdates.add(tempId);
  151. } else {
  152. failedUpdates.add(tempId);
  153. }
  154. } catch (Exception e) {
  155. System.err.println("Error parsing service death date for tempId " + tempId + ": " + e.getMessage());
  156. }
  157. } else {
  158. System.out.println("Skipping: service death date is null or empty for tempId: " + tempId);
  159. }
  160. }
  161. }
  162. response.put("status", "Success");
  163. response.put("message", "Pendency duration updated");
  164. response.put("total_records_processed", details.size());
  165. response.put("successful_updates_count", successfulUpdates.size());
  166. response.put("failed_updates_count", failedUpdates.size());
  167. response.put("successful_updates", successfulUpdates);
  168. response.put("failed_updates", failedUpdates);
  169. }
  170. response.put("status", "No Data");
  171. response.put("message", "No Updation in Pending Duration");
  172. return response;
  173. }
  174. }