package in.gov.chennaicorporation.gccoffice.school.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.sql.DataSource; import javax.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.dao.DataAccessException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @Service public class SchoolReportService { private JdbcTemplate jdbcTemplate; @Autowired public void setDataSourcemysql(@Qualifier("mysqlSchoolDataSource") DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } @Transactional public ResponseEntity getAEOList() { Map result = new HashMap<>(); String sql = "SELECT aeo_details_id, aeo_num, udise FROM aeo_details"; try { List> data = jdbcTemplate.queryForList(sql); result.put("Message", "Success"); result.put("data", data); return ResponseEntity.ok(result); } catch (Exception e) { e.printStackTrace(); result.put("Message", "Error"); result.put("Error", "Failed to fetch AEO List: " + e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result); } } @Transactional public ResponseEntity getAEOZone(String udise) { Map result = new HashMap<>(); String sql = "SELECT DISTINCT zone FROM school_list WHERE udise In(" + udise + ") ORDER BY zone ASC"; try { List data = jdbcTemplate.queryForList(sql, String.class); result.put("message", "Success"); result.put("data", data); return ResponseEntity.ok(result); } catch (DataAccessException e) { e.printStackTrace(); result.put("message", "Error"); result.put("Error", "Failed to Zone List: " + e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result); } } @Transactional public ResponseEntity getAEOWard(String udise, String zone) { Map result = new HashMap<>(); String sql = "SELECT DISTINCT division AS Ward FROM school_list WHERE udise In(" + udise + ") and zone = ? ORDER BY Ward ASC"; try { List data = jdbcTemplate.queryForList(sql, String.class, zone); result.put("message", "Success"); result.put("data", data); return ResponseEntity.ok(result); } catch (DataAccessException e) { e.printStackTrace(); result.put("message", "Error"); result.put("Error", "Failed to Ward List: " + e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result); } } @Transactional public ResponseEntity getAEOSchoolData(List udise, String zone, String ward) { Map response = new HashMap<>(); List> data = new ArrayList>(); if(udise==null || udise.isEmpty()) { udise=getUDISE(); } for(String udises:udise) { List school = getschoolId(udises, zone, ward); if(!school.isEmpty() && school!=null) { for(String sch:school) { //System.out.println("School_ID = "+sch); Map result = new HashMap<>(); Map report = getSchoolReport(sch); result.putAll(report); String num = (String) report.get("udise"); Map report1 = getSchoolReport1(sch); result.putAll(report1); int pending=0; for (Map.Entry entry : report1.entrySet()) { if(entry.getValue().toString().equalsIgnoreCase("Pending")) { ++pending; } } result.put("overall_status", pending==0 ? "Completed" : "Pending"); Map report2 = getAEO(num); result.putAll(report2); data.add(result); } response.put("message", "Success"); response.put("data", data); } } // System.out.println(data.get(0)); // System.out.println(data.get(1)); System.out.println(response.get("message")); // System.out.println(response.get("data")); return ResponseEntity.ok(response); } private List getUDISE() { String sql = "SELECT udise FROM aeo_details"; try { return jdbcTemplate.queryForList(sql, String.class); } catch (Exception e) { e.printStackTrace(); return List.of(); } } private Map getAEO(String num) { String sql = "SELECT aeo_num FROM aeo_details WHERE FIND_IN_SET(?, udise) > 0"; try { return jdbcTemplate.queryForMap(sql, num); } catch (Exception e) { e.printStackTrace(); return Map.of(); } } private Map getSchoolReport1(String sch) { String sql = "SELECT " + " CASE " + " WHEN EXISTS ( " + " SELECT 1 " + " FROM school_buildup_area sba " + " WHERE sba.school_id = ? " + " ) THEN 'Completed' " + " ELSE 'Pending' " + " END AS other_details, " + " CASE " + " WHEN EXISTS ( " + " SELECT 1 " + " FROM staff_strength_1 ss " + " WHERE ss.school_id = ? " + " ) THEN 'Completed' " + " ELSE 'Pending' " + " END AS staff_details, " + " CASE " + " WHEN EXISTS ( " + " SELECT 1 " + " FROM student_strength sts " + " WHERE sts.school_id = ? " + " ) THEN 'Completed' " + " ELSE 'Pending' " + " END AS students_details, " + " CASE " + " WHEN EXISTS ( " + " SELECT 1 " + " FROM playground pg " + " WHERE pg.school_id = ? " + " ) THEN 'Completed' " + " ELSE 'Pending' " + " END AS playground_details, " + " CASE " + " WHEN EXISTS (" + " SELECT 1 " + " FROM drinking_water dw " + " WHERE dw.school_id = ? " + " ) THEN 'Completed' " + " ELSE 'Pending' " + " END AS drinkingwater_details, " + " CASE " + " WHEN EXISTS ( " + " SELECT 1 " + " FROM toilet tot " + " WHERE tot.school_id = ? " + " ) THEN 'Completed' " + " ELSE 'Pending' " + " END AS toilet_details, " + " CASE " + " WHEN EXISTS ( " + " SELECT 1 " + " FROM kitchen kit " + " WHERE kit.school_id = ? " + " ) THEN 'Completed' " + " ELSE 'Pending' " + " END AS kitchen_details, " + " CASE " + " WHEN NOT EXISTS ( " + " SELECT 1 FROM buildings WHERE school_id = ? and is_active=1 and is_delete=0 " + " ) THEN 'Pending' " + " WHEN ( " + " SELECT COUNT(*) FROM buildings WHERE school_id = ? and is_active=1 and is_delete=0 " + " ) = ( " + " SELECT COUNT(DISTINCT rd.building_id) " + " FROM room_details rd " + " JOIN buildings b ON b.buildng_id = rd.building_id " + " WHERE b.school_id = ? and b.is_active=1 and b.is_delete=0 and rd.is_active=1 and rd.is_delete=0 " + " ) THEN 'Completed' " + " ELSE 'Partially Completed' " + "END AS buildings, " + "CASE " + " WHEN NOT EXISTS ( " + " SELECT 1 FROM room_details WHERE school_id = ? and is_active=1 and is_delete=0 " + " ) THEN 'Pending' " + " WHEN ( " + " SELECT COUNT(DISTINCT room_id) " + " FROM room_details " + " WHERE school_id = ? and is_active=1 and is_delete=0 " + " ) = ( " + " SELECT COUNT(DISTINCT rd.room_id) " + " FROM room_details rd " + " JOIN it_mapping im ON im.room_id = rd.room_id " + " JOIN electrical_mapping em ON em.room_id = rd.room_id " + " JOIN furniture_mapping fm ON fm.room_id = rd.room_id " + " WHERE rd.school_id = ? and rd.is_active=1 and rd.is_delete=0 " + " and im.is_active=1 and im.is_delete=0 and em.is_active=1 and em.is_delete=0 " + " and fm.is_active=1 and fm.is_delete=0 " + " AND (im.room_id IS NOT NULL OR em.room_id IS NOT NULL OR fm.room_id IS NOT NULL) " + " ) THEN 'Completed' " + " WHEN ( " + " SELECT COUNT(DISTINCT rd.room_id) " + " FROM room_details rd " + " JOIN it_mapping im ON im.room_id = rd.room_id " + " JOIN electrical_mapping em ON em.room_id = rd.room_id " + " JOIN furniture_mapping fm ON fm.room_id = rd.room_id " + " WHERE rd.school_id = ? and rd.is_active=1 and rd.is_delete=0 " + " and im.is_active=1 and im.is_delete=0 and em.is_active=1 and em.is_delete=0 " + " and fm.is_active=1 and fm.is_delete=0 " + " AND (im.room_id IS NOT NULL OR em.room_id IS NOT NULL OR fm.room_id IS NOT NULL) " + " ) > 0 THEN 'Partially Completed' " + " ELSE 'Pending' " + "END AS school_assets "; try { return jdbcTemplate.queryForMap(sql, sch, sch, sch, sch, sch, sch, sch, sch, sch, sch, sch, sch, sch, sch); } catch (Exception e) { e.printStackTrace(); return Map.of(); } } private Map getSchoolReport(String sch) { String sql = "SELECT id as school_id, zone, division, udise FROM school_list WHERE id = ?"; try { return jdbcTemplate.queryForMap(sql, sch); } catch (Exception e) { e.printStackTrace(); return Map.of(); } } private List getschoolId(String udise, String zone, String ward) { String sql = ""; if (zone != null && !zone.isEmpty() && ward != null && !ward.isEmpty()) { //System.out.println("check1"); sql = "SELECT id FROM school_list WHERE udise In(" + udise + ") and zone = ? and division = ?"; } else if (zone != null && !zone.isEmpty() && (ward == null || ward.isEmpty())) { sql = "SELECT id FROM school_list WHERE udise In(" + udise + ") and zone = ?"; } else if ((zone == null || zone.isEmpty()) && (ward == null || ward.isEmpty())) { sql = "SELECT id FROM school_list WHERE udise In(" + udise + ")"; } try { if (sql.contains("zone = ?") && sql.contains("division = ?")) { return jdbcTemplate.queryForList(sql, String.class, zone, ward); } else if (sql.contains("zone = ?")) { return jdbcTemplate.queryForList(sql, String.class, zone); } else { return jdbcTemplate.queryForList(sql, String.class); } } catch (DataAccessException e) { e.printStackTrace(); return List.of(); } } }