diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/DataSourceConfig.java b/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/DataSourceConfig.java index daa4be0..4d36145 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/DataSourceConfig.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/DataSourceConfig.java @@ -30,8 +30,9 @@ public class DataSourceConfig { // private static String dbpassword = "gccroot"; // AWS -// private static String host = "gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306"; -// private static String dbpassword = "gcc-facial-password"; + // private static String host = + // "gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306"; + // private static String dbpassword = "gcc-facial-password"; ////////////////////////////// (For GCC APP) //////////////////////// @Configuration @@ -453,6 +454,17 @@ public class DataSourceConfig { return dataSource; } + /////////////// Shelter ///////////////////// + @Bean(name = "mysqlShelterDataSource") + public DataSource mysqlShelterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + dataSource.setUrl("jdbc:mysql://" + host + "/gcc_shelter"); + dataSource.setUsername("root"); + dataSource.setPassword(dbpassword); + return dataSource; + } + ////////////////////////////// (For GCC USER) //////////////////////// @Bean(name = "mysqlGCCUserDataSource") public DataSource mysqlGCCUserDataSource() { diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Controller/MainController.java b/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Controller/MainController.java index be54f66..afd965b 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Controller/MainController.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Controller/MainController.java @@ -17,7 +17,7 @@ public class MainController { public String ShelterList() { return "modules/shelterinspection/shelterlist"; } - + @GetMapping("/visitlist") public String VisitList() { return "modules/shelterinspection/visitlist"; @@ -28,6 +28,14 @@ public class MainController { return "modules/shelterinspection/complaintlist"; } - + @GetMapping("/smcmeetinglist") + public String SmcMeetinglist() { + return "modules/shelterinspection/smcmeetinglist"; + } + + @GetMapping("/resucelist") + public String Resucelist() { + return "modules/shelterinspection/resucelist"; + } } diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Controller/ShelterInspectionController.java b/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Controller/ShelterInspectionController.java index 2ce6dd9..18654d0 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Controller/ShelterInspectionController.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Controller/ShelterInspectionController.java @@ -19,7 +19,7 @@ import org.springframework.web.client.RestTemplate; import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; import in.gov.chennaicorporation.gccoffice.shelterinspection.Service.MasterShelterService; import in.gov.chennaicorporation.gccoffice.shelterinspection.Service.ShelterInspectionService; - +import in.gov.chennaicorporation.gccoffice.shelterinspection.Service.ShelterService; @RestController @RequestMapping("/gcc/api/shelterinspection") @@ -27,21 +27,24 @@ public class ShelterInspectionController { @Autowired private ShelterInspectionService shelterApiService; - + + @Autowired + private ShelterService shelterService1; + @Autowired private MasterShelterService masterShelterService; - - private final RestTemplate restTemplate; - private final AppConfig appConfig; - - @Autowired + + private final RestTemplate restTemplate; + private final AppConfig appConfig; + + @Autowired public ShelterInspectionController(RestTemplate restTemplate, AppConfig appConfig) { this.restTemplate = restTemplate; this.appConfig = appConfig; } - - //private final RestTemplate restTemplate = new RestTemplate(); - + + // private final RestTemplate restTemplate = new RestTemplate(); + @GetMapping("/Sheltercount") public ResponseEntity> getTotalCount() { @@ -52,245 +55,200 @@ public class ShelterInspectionController { return ResponseEntity.ok(response); } - + @GetMapping("/dashboard") - public Map dashboard( + public Map dashboard( @RequestParam String type, - @RequestParam String value){ + @RequestParam String value) { - return shelterApiService.getDashboardData(type,value); + return shelterApiService.getDashboardData(type, value); } - + @GetMapping("/top5Shelters") - public List> top5Shelters( + public List> top5Shelters( @RequestParam String type, - @RequestParam String value){ + @RequestParam String value) { - return shelterApiService.getTop5Shelters(type,value); + return shelterApiService.getTop5Shelters(type, value); } - + @GetMapping("/regionSummary") - public List> regionSummary( + public List> regionSummary( @RequestParam String type, - @RequestParam String value){ + @RequestParam String value) { - return shelterApiService.getRegionSummary(type,value); + return shelterApiService.getRegionSummary(type, value); } - + @GetMapping("/fundReceivedSummary") - public List> fundSummary( + public List> fundSummary( @RequestParam String type, - @RequestParam String value){ + @RequestParam String value) { - return shelterApiService.getFundReceivedSummary(type,value); + return shelterApiService.getFundReceivedSummary(type, value); } - + @GetMapping("/fundReceivedShelterDetails") public List> fundReceivedShelterDetails( @RequestParam String type, @RequestParam String value) { - return shelterApiService.getFundReceivedShelterDetails( type, value); + return shelterApiService.getFundReceivedShelterDetails(type, value); } - + @GetMapping("/monthlyTrends") - public List> monthlyTrends( + public List> monthlyTrends( @RequestParam String type, - @RequestParam String value){ + @RequestParam String value) { - return shelterApiService.getMonthlyTrends(type,value); + return shelterApiService.getMonthlyTrends(type, value); } - + @GetMapping("/weeklyVisits") - public List> weeklyVisits( + public List> weeklyVisits( @RequestParam String type, - @RequestParam String value){ - - List> results = shelterApiService.getWeeklyVisits(type,value); - System.out.println("Weekly Visits Results:" +results); + @RequestParam String value) { + + List> results = shelterApiService.getWeeklyVisits(type, value); + System.out.println("Weekly Visits Results:" + results); return results; } - + @GetMapping("/latestVisitShelters") - public List> latestVisitShelters( + public List> latestVisitShelters( @RequestParam String type, - @RequestParam String value){ + @RequestParam String value) { - return shelterApiService.getLatestVisitShelters(type,value); + return shelterApiService.getLatestVisitShelters(type, value); } - - + @GetMapping("/shelterList") - public List> shelterList( + public List> shelterList( @RequestParam(required = false) String zone, @RequestParam(required = false) String category) { return shelterApiService.getShelterList(zone, category); } - + @GetMapping("/visitList") - public List> visitList( - @RequestParam(required=false) String fromDate, - @RequestParam(required=false) String toDate, - @RequestParam(required=false) String zone, - @RequestParam(required=false) String cdo){ + public List> visitList( + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate, + @RequestParam(required = false) String zone, + @RequestParam(required = false) String cdo) { - return shelterApiService.getVisitList( fromDate, toDate, zone, cdo); + return shelterApiService.getVisitList(fromDate, toDate, zone, cdo); } - + @GetMapping("/visitDetails") - public Map visitDetails( - @RequestParam String surveyId){ + public Map visitDetails( + @RequestParam String surveyId) { return shelterApiService.getVisitDetails(surveyId); } - + @GetMapping("/questions") public ResponseEntity getquestionsDetails( @RequestParam("cid") String cid) { try { - String apiUrl = - appConfig.shelterurl + "/questions?cid=" + cid; + String apiUrl = appConfig.shelterurl + "/questions?cid=" + cid; - System.out.println( - "API URL for night inspection questions: " + apiUrl - ); + System.out.println("API URL for night inspection questions: " + apiUrl); - ResponseEntity response = - restTemplate.getForEntity( - apiUrl, - Object.class - ); + ResponseEntity response = restTemplate.getForEntity(apiUrl, Object.class); - return ResponseEntity - .status(response.getStatusCode()) - .body(response.getBody()); + return ResponseEntity.status(response.getStatusCode()).body(response.getBody()); } catch (HttpClientErrorException e) { - System.out.println( - "Question API Client Error: " + - e.getStatusCode() - ); - - return ResponseEntity - .status(e.getStatusCode()) - .body(e.getResponseBodyAsString()); + System.out.println("Question API Client Error: " + e.getStatusCode()); + return ResponseEntity.status(e.getStatusCode()).body(e.getResponseBodyAsString()); } catch (HttpServerErrorException e) { - System.out.println( - "Question API Server Error: " + - e.getStatusCode() - ); - - return ResponseEntity - .status(e.getStatusCode()) - .body(e.getResponseBodyAsString()); + System.out.println("Question API Server Error: " + e.getStatusCode()); + return ResponseEntity.status(e.getStatusCode()).body(e.getResponseBodyAsString()); } catch (ResourceAccessException e) { - System.out.println( - "Question API Connection Error: " + - e.getMessage() - ); + System.out.println("Question API Connection Error: " + e.getMessage()); return ResponseEntity .status(HttpStatus.BAD_GATEWAY) .body( - Map.of( - "status", false, - "message", - "Unable to connect to Question Master API." - ) - ); + Map.of( + "status", false, + "message", + "Unable to connect to Question Master API.")); } catch (Exception e) { - System.out.println( - "Question API Exception" - ); + System.out.println("Question API Exception"); e.printStackTrace(); return ResponseEntity - .status(HttpStatus.INTERNAL_SERVER_ERROR) - .body( - Map.of( - "status", false, - "message", - "Unable to load question details." - ) - ); + .status(HttpStatus.INTERNAL_SERVER_ERROR).body( + Map.of("status", false, "message", "Unable to load question details.")); } } - - -// @GetMapping("/questions") -// public ResponseEntity getquestionsDetails(@RequestParam("cid") String cid) { -// -// try { -// -// String apiUrl = appConfig.shelterurl + "/questions?cid=" + cid; -// -// System.out.println("apiUrl for night inspection questions:" +apiUrl); -// -// ResponseEntity response = -// restTemplate.getForEntity(apiUrl, String.class); -// -// return ResponseEntity -// .status(response.getStatusCode()) -// .body(response.getBody()); -// -// } catch (HttpClientErrorException e) { -// -// return ResponseEntity -// .status(e.getStatusCode()) -// .body(e.getResponseBodyAsString()); -// -// } catch (HttpServerErrorException e) { -// -// return ResponseEntity -// .status(e.getStatusCode()) -// .body(e.getResponseBodyAsString()); -// -// } catch (ResourceAccessException e) { -// -// return ResponseEntity -// .status(HttpStatus.BAD_GATEWAY) -// .body("Unable to connect to Question Master API."); -// -// } catch (Exception e) { -// -// System.out.println("apiUrl for night inspection questions Exception....."); -// e.printStackTrace(); -// -// return ResponseEntity -// .status(HttpStatus.INTERNAL_SERVER_ERROR) -// .body("Unable to load question details."); -// -// } -// } - -// @GetMapping("/questions") -// public ResponseEntity getQuestions(@RequestParam String cid) { -// -// return restTemplate.getForEntity( -// "https://gccservices.in/gccofficialapp/api/shelterinspection/questions?cid="+cid, -// Object.class -// ); -// -// } - -// @GetMapping("/shelterList") -// public List> shelterList(){ -// return shelterApiService.getShelterList(); -// } - + + @GetMapping("/shelterMeetingList") + public List> shelterMeetingList( + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate, + @RequestParam(required = false) String zone, + @RequestParam(required = false) String category) { + return shelterService1.getShelterMeetingList(fromDate, toDate, zone, category); + } + + @GetMapping("/shelterMeetingDetails") + public List> shelterMeetingDetails( + @RequestParam String uqid, + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + return shelterService1.getShelterMeetingDetails(uqid, fromDate, toDate); + } + + @GetMapping("/shelterMeetingMinDate") + public String shelterMeetingMinDate() { + return shelterService1.getShelterMeetingMinDate(); + } + + @GetMapping("/shelterResuceList") + public List> shelterResuceList( + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + return shelterService1.getShelterRescueList(fromDate, toDate); + } + + @GetMapping("/shelterResuceDetails") + public List> shelterResuceDetails( + @RequestParam String resuceDesignationId, + @RequestParam String uqid, + @RequestParam(required = false) String fromDate, + + @RequestParam(required = false) String toDate) { + return shelterService1.getShelterRescueDetails(resuceDesignationId, uqid, fromDate, toDate); + } + + @GetMapping("/shelterRescuedPeopleDetails") + public List> getShelterRescuedPeopleDetails( + @RequestParam String surveyId, + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + return shelterService1.getShelterRescuedPeopleDetails(surveyId, fromDate, toDate); + } + + @GetMapping("/shelterResuceMinDate") + public String shelterResuceMinDate() { + return shelterService1.getShelterResuceMinDate(); + } + @GetMapping("/categories") public List getCategories() { return masterShelterService.getCategoryList(); @@ -300,16 +258,15 @@ public class ShelterInspectionController { public List getZones() { return masterShelterService.getZoneList(); } - + @GetMapping("/cdos") public List> getCdos() { return masterShelterService.getCdos(); } - + @GetMapping("/years") public List getYears() { return masterShelterService.getAvailableYears(); } - } diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Service/ShelterInspectionService.java b/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Service/ShelterInspectionService.java index 32b8610..6093e51 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Service/ShelterInspectionService.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Service/ShelterInspectionService.java @@ -29,11 +29,17 @@ public class ShelterInspectionService { @Autowired private JdbcTemplate jdbcTemplate; +// private JdbcTemplate shelterJdbcTemplate; @Autowired public void setDataSource(@Qualifier("mysqlShelterinspectionDataSource") DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } + +// @Autowired +// public void setShelterDataSource(@Qualifier("mysqlShelterDataSource") DataSource dataSource) { +// this.shelterJdbcTemplate = new JdbcTemplate(dataSource); +// } private final RestTemplate restTemplate = new RestTemplate(); @@ -54,60 +60,88 @@ public class ShelterInspectionService { } // Dashboard + // Dashboard public Map getDashboardData(String type, String value) { Map response = new LinkedHashMap<>(); String dateCondition = ""; String residentQuery = ""; - String residentParameter = ""; + String residentParameter = value; + + String resuceQuery = ""; + + // ========================================== + // DAY + // ========================================== - - // ========================================== - // DAY - // ========================================== /* - * For each shelter: Take the latest qid = 4 record and up to the selected date. + * For each shelter: + * Take the latest qid = 4 record up to the selected date. */ - + if ("day".equalsIgnoreCase(type)) { dateCondition = " AND DATE(cdate) = ? "; residentQuery = """ COALESCE( - (SELECT SUM(CAST(t.answer AS UNSIGNED)) + ( + SELECT SUM(CAST(t.answer AS UNSIGNED)) FROM ( - SELECT sld.shelter_id, r.answer, ROW_NUMBER() OVER - (PARTITION BY sld.shelter_id ORDER BY r.cdate DESC, r.id DESC) AS rn + SELECT + sld.shelter_id, + r.answer, + ROW_NUMBER() OVER ( + PARTITION BY sld.shelter_id + ORDER BY r.cdate DESC, r.id DESC + ) AS rn FROM night_shelter_inspection_response r - - INNER JOIN surveyor_location_details sld ON sld.survey_id = r.survey_id AND sld.loginId = r.cby - - WHERE r.qid = 4 AND r.isactive = 1 AND r.isdelete = 0 - AND sld.is_active = 1 AND sld.is_delete = 0 - - - AND DATE_FORMAT(r.cdate, '%Y-%m') = DATE_FORMAT( STR_TO_DATE(?, '%Y-%m-%d'), '%Y-%m') - - AND DATE(r.cdate) <= ?) t - - WHERE t.rn = 1), 0) AS totalResidents, - + INNER JOIN surveyor_location_details sld + ON sld.survey_id = r.survey_id + AND sld.loginId = r.cby + WHERE r.qid = 4 + AND r.isactive = 1 + AND r.isdelete = 0 + AND sld.is_active = 1 + AND sld.is_delete = 0 + AND DATE_FORMAT(r.cdate, '%Y-%m') = + DATE_FORMAT( + STR_TO_DATE(?, '%Y-%m-%d'), + '%Y-%m' + ) + AND DATE(r.cdate) <= ? + ) t + WHERE t.rn = 1 + ), + 0 + ) AS totalResidents, """; - residentParameter = value; + // Rescue count from gcc_shelter + resuceQuery = """ + COALESCE( + ( + SELECT SUM( + CASE + WHEN qid = 5 + THEN CAST(answer AS UNSIGNED) + END + ) + FROM gcc_shelter.shelter_resuce_response + WHERE isactive = 1 + AND isdelete = 0 + AND DATE(cdate) = ? + ), + 0 + ) AS resuceCount, + """; } - - - // ========================================== - // MONTH - // ========================================== - /* - * Only records from selected month. - - * For each shelter: Take latest qid = 4 record in that month. and Then SUM all shelters. - */ + + // ========================================== + // MONTH + // ========================================== + else if ("month".equalsIgnoreCase(type)) { dateCondition = @@ -115,36 +149,57 @@ public class ShelterInspectionService { residentQuery = """ COALESCE( - (SELECT SUM(CAST(t.answer AS UNSIGNED)) + ( + SELECT SUM(CAST(t.answer AS UNSIGNED)) FROM ( - SELECT sld.shelter_id, r.answer, ROW_NUMBER() OVER - (PARTITION BY sld.shelter_id ORDER BY r.cdate DESC, r.id DESC) AS rn + SELECT + sld.shelter_id, + r.answer, + ROW_NUMBER() OVER ( + PARTITION BY sld.shelter_id + ORDER BY r.cdate DESC, r.id DESC + ) AS rn FROM night_shelter_inspection_response r - - INNER JOIN surveyor_location_details sld ON sld.survey_id = r.survey_id AND sld.loginId = r.cby - - WHERE r.qid = 4 AND r.isactive = 1 AND r.isdelete = 0 - AND sld.is_active = 1 AND sld.is_delete = 0 - - AND DATE_FORMAT(r.cdate, '%Y-%m') = ?) t - - WHERE t.rn = 1), 0) AS totalResidents, - + INNER JOIN surveyor_location_details sld + ON sld.survey_id = r.survey_id + AND sld.loginId = r.cby + WHERE r.qid = 4 + AND r.isactive = 1 + AND r.isdelete = 0 + AND sld.is_active = 1 + AND sld.is_delete = 0 + AND DATE_FORMAT(r.cdate, '%Y-%m') = ? + ) t + WHERE t.rn = 1 + ), + 0 + ) AS totalResidents, """; - residentParameter = value; + // Rescue count from gcc_shelter + resuceQuery = """ + COALESCE( + ( + SELECT SUM( + CASE + WHEN qid = 5 + THEN CAST(answer AS UNSIGNED) + END + ) + FROM gcc_shelter.shelter_resuce_response + WHERE isactive = 1 + AND isdelete = 0 + AND DATE_FORMAT(cdate, '%Y-%m') = ? + ), + 0 + ) AS resuceCount, + """; } + // ========================================== + // YEAR + // ========================================== - - // ========================================== - // YEAR - // ========================================== - /* - * Only records from selected year. - - * For each shelter: Take latest qid = 4 record in that year. and Then SUM all shelters. - */ else if ("year".equalsIgnoreCase(type)) { dateCondition = @@ -154,80 +209,361 @@ public class ShelterInspectionService { COALESCE( ( SELECT SUM(CAST(t.answer AS UNSIGNED)) - FROM ( - SELECT sld.shelter_id, r.answer, ROW_NUMBER() OVER - (PARTITION BY sld.shelter_id ORDER BY r.cdate DESC, r.id DESC) AS rn + SELECT + sld.shelter_id, + r.answer, + ROW_NUMBER() OVER ( + PARTITION BY sld.shelter_id + ORDER BY r.cdate DESC, r.id DESC + ) AS rn FROM night_shelter_inspection_response r - - INNER JOIN surveyor_location_details sld ON sld.survey_id = r.survey_id AND sld.loginId = r.cby - - WHERE r.qid = 4 AND r.isactive = 1 AND r.isdelete = 0 - AND sld.is_active = 1 AND sld.is_delete = 0 - + INNER JOIN surveyor_location_details sld + ON sld.survey_id = r.survey_id + AND sld.loginId = r.cby + WHERE r.qid = 4 + AND r.isactive = 1 + AND r.isdelete = 0 + AND sld.is_active = 1 + AND sld.is_delete = 0 AND YEAR(r.cdate) = ? ) t - - WHERE t.rn = 1), 0) AS totalResidents, - + WHERE t.rn = 1 + ), + 0 + ) AS totalResidents, """; - residentParameter = value; + // Rescue count from gcc_shelter + resuceQuery = """ + COALESCE( + ( + SELECT SUM( + CASE + WHEN qid = 5 + THEN CAST(answer AS UNSIGNED) + END + ) + FROM gcc_shelter.shelter_resuce_response + WHERE isactive = 1 + AND isdelete = 0 + AND YEAR(cdate) = ? + ), + 0 + ) AS resuceCount, + """; } - - - // ========================================== - // DASHBOARD SQL - // ========================================== + // ========================================== + // DASHBOARD SQL + // ========================================== String dashboardSql = """ SELECT - """ + residentQuery + """ + """ + residentQuery + resuceQuery + """ COUNT(DISTINCT survey_id) AS numberOfVisits, - COALESCE(SUM(CASE WHEN qid = 16 THEN CAST(answer AS UNSIGNED) END), 0) AS rehabilitation, + COALESCE( + SUM( + CASE + WHEN qid = 16 + THEN CAST(answer AS UNSIGNED) + END + ), + 0 + ) AS rehabilitation, - COALESCE(SUM(CASE WHEN qid = 17 THEN CAST(answer AS UNSIGNED) END), 0) AS reintegration, + COALESCE( + SUM( + CASE + WHEN qid = 17 + THEN CAST(answer AS UNSIGNED) + END + ), + 0 + ) AS reintegration, - COALESCE(SUM(CASE WHEN qid = 48 THEN CAST(answer AS UNSIGNED) END), 0) AS entitlementAccess, + COALESCE( + SUM( + CASE + WHEN qid = 48 + THEN CAST(answer AS UNSIGNED) + END + ), + 0 + ) AS entitlementAccess, - COALESCE(SUM(CASE WHEN qid = 11 THEN CAST(answer AS UNSIGNED) END), 0) AS leftWithInfo, + COALESCE( + SUM( + CASE + WHEN qid = 11 + THEN CAST(answer AS UNSIGNED) + END + ), + 0 + ) AS leftWithInfo, - COALESCE(SUM(CASE WHEN qid = 13 THEN CAST(answer AS UNSIGNED) END), 0) AS leftWithoutInfo, + COALESCE( + SUM( + CASE + WHEN qid = 13 + THEN CAST(answer AS UNSIGNED) + END + ), + 0 + ) AS leftWithoutInfo, - COALESCE(SUM(CASE WHEN qid = 10 THEN CAST(answer AS UNSIGNED) END), 0) AS deathCount + COALESCE( + SUM( + CASE + WHEN qid = 10 + THEN CAST(answer AS UNSIGNED) + END + ), + 0 + ) AS deathCount FROM night_shelter_inspection_response - WHERE isactive = 1 AND isdelete = 0 + WHERE isactive = 1 + AND isdelete = 0 """ + dateCondition; - - // ========================================== - // EXECUTE QUERY - // ========================================== - - + // ========================================== + // EXECUTE QUERY + // ========================================== + if (dateCondition.isEmpty()) { - - response.putAll(jdbcTemplate.queryForMap(dashboardSql)); + + response.putAll( + jdbcTemplate.queryForMap(dashboardSql) + ); + } else if ("day".equalsIgnoreCase(type)) { - - response.putAll(jdbcTemplate.queryForMap(dashboardSql, value, value, value)); + + /* + * Parameters: + * + * 1. Resident month + * 2. Resident selected date + * 3. Rescue selected date + * 4. Dashboard selected date + */ + + response.putAll( + jdbcTemplate.queryForMap( + dashboardSql, + value, + value, + value, + value + ) + ); + } else { - response.putAll(jdbcTemplate.queryForMap(dashboardSql, residentParameter, value)); + /* + * Parameters: + * + * 1. Resident parameter + * 2. Rescue parameter + * 3. Dashboard date parameter + */ + + response.putAll( + jdbcTemplate.queryForMap( + dashboardSql, + residentParameter, + value, + value + ) + ); } return response; } +// public Map getDashboardData(String type, String value) { +// +// Map response = new LinkedHashMap<>(); +// +// String dateCondition = ""; +// String residentQuery = ""; +// String residentParameter = ""; +// +// +// // ========================================== +// // DAY +// // ========================================== +// /* +// * For each shelter: Take the latest qid = 4 record and up to the selected date. +// */ +// +// if ("day".equalsIgnoreCase(type)) { +// +// dateCondition = " AND DATE(cdate) = ? "; +// +// residentQuery = """ +// COALESCE( +// (SELECT SUM(CAST(t.answer AS UNSIGNED)) +// FROM ( +// SELECT sld.shelter_id, r.answer, ROW_NUMBER() OVER +// (PARTITION BY sld.shelter_id ORDER BY r.cdate DESC, r.id DESC) AS rn +// FROM night_shelter_inspection_response r +// +// INNER JOIN surveyor_location_details sld ON sld.survey_id = r.survey_id AND sld.loginId = r.cby +// +// WHERE r.qid = 4 AND r.isactive = 1 AND r.isdelete = 0 +// AND sld.is_active = 1 AND sld.is_delete = 0 +// +// +// AND DATE_FORMAT(r.cdate, '%Y-%m') = DATE_FORMAT( STR_TO_DATE(?, '%Y-%m-%d'), '%Y-%m') +// +// AND DATE(r.cdate) <= ?) t +// +// WHERE t.rn = 1), 0) AS totalResidents, +// +// """; +// +// +// +// residentParameter = value; +// } +// +// +// // ========================================== +// // MONTH +// // ========================================== +// /* +// * Only records from selected month. +// +// * For each shelter: Take latest qid = 4 record in that month. and Then SUM all shelters. +// */ +// else if ("month".equalsIgnoreCase(type)) { +// +// dateCondition = +// " AND DATE_FORMAT(cdate, '%Y-%m') = ? "; +// +// residentQuery = """ +// COALESCE( +// (SELECT SUM(CAST(t.answer AS UNSIGNED)) +// FROM ( +// SELECT sld.shelter_id, r.answer, ROW_NUMBER() OVER +// (PARTITION BY sld.shelter_id ORDER BY r.cdate DESC, r.id DESC) AS rn +// FROM night_shelter_inspection_response r +// +// INNER JOIN surveyor_location_details sld ON sld.survey_id = r.survey_id AND sld.loginId = r.cby +// +// WHERE r.qid = 4 AND r.isactive = 1 AND r.isdelete = 0 +// AND sld.is_active = 1 AND sld.is_delete = 0 +// +// AND DATE_FORMAT(r.cdate, '%Y-%m') = ?) t +// +// WHERE t.rn = 1), 0) AS totalResidents, +// +// """; +// +// residentParameter = value; +// } +// +// +// +// // ========================================== +// // YEAR +// // ========================================== +// /* +// * Only records from selected year. +// +// * For each shelter: Take latest qid = 4 record in that year. and Then SUM all shelters. +// */ +// else if ("year".equalsIgnoreCase(type)) { +// +// dateCondition = +// " AND YEAR(cdate) = ? "; +// +// residentQuery = """ +// COALESCE( +// ( +// SELECT SUM(CAST(t.answer AS UNSIGNED)) +// +// FROM ( +// SELECT sld.shelter_id, r.answer, ROW_NUMBER() OVER +// (PARTITION BY sld.shelter_id ORDER BY r.cdate DESC, r.id DESC) AS rn +// FROM night_shelter_inspection_response r +// +// INNER JOIN surveyor_location_details sld ON sld.survey_id = r.survey_id AND sld.loginId = r.cby +// +// WHERE r.qid = 4 AND r.isactive = 1 AND r.isdelete = 0 +// AND sld.is_active = 1 AND sld.is_delete = 0 +// +// AND YEAR(r.cdate) = ? +// ) t +// +// WHERE t.rn = 1), 0) AS totalResidents, +// +// """; +// +// residentParameter = value; +// } +// +// +// +// // ========================================== +// // DASHBOARD SQL +// // ========================================== +// +// String dashboardSql = """ +// +// SELECT +// +// """ + residentQuery + """ +// +// COUNT(DISTINCT survey_id) AS numberOfVisits, +// +// COALESCE(SUM(CASE WHEN qid = 16 THEN CAST(answer AS UNSIGNED) END), 0) AS rehabilitation, +// +// COALESCE(SUM(CASE WHEN qid = 17 THEN CAST(answer AS UNSIGNED) END), 0) AS reintegration, +// +// COALESCE(SUM(CASE WHEN qid = 48 THEN CAST(answer AS UNSIGNED) END), 0) AS entitlementAccess, +// +// COALESCE(SUM(CASE WHEN qid = 11 THEN CAST(answer AS UNSIGNED) END), 0) AS leftWithInfo, +// +// COALESCE(SUM(CASE WHEN qid = 13 THEN CAST(answer AS UNSIGNED) END), 0) AS leftWithoutInfo, +// +// COALESCE(SUM(CASE WHEN qid = 10 THEN CAST(answer AS UNSIGNED) END), 0) AS deathCount +// +// FROM night_shelter_inspection_response +// +// WHERE isactive = 1 AND isdelete = 0 +// +// """ + dateCondition; +// +// +// +// // ========================================== +// // EXECUTE QUERY +// // ========================================== +// +// +// if (dateCondition.isEmpty()) { +// +// response.putAll(jdbcTemplate.queryForMap(dashboardSql)); +// } else if ("day".equalsIgnoreCase(type)) { +// +// response.putAll(jdbcTemplate.queryForMap(dashboardSql, value, value, value)); +// } else { +// +// response.putAll(jdbcTemplate.queryForMap(dashboardSql, residentParameter, value)); +// } +// +// return response; +// } + // public Map getDashboardData(String type, String value) { diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Service/ShelterService.java b/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Service/ShelterService.java new file mode 100644 index 0000000..4d865a8 --- /dev/null +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Service/ShelterService.java @@ -0,0 +1,1015 @@ +package in.gov.chennaicorporation.gccoffice.shelterinspection.Service; + +import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.sql.DataSource; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +@Service +public class ShelterService { + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + public void setDataSource(@Qualifier("mysqlShelterDataSource") DataSource dataSource) { + this.jdbcTemplate = new JdbcTemplate(dataSource); + } + + private final RestTemplate restTemplate = new RestTemplate(); + + @Autowired + @Value("${fileBaseUrl}") + + private String fileBaseUrl; + + public ShelterService(Environment environment) { + + this.fileBaseUrl = environment.getProperty("fileBaseUrl"); + } + + private static final String API_URL = "https://nightshelter.gccservices.in/api/shelters/"; + + // ========================================================= + // Shelter Meeting List + // ========================================================= + + public List> getShelterMeetingList( + String fromDate, String toDate, String zone, String category) { + + ResponseEntity>> response = restTemplate.exchange( + API_URL, + HttpMethod.GET, + null, + new ParameterizedTypeReference>>() { + }); + + List> apiList = response.getBody(); + + if (apiList == null) { + return Collections.emptyList(); + } + + // ========================================================= + // FILTER BY ZONE + // ========================================================= + + if (zone != null && !zone.trim().isEmpty()) { + + apiList = apiList.stream() + .filter(s -> zone.equalsIgnoreCase( + String.valueOf(s.get("zone")))) + .collect(Collectors.toList()); + } + + // ========================================================= + // FILTER BY CATEGORY + // ========================================================= + + if (category != null && !category.trim().isEmpty()) { + + apiList = apiList.stream() + .filter(s -> category.equalsIgnoreCase( + String.valueOf(s.get("category")))) + .collect(Collectors.toList()); + } + + List> result = new ArrayList<>(); + + // ========================================================= + // PROCESS EACH SHELTER + // ========================================================= + + for (Map shelter : apiList) { + + String uqid = String.valueOf(shelter.get("uqid")); + + // ===================================================== + // TOTAL MEETINGS + // COUNT DISTINCT SURVEY ID + // ===================================================== + + StringBuilder meetingSql = new StringBuilder(); + + meetingSql.append(""" + SELECT COUNT(DISTINCT s.survey_id) + + FROM surveyor_location_smc_meeting_details s + + INNER JOIN shelter_smc_meeting_response r + ON r.survey_id = s.survey_id + AND r.cby = s.loginId + AND r.isactive = 1 + AND r.isdelete = 0 + + WHERE s.shelter_id = ? + """); + + // ===================================================== + // PARAMETERS + // ===================================================== + + List params = new ArrayList<>(); + + params.add(uqid); + + // ===================================================== + // FROM DATE + // ===================================================== + + if (fromDate != null && !fromDate.isBlank()) { + meetingSql.append(" AND DATE(r.cdate) >= ? "); + params.add(fromDate); + } + + // ===================================================== + // TO DATE + // ===================================================== + + if (toDate != null && !toDate.isBlank()) { + meetingSql.append(" AND DATE(r.cdate) <= ? "); + params.add(toDate); + } + + // ===================================================== + // EXECUTE QUERY + // ===================================================== + + Integer totalMeetings = jdbcTemplate.queryForObject( + meetingSql.toString(), Integer.class, params.toArray()); + + // ===================================================== + // RESULT + // ===================================================== + + Map row = new LinkedHashMap<>(); + + row.put("uqid", uqid); + row.put("shelterName", shelter.get("shelter_name")); + row.put("zone", shelter.get("zone")); + row.put("category", shelter.get("category")); + + row.put( + "totalMeetings", + totalMeetings == null + ? 0 + : totalMeetings); + + result.add(row); + } + + // ========================================================= + // SORT BY TOTAL MEETINGS - HIGH TO LOW + // ========================================================= + + result.sort((a, b) -> Integer.compare( + ((Number) b.get("totalMeetings")).intValue(), + ((Number) a.get("totalMeetings")).intValue())); + + return result; + } + + // ========================================================= + // Shelter Meeting Details + // ========================================================= + + public List> getShelterMeetingDetails( + String uqid, String fromDate, String toDate) { + + // ========================================================= + // GET SHELTER DETAILS FROM API + // ========================================================= + + ResponseEntity>> response = restTemplate.exchange( + API_URL, + HttpMethod.GET, + null, + new ParameterizedTypeReference>>() { + }); + + List> apiList = response.getBody(); + + if (apiList == null) { + apiList = Collections.emptyList(); + } + + // ========================================================= + // FIND SHELTER NAME USING UQID + // ========================================================= + + String shelterName = "-"; + + for (Map shelter : apiList) { + + String apiUqid = String.valueOf(shelter.get("uqid")); + + if (uqid.equalsIgnoreCase(apiUqid)) { + shelterName = String.valueOf(shelter.get("shelter_name")); + break; + } + } + System.out.println("uqid"); + System.out.println(uqid); + System.out.println("shelterName"); + System.out.println(shelterName); + + // ========================================================= + // SQL + // ========================================================= + + StringBuilder sql = new StringBuilder(); + + sql.append("SELECT" + + " r.survey_id," + + " ld.user_name AS cdo," + + " DATE(MAX(r.cdate)) AS meeting_date," + + "" + + " MAX(CASE WHEN r.qid = 2 THEN CONCAT('" + fileBaseUrl + + "/gccofficialapp/files', r.answer ) END) AS meeting_photo," + + " MAX(CASE WHEN r.qid = 3 THEN r.answer END) AS qid_3," + + " MAX(CASE WHEN r.qid = 4 THEN r.answer END) AS qid_4," + + " MAX(CASE WHEN r.qid = 5 THEN r.answer END) AS qid_5," + + " MAX(CASE WHEN r.qid = 6 THEN r.answer END) AS qid_6" + + "" + + " FROM shelter_smc_meeting_response r" + + "" + + " INNER JOIN surveyor_location_smc_meeting_details s" + + " ON s.survey_id = r.survey_id" + + " AND s.loginId = r.cby" + + " AND s.shelter_id = ?" + + "" + + " INNER JOIN gcc_mobile_menus.login_details ld" + + " ON ld.uid = r.cby" + + "" + + " WHERE r.isactive = 1" + + " AND r.isdelete = 0" + + " AND r.qid IN (2, 3, 4, 5, 6)"); + + // ========================================================= + // PARAMETERS + // ========================================================= + + List params = new ArrayList<>(); + + params.add(uqid); + + // ========================================================= + // FROM DATE + // ========================================================= + + if (fromDate != null && !fromDate.isBlank()) { + sql.append(" AND DATE(r.cdate) >= ? "); + params.add(fromDate); + } + + // ========================================================= + // TO DATE + // ========================================================= + + if (toDate != null && !toDate.isBlank()) { + sql.append(" AND DATE(r.cdate) <= ? "); + params.add(toDate); + } + + // ========================================================= + // GROUP BY + ORDER + // ========================================================= + + sql.append(""" + GROUP BY r.survey_id, ld.user_name, DATE(r.cdate) + ORDER BY MAX(r.cdate) DESC + """); + + // ========================================================= + // EXECUTE QUERY + // ========================================================= + + List> list = jdbcTemplate.queryForList( + sql.toString(), params.toArray()); + + // ========================================================= + // RESULT + // ========================================================= + + List> result = new ArrayList<>(); + + int sno = 1; + + for (Map row : list) { + + Map data = new LinkedHashMap<>(); + + data.put("sno", sno++); + data.put("surveyId", row.get("survey_id")); + data.put("shelterName", shelterName); + data.put("cdo", row.get("cdo")); + data.put("date", row.get("meeting_date")); + data.put("meetingPhoto", row.get("meeting_photo")); + data.put("qid3", row.get("qid_3")); + data.put("qid4", row.get("qid_4")); + data.put("qid5", row.get("qid_5")); + data.put("qid6", row.get("qid_6")); + + result.add(data); + } + + return result; + } + + // ========================================================= + // GET MINIMUM MEETING DATE + // Based on cdate + // ========================================================= + public String getShelterMeetingMinDate() { + + String sql = """ + SELECT DATE(MIN(cdate)) + FROM shelter_smc_meeting_response + WHERE isactive = 1 + AND isdelete = 0 + """; + + String minDate = jdbcTemplate.queryForObject(sql, String.class); + + return minDate; + } + + // ========================================================= + // Shelter Rescue Designation List + // ========================================================= + + // ========================================================= + // Shelter Rescue Designation List + // ========================================================= + public List> getShelterRescueList( + String fromDate, + String toDate) { + + StringBuilder sql = new StringBuilder(); + + sql.append(""" + SELECT + d.id AS resuce_designation_id, + d.english_name AS resuce_designation, + COUNT(DISTINCT s.survey_id) AS totalResuces + + + FROM resuce_designation_master d + + LEFT JOIN surveyor_location_resuce_details s + ON d.id = CAST(s.resuce_designation AS UNSIGNED) + AND s.is_active = 1 + AND s.is_delete = 0 + """); + + List params = new ArrayList<>(); + + // ========================================================= + // DATE FILTER + // ========================================================= + if (fromDate != null && !fromDate.isBlank()) { + sql.append(" AND DATE(s.cdate) >= ? "); + params.add(fromDate); + } + + if (toDate != null && !toDate.isBlank()) { + sql.append(" AND DATE(s.cdate) <= ? "); + params.add(toDate); + } + + // ========================================================= + // RESPONSE TABLE JOIN + // ========================================================= + sql.append(""" + LEFT JOIN shelter_resuce_response r + ON r.survey_id = s.survey_id + AND r.cby = s.loginId + AND r.isactive = 1 + AND r.isdelete = 0 + + WHERE d.isactive = 1 + AND d.isdelete = 0 + + GROUP BY + d.id, + d.english_name, + d.orderby + + + ORDER BY d.orderby + """); + + List> rows = jdbcTemplate.queryForList( + sql.toString(), + params.toArray()); + + // ========================================================= + // RESULT + // ========================================================= + List> result = new ArrayList<>(); + + for (Map row : rows) { + + Map data = new LinkedHashMap<>(); + + data.put( + "resuceDesignationId", + row.get("resuce_designation_id")); + + data.put( + "resuceDesignation", + row.get("resuce_designation")); + + data.put( + "totalResuces", + row.get("totalResuces") == null + ? 0 + : ((Number) row.get("totalResuces")).intValue()); + + result.add(data); + } + + return result; + } + + // public List> getShelterRescueList( + // String fromDate, + // String toDate, + // String zone, + // String category) { + // + // StringBuilder sql = new StringBuilder(); + // + // sql.append(""" + // SELECT + // d.id AS resuce_designation_id, + // d.english_name AS resuce_designation, + // COUNT(DISTINCT s.survey_id) AS totalResuces + // + // FROM resuce_designation_master d + // + // LEFT JOIN surveyor_location_resuce_details s + // ON d.id = CAST(s.resuce_designation AS UNSIGNED) + // AND s.is_active = 1 + // AND s.is_delete = 0 + // + // LEFT JOIN shelter_resuce_response r + // ON r.survey_id = s.survey_id + // AND r.cby = s.loginId + // AND r.isactive = 1 + // AND r.isdelete = 0 + // """); + // + // List params = new ArrayList<>(); + // + // // ========================================================= + // // DATE FILTER + // // ========================================================= + // if (fromDate != null && !fromDate.isBlank()) { + // sql.append(" AND DATE(s.cdate) >= ? "); + // params.add(fromDate); + // } + // + // if (toDate != null && !toDate.isBlank()) { + // sql.append(" AND DATE(s.cdate) <= ? "); + // params.add(toDate); + // } + // + // // ========================================================= + // // ZONE FILTER + // // ========================================================= + // if (zone != null && !zone.isBlank()) { + // sql.append(" AND s.zone = ? "); + // params.add(zone); + // } + // + // // ========================================================= + // // GROUP BY + // // ========================================================= + // sql.append(""" + // WHERE d.isactive = 1 + // AND d.isdelete = 0 + // + // GROUP BY + // d.id, + // d.english_name, + // d.orderby + // + // ORDER BY d.orderby + // """); + // + // List> rows = + // jdbcTemplate.queryForList( + // sql.toString(), + // params.toArray() + // ); + // + // // ========================================================= + // // RESULT + // // ========================================================= + // List> result = new ArrayList<>(); + // + // for (Map row : rows) { + // + // Map data = new LinkedHashMap<>(); + // + // data.put( + // "resuceDesignationId", + // row.get("resuce_designation_id") + // ); + // + // data.put( + // "resuceDesignation", + // row.get("resuce_designation") + // ); + // + // data.put( + // "totalResuces", + // row.get("totalResuces") == null + // ? 0 + // : ((Number) row.get("totalResuces")).intValue() + // ); + // + // result.add(data); + // } + // + // return result; + // } + + // + // public List> getShelterRescueList( + // String fromDate, String toDate, String zone, String category) { + // + // ResponseEntity>> response = + // restTemplate.exchange( + // API_URL, + // HttpMethod.GET, + // null, + // new ParameterizedTypeReference>>() { + // }); + // + // List> apiList = response.getBody(); + // + // if (apiList == null) { + // return Collections.emptyList(); + // } + // + // + // // ========================================================= + // // FILTER BY ZONE + // // ========================================================= + // + // if (zone != null && !zone.trim().isEmpty()) { + // + // apiList = apiList.stream() + // .filter(s -> + // zone.equalsIgnoreCase( + // String.valueOf(s.get("zone")) + // ) + // ) + // .collect(Collectors.toList()); + // } + // + // + // // ========================================================= + // // FILTER BY CATEGORY + // // ========================================================= + // + // if (category != null && !category.trim().isEmpty()) { + // + // apiList = apiList.stream() + // .filter(s -> + // category.equalsIgnoreCase( + // String.valueOf(s.get("category")) + // ) + // ) + // .collect(Collectors.toList()); + // } + // + // + // List> result = new ArrayList<>(); + // + // + // // ========================================================= + // // PROCESS EACH SHELTER + // // ========================================================= + // + // for (Map shelter : apiList) { + // + // String uqid = String.valueOf(shelter.get("uqid")); + // + // // ===================================================== + // // TOTAL RESCUES + // // COUNT DISTINCT SURVEY ID + // // ===================================================== + // + // StringBuilder rescueSql = new StringBuilder(); + // + // rescueSql.append(""" + // SELECT COUNT(DISTINCT s.survey_id) + // + // FROM surveyor_location_resuce_details s + // + // INNER JOIN shelter_resuce_response r + // ON r.survey_id = s.survey_id + // AND r.cby = s.loginId + // AND r.isactive = 1 + // AND r.isdelete = 0 + // + // WHERE s.shelter_id = ? + // """); + // + // + // // ===================================================== + // // PARAMETERS + // // ===================================================== + // + // List params = new ArrayList<>(); + // + // params.add(uqid); + // + // + // // ===================================================== + // // FROM DATE + // // ===================================================== + // + // if (fromDate != null && !fromDate.isBlank()) { + // rescueSql.append( " AND DATE(r.cdate) >= ? "); + // params.add(fromDate); + // } + // + // + // // ===================================================== + // // TO DATE + // // ===================================================== + // + // if (toDate != null && !toDate.isBlank()) { + // rescueSql.append( " AND DATE(r.cdate) <= ? " ); + // params.add(toDate); + // } + // + // + // // ===================================================== + // // EXECUTE QUERY + // // ===================================================== + // + // Integer totalResuces = + // jdbcTemplate.queryForObject( + // rescueSql.toString(), + // Integer.class, + // params.toArray() + // ); + // + // + // // ===================================================== + // // RESULT + // // ===================================================== + // + // Map row = new LinkedHashMap<>(); + // + // row.put("uqid",uqid ); + // row.put("shelterName",shelter.get("shelter_name")); + // row.put("zone",shelter.get("zone")); + // row.put("category", shelter.get("category")); + // row.put("totalResuces", totalResuces == null ? 0 : totalResuces); + // + // result.add(row); + // } + // + // + // // ========================================================= + // // SORT BY TOTAL RESCUES - HIGH TO LOW + // // ========================================================= + // + // result.sort((a, b) -> + // Integer.compare( + // ((Number) b.get("totalResuces")).intValue(), + // ((Number) a.get("totalResuces")).intValue() + // ) + // ); + // + // + // return result; + // } + // + + // ========================================================= + // Shelter Rescue Details + // ========================================================= + + public List> getShelterRescueDetails(String resuceDesignationId, + String uqid, + String fromDate, + String toDate) { + + // ========================================================= + // GET SHELTER DETAILS FROM API + // ========================================================= + + ResponseEntity>> response = restTemplate.exchange( + API_URL, + HttpMethod.GET, + null, + new ParameterizedTypeReference>>() { + }); + + List> apiList = response.getBody(); + + if (apiList == null) { + apiList = Collections.emptyList(); + } + System.out.println("apilist"); + System.out.println(apiList); + + // ========================================================= + // FIND SHELTER NAME USING UQID + // ========================================================= + + /* + * String shelterName = "-"; + * + * for (Map shelter : apiList) { + * + * String apiUqid = String.valueOf(shelter.get("uqid")); + * if (uqid.equalsIgnoreCase(apiUqid)) { + * shelterName = String.valueOf(shelter.get("shelter_name")); + * break; + * } + * } + */ + + // ========================================================= + // SQL + // ========================================================= + + StringBuilder sql = new StringBuilder(); + + sql.append("SELECT" + + " r.survey_id," + + " ld.user_name AS cdo," + + " s.hospital_name AS hospital_name," + + " s.shelter_id AS shelter_id," + + " DATE(MAX(r.cdate)) AS rescue_date," + + "" + + " MAX(CASE WHEN r.qid = 1 THEN r.answer END) AS qid_1," + + " MAX(CASE WHEN r.qid = 2 THEN r.answer END) AS qid_2," + + " MAX(CASE WHEN r.qid = 3 THEN r.answer END) AS qid_3," + + " MAX(CASE WHEN r.qid = 4 THEN r.answer END) AS qid_4," + + " MAX(CASE WHEN r.qid = 5 THEN r.answer END) AS qid_5," + + " MAX(CASE WHEN r.qid = 11 THEN r.answer END) AS qid_11" + + "" + + " FROM shelter_resuce_response r" + + "" + + " INNER JOIN surveyor_location_resuce_details s" + + " ON s.survey_id = r.survey_id" + + " AND s.loginId = r.cby" + + " AND s.resuce_designation = ?" + + "" + + " INNER JOIN gcc_mobile_menus.login_details ld" + + " ON ld.uid = r.cby" + + "" + + " WHERE r.isactive = 1" + + " AND r.isdelete = 0" + + " AND r.qid IN (1, 2, 3, 4, 5, 11)"); + + // ========================================================= + // PARAMETERS + // ========================================================= + + List params = new ArrayList<>(); + + params.add(resuceDesignationId); + + // ========================================================= + // FROM DATE + // ========================================================= + + if (fromDate != null && !fromDate.isBlank()) { + sql.append(" AND DATE(r.cdate) >= ? "); + params.add(fromDate); + } + + // ========================================================= + // TO DATE + // ========================================================= + + if (toDate != null && !toDate.isBlank()) { + sql.append(" AND DATE(r.cdate) <= ? "); + params.add(toDate); + } + + // ========================================================= + // GROUP BY + ORDER + // ========================================================= + + sql.append(""" + GROUP BY r.survey_id, s.shelter_id, s.hospital_name, ld.user_name, DATE(r.cdate) + ORDER BY MAX(r.cdate) DESC + """); + + // ========================================================= + // EXECUTE QUERY + // ========================================================= + + List> list = jdbcTemplate.queryForList( + sql.toString(), params.toArray()); + + // ========================================================= + // RESULT + // ========================================================= + + List> result = new ArrayList<>(); + + int sno = 1; + + for (Map row : list) { + + Map data = new LinkedHashMap<>(); + String shelterName = "-"; + + if ("1".equals(resuceDesignationId)) { + + Object shelterIdObj = row.get("shelter_id"); + + if (shelterIdObj != null) { + + String shelterId = String.valueOf(shelterIdObj); + + for (Map shelter : apiList) { + + String apiUqid = String.valueOf( + shelter.get("uqid")); + + if (shelterId.equalsIgnoreCase(apiUqid)) { + + shelterName = String.valueOf( + shelter.get("shelter_name")); + + break; + } + } + } + } + System.out.println("shelterName"); + System.out.println(shelterName); + String hospitalName = "-"; + + if ("5".equals(resuceDesignationId)) { + + Object hospital = row.get("hospital_name"); + + if (hospital != null && + !String.valueOf(hospital).isBlank()) { + + hospitalName = String.valueOf(hospital); + } + } + + data.put("sno", sno++); + data.put("surveyId", row.get("survey_id")); + data.put("shelterName", shelterName); + data.put("hospitalName", hospitalName); + data.put("cdo", row.get("cdo")); + data.put("date", row.get("rescue_date")); + data.put("qid1", row.get("qid_1")); + data.put("qid2", row.get("qid_2")); + data.put("qid3", row.get("qid_3")); + data.put("qid4", row.get("qid_4")); + data.put("qid5", row.get("qid_5")); + data.put("qid11", row.get("qid_11")); + + result.add(data); + } + + return result; + } + + // ========================================================= + // Shelter Rescued People Details + // ========================================================= + + public List> getShelterRescuedPeopleDetails( + String surveyId, + String fromDate, + String toDate) { + + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT ") + .append(" MAX(CASE WHEN qid = 7 THEN answer END) AS name, ") + .append(" MAX(CASE WHEN qid = 8 THEN answer END) AS age, ") + .append(" MAX(CASE WHEN qid = 9 THEN answer END) AS gender, ") + .append(" MAX(CASE WHEN qid = 10 THEN answer END) AS remarks, ") + .append("MAX(CASE WHEN qid = 11 THEN answer END) AS location") + .append(" FROM ( ") + .append(" SELECT id, qid, answer, ") + .append(" SUM(CASE WHEN qid = 7 THEN 1 ELSE 0 END) ") + .append(" OVER (ORDER BY id) AS person_no ") + .append(" FROM shelter_rescue_family_response ") + .append(" WHERE survey_id = ? ") + .append(" AND isactive = 1 ") + .append(" AND isdelete = 0 ") + .append(" AND qid IN (7, 8, 9, 10,11) "); + + // ========================================================= + // FROM DATE + // ========================================================= + + List params = new ArrayList<>(); + + params.add(surveyId); + + if (fromDate != null && !fromDate.isBlank()) { + sql.append(" AND DATE(cdate) >= ? "); + params.add(fromDate); + } + + // ========================================================= + // TO DATE + // ========================================================= + + if (toDate != null && !toDate.isBlank()) { + sql.append(" AND DATE(cdate) <= ? "); + params.add(toDate); + } + + // ========================================================= + // GROUP + // ========================================================= + + sql.append(" ) x ") + .append(" GROUP BY person_no ") + .append(" ORDER BY person_no "); + + // ========================================================= + // EXECUTE + // ========================================================= + + List> list = jdbcTemplate.queryForList( + sql.toString(), + params.toArray()); + + // ========================================================= + // RESULT + // ========================================================= + + List> result = new ArrayList<>(); + + for (Map row : list) { + + Map data = new LinkedHashMap<>(); + + data.put("name", row.get("name") == null ? "-" : row.get("name")); + data.put("age", row.get("age") == null ? "-" : row.get("age")); + data.put("gender", row.get("gender") == null ? "-" : row.get("gender")); + data.put("remarks", row.get("remarks") == null ? "-" : row.get("remarks")); + data.put("location", row.get("location") == null ? "-" : row.get("location")); + + data.put("RescueDestination", row.get("rescue_destination") == null ? "-" : row.get("rescue_destination")); + + result.add(data); + } + + return result; + } + + // ========================================================= + // GET MINIMUM RESUCE DATE + // Based on cdate + // ========================================================= + public String getShelterResuceMinDate() { + + String sql = """ + SELECT DATE(MIN(cdate)) + FROM shelter_resuce_response + WHERE isactive = 1 + AND isdelete = 0 + """; + + String minDate = jdbcTemplate.queryForObject(sql, String.class); + + return minDate; + } + +} diff --git a/src/main/resources/templates/modules/shelterinspection/dashboard.html b/src/main/resources/templates/modules/shelterinspection/dashboard.html index 319c38d..66b2d40 100644 --- a/src/main/resources/templates/modules/shelterinspection/dashboard.html +++ b/src/main/resources/templates/modules/shelterinspection/dashboard.html @@ -297,8 +297,8 @@ } .rescue-bg{ - background:#FFF6E6 !important; - color:#FF9800 !important; + background: #E6FFFB !important; + color: #009688 !important; } .rehab-bg{ @@ -697,23 +697,23 @@ -
-

0

-
Rescue
- All Shelters +

0

+
Resuce
- --> + @@ -1388,6 +1388,7 @@ $("#totalResidents").text(data.totalResidents); $("#numberOfVisits").text(data.numberOfVisits); + $("#resuceCount").text(data.resuceCount); $("#rehabilitation").text(data.rehabilitation); $("#reintegration").text(data.reintegration); $("#entitlementAccess").text(data.entitlementAccess); diff --git a/src/main/resources/templates/modules/shelterinspection/resucelist.html b/src/main/resources/templates/modules/shelterinspection/resucelist.html new file mode 100644 index 0000000..2193376 --- /dev/null +++ b/src/main/resources/templates/modules/shelterinspection/resucelist.html @@ -0,0 +1,984 @@ + + + + + + + + + + + + +
+
+ +
+
+
+
+ + + + +
+ + + +
+ +
+ + + + + +
+ + + +
+ +
+
+ +
+ +
+ + + +
+ + + + + + + + + + + + + +
S.NoResuce DesignationNo of Resuces
+ +
+ + +
+
+ + + +
+
+
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/modules/shelterinspection/smcmeetinglist.html b/src/main/resources/templates/modules/shelterinspection/smcmeetinglist.html new file mode 100644 index 0000000..547dd8d --- /dev/null +++ b/src/main/resources/templates/modules/shelterinspection/smcmeetinglist.html @@ -0,0 +1,800 @@ + + + + + + + + + + + + +
+
+ +
+
+
+
+ + + + +
+ + + +
+ +
+ + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +
+ +
+ + + +
+ + + + + + + + + + + + + + + +
S.NoSHELTERZoneCategoryNo of Meetings
+ +
+ + +
+
+ + + +
+
+
+ + + + + + + + + + + + + + + +
+ Overall Performance of the Staff +
@@ -562,6 +570,13 @@ + + + + Quality of the Food + + + @@ -1153,7 +1168,8 @@ - buildStaffList(res.answers["3"]); + //buildStaffList(res.answers["3"]); + buildStaffList(res.answers["3"], res.answers); //resident if (questionMaster.length === 0) { @@ -1271,65 +1287,35 @@ if (res && res.data && Array.isArray(res.data)) { questionMaster = res.data; - - console.log( - "Question Master Loaded:", - questionMaster.length - ); + console.log("Question Master Loaded:", questionMaster.length); if (callback) { callback(); } } else { - - console.error( - "Question master data not found.", - res - ); - + console.error("Question master data not found.", res); questionMaster = []; - } }, error: function(xhr, status, error) { - console.error( - "Question Master API Error:", - xhr.status, - error - ); - - console.error( - "Response:", - xhr.responseText - ); + console.error("Question Master API Error:", xhr.status, error); + console.error("Response:", xhr.responseText); questionMaster = []; let message = "Unable to load question master."; if (xhr.status === 502) { - - message = - "Question Master service is currently unavailable."; - + message = "Question Master service is currently unavailable."; } else if (xhr.status === 404) { - - message = - "Question Master API was not found."; - + message = "Question Master API was not found."; } else if (xhr.status === 500) { - - message = - "Internal server error while loading question master."; - + message = "Internal server error while loading question master."; } else if (xhr.status === 400) { - - message = - "Invalid request for Question Master."; - + message = "Invalid request for Question Master."; } console.error("Question Master Error:", message); @@ -1444,11 +1430,12 @@ } */ - function buildStaffList(answer){ + /* function buildStaffList(answer){ let html=""; if(!answer){ $("#staffList").html(""); + $("#staffQ60").html(""); return; } @@ -1487,6 +1474,65 @@ }); $("#staffList").html(html); + + // Q60 + $("#staffQ60").html( + getDropdownText(60, ans["60"]) + ); + } */ + + function buildStaffList(answer, answers) { + + let html = ""; + + if (!answer) { + $("#staffList").html(""); + $("#staffCount").text(""); + $("#staffQ60").html(""); + return; + } + + const selected = answer.split(","); + + const staffQuestion = + questionMaster.find(q => q.qid == 3); + + if (!staffQuestion) { + return; + } + + $("#staffCount").text( + "(" + + selected.length + + "/" + + staffQuestion.options.length + + ")" + ); + + selected.forEach(function(id) { + + let option = + staffQuestion.options.find( + o => o.option_id == id + ); + + if (option) { + + html += ` +
+ + ${option.english_name} +
+ `; + } + }); + + $("#staffList").html(html); + + // Q60 - Overall Performance of Staff + $("#staffQ60").html( + getDropdownText(60, answers["60"]) + ); } /*Resident Details*/ @@ -1625,6 +1671,11 @@ $("#foodQ20").html( getYesNo(ans["20"],21,22) ); + + // Q59 + $("#foodQ59").html( + getDropdownText(59, ans["59"]) + ); // Q21 Food Photo