diff --git a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/Maincontroller.java b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/Maincontroller.java index 3c5d778d..cb481c8e 100644 --- a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/Maincontroller.java +++ b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/Maincontroller.java @@ -10,91 +10,72 @@ import in.gov.chennaicorporation.gccoffice.greencommittee.service.DashboardServi import in.gov.chennaicorporation.gccoffice.greencommittee.service.PendinglistService; import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; -@RequestMapping("/gcc/greencommittee") +@RequestMapping("/gcc/greencommittee") @Controller("greencommitteeMainController") public class Maincontroller { @Autowired - private LoginUserInfo loginUserInfo; - + private LoginUserInfo loginUserInfo; + @Autowired private PendinglistService pendinglistService; - + @Autowired private DashboardService dashboardService; - + @GetMapping("/dashboard") - public String viewdashboard(Model model) - { - String LoginUserId = LoginUserInfo.getLoginUserId(); - model.addAttribute("LoginUserId",LoginUserId); - + public String viewdashboard(Model model) { + String LoginUserId = LoginUserInfo.getLoginUserId(); + model.addAttribute("LoginUserId", LoginUserId); + String UserRole = LoginUserInfo.getUserRole(); - model.addAttribute("UserRole", UserRole); - - int app_count=dashboardService.getApplicationsCount(); - model.addAttribute("app_count", app_count); - - int dgc_count=dashboardService.getDGCcompletedCount(); - model.addAttribute("dgc_count", dgc_count); - - - int inspec_count=app_count-dgc_count; - model.addAttribute("inspec_count", inspec_count); - - int cc_count=dashboardService.getCommitteeCompleted(); - int cp_count=dgc_count-cc_count; - model.addAttribute("cp_count", cp_count); - + model.addAttribute("UserRole", UserRole); + return "modules/greencommittee/dashboard"; } - + @GetMapping("/createmeeting") - public String viewcreatemeeting(Model model) - { - String LoginUserId = LoginUserInfo.getLoginUserId(); - model.addAttribute("LoginUserId",LoginUserId); - + public String viewcreatemeeting(Model model) { + String LoginUserId = LoginUserInfo.getLoginUserId(); + model.addAttribute("LoginUserId", LoginUserId); + String UserRole = LoginUserInfo.getUserRole(); - model.addAttribute("UserRole", UserRole); - + model.addAttribute("UserRole", UserRole); + return "modules/greencommittee/createmeeting"; } - + @GetMapping("/pendinglist") - public String viewpendinglist(Model model) - { - String LoginUserId = LoginUserInfo.getLoginUserId(); - model.addAttribute("LoginUserId",LoginUserId); - + public String viewpendinglist(Model model) { + String LoginUserId = LoginUserInfo.getLoginUserId(); + model.addAttribute("LoginUserId", LoginUserId); + String UserRole = LoginUserInfo.getUserRole(); model.addAttribute("UserRole", UserRole); - + return "modules/greencommittee/pendinglist"; } - + @GetMapping("/monitoring") - public String viewmonitoring(Model model) - { - String LoginUserId = LoginUserInfo.getLoginUserId(); - model.addAttribute("LoginUserId",LoginUserId); - + public String viewmonitoring(Model model) { + String LoginUserId = LoginUserInfo.getLoginUserId(); + model.addAttribute("LoginUserId", LoginUserId); + String UserRole = LoginUserInfo.getUserRole(); - model.addAttribute("UserRole", UserRole); - + model.addAttribute("UserRole", UserRole); + return "modules/greencommittee/monitoring"; } - + @GetMapping("/reports") - public String viewreports(Model model) - { - String LoginUserId = LoginUserInfo.getLoginUserId(); - model.addAttribute("LoginUserId",LoginUserId); - + public String viewreports(Model model) { + String LoginUserId = LoginUserInfo.getLoginUserId(); + model.addAttribute("LoginUserId", LoginUserId); + String UserRole = LoginUserInfo.getUserRole(); - model.addAttribute("UserRole", UserRole); - + model.addAttribute("UserRole", UserRole); + return "modules/greencommittee/reports"; } - + } diff --git a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/ReportApicontroller.java b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/ReportApicontroller.java index 47fdd241..42b1a7b4 100644 --- a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/ReportApicontroller.java +++ b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/ReportApicontroller.java @@ -2,6 +2,7 @@ package in.gov.chennaicorporation.gccoffice.greencommittee.controller; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -19,30 +20,114 @@ public class ReportApicontroller { @Autowired private ReportService reportService; - + @GetMapping("/getgreencommitteelist") - public List> getgreencommitteelist(@RequestParam String meetingid, - @RequestParam String zones) { - - List refnums = reportService.getrefnums(meetingid, zones); - System.out.println("refnums="+refnums); - - - List> finalList = new ArrayList<>(); - - if (refnums.isEmpty()) { - return Collections.emptyList(); - } - - for (String ref : refnums) { - System.out.println("ref="+ref); - Map data = reportService.getlistdata(ref); - if (data != null && !data.isEmpty()) { - finalList.add(data); - } - } - - return finalList; - } - + public List> getgreencommitteelist(@RequestParam String meetingid, + @RequestParam String zones) { + + List refnums = reportService.getrefnums(meetingid, zones); + System.out.println("refnums=" + refnums); + + List> finalList = new ArrayList<>(); + + if (refnums.isEmpty()) { + return Collections.emptyList(); + } + + for (String ref : refnums) { + System.out.println("ref=" + ref); + Map data = reportService.getlistdata(ref); + if (data != null && !data.isEmpty()) { + finalList.add(data); + } + } + + return finalList; + } + + @GetMapping("/getabscount") + public Map getabscount(@RequestParam(required = false) String startDate, + @RequestParam(required = false) String endDate) { + + Map response = new HashMap<>(); + + try { + List> data = reportService.getabscount(startDate, endDate); + + response.put("data", data); + response.put("message", "Zone-wise abstract report"); + response.put("status", "Success"); + + } catch (Exception e) { + e.printStackTrace(); + + response.put("data", Collections.emptyList()); + response.put("message", "Failed to fetch abstract report"); + response.put("status", "Error"); + } + + return response; + } + + @GetMapping("/getWardDetailsByZone") + public Map getWardDetailsByZone(@RequestParam(required = true) String zone, + @RequestParam(required = false) String startDate, + @RequestParam(required = false) String endDate) { + + Map response = new HashMap<>(); + + try { + List> data = reportService.getWardDetailsByZone(zone, startDate, endDate); + + response.put("data", data); + response.put("message", "Ward-wise abstract report"); + response.put("status", "Success"); + + } catch (Exception e) { + e.printStackTrace(); + + response.put("data", Collections.emptyList()); + response.put("message", "Failed to fetch abstract report"); + response.put("status", "Error"); + } + + return response; + } + + @GetMapping("/getPendingDetails") + public Map getPendingDetails( + @RequestParam String zone, + @RequestParam(required = false) String ward, + @RequestParam String type, + @RequestParam(required = false) String startDate, + @RequestParam(required = false) String endDate) { + + Map response = new HashMap<>(); + + try { + List refIds = reportService.getPendingRefIds(zone, ward, type, startDate, endDate); + + List> dataList = new ArrayList<>(); + + for (String refId : refIds) { + Map fullData = reportService.getfulldetailsdata(refId); + if (fullData != null && !fullData.isEmpty()) { + dataList.add((Map) fullData.get("data")); + } + } + + response.put("data", dataList); + response.put("message", "Complaint List"); + response.put("status", "Success"); + + } catch (Exception e) { + e.printStackTrace(); + response.put("data", Collections.emptyList()); + response.put("message", "Failed to fetch complaints"); + response.put("status", "Error"); + } + + return response; + } + } diff --git a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/service/ReportService.java b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/service/ReportService.java index 3baa4a9b..6d019965 100644 --- a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/service/ReportService.java +++ b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/service/ReportService.java @@ -2,13 +2,16 @@ package in.gov.chennaicorporation.gccoffice.greencommittee.service; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @@ -17,192 +20,502 @@ public class ReportService { @Autowired private JdbcTemplate jdbcTemplate; - + + @Value("${fileBaseUrl}") + private String fileBaseUrl; @Autowired public void setDataSource(@Qualifier("mysqlGreenCommitteeDataSource") DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } - + public List getrefnums(String meetingid, String zones) { - try { - - StringBuilder sql = new StringBuilder( - " SELECT DISTINCT ref_id FROM ( " + - - " SELECT cd.ref_id " + - " FROM committee_data cd " + - " LEFT JOIN reg_details rd ON rd.ref_id = cd.ref_id " + - " WHERE cd.isactive = 1 " + - - " UNION " + - - " SELECT ri.ref_id " + - " FROM reinspection ri " + - " INNER JOIN ( " + - " SELECT ref_id, MAX(cdate) AS max_cdate " + - " FROM reinspection " + - " WHERE isactive = 1 " + - " GROUP BY ref_id " + - " ) latest " + - " ON latest.ref_id = ri.ref_id " + - " AND latest.max_cdate = ri.cdate " + - " LEFT JOIN reg_details rd2 ON rd2.ref_id = ri.ref_id " + - " WHERE ri.isactive = 1 " + - - " ) t WHERE 1=1 " - ); - - List params = new ArrayList<>(); - - /* Meeting filter */ - if (meetingid != null && !meetingid.isEmpty()) { - sql.append( - " AND ref_id IN ( " + - " SELECT ref_id FROM committee_data WHERE meeting_id = ? " + - " UNION " + - " SELECT ref_id FROM reinspection WHERE meeting_id = ? " + - " ) " - ); - params.add(meetingid); - params.add(meetingid); - } - - /* Zone filter */ - if (zones != null && !zones.isEmpty()) { - sql.append( - " AND ref_id IN ( " + - " SELECT ref_id FROM reg_details WHERE zone = ? " + - " ) " - ); - params.add(zones); - } - - return jdbcTemplate.queryForList( - sql.toString(), - params.toArray(), - String.class - ); - - } catch (Exception e) { - System.err.println("Error in getrefnums(): " + e.getMessage()); - e.printStackTrace(); - return Collections.emptyList(); - } + try { + + StringBuilder sql = new StringBuilder( + " SELECT DISTINCT ref_id FROM ( " + + + " SELECT cd.ref_id " + + " FROM committee_data cd " + + " LEFT JOIN reg_details rd ON rd.ref_id = cd.ref_id " + + " WHERE cd.isactive = 1 " + + + " UNION " + + + " SELECT ri.ref_id " + + " FROM reinspection ri " + + " INNER JOIN ( " + + " SELECT ref_id, MAX(cdate) AS max_cdate " + + " FROM reinspection " + + " WHERE isactive = 1 " + + " GROUP BY ref_id " + + " ) latest " + + " ON latest.ref_id = ri.ref_id " + + " AND latest.max_cdate = ri.cdate " + + " LEFT JOIN reg_details rd2 ON rd2.ref_id = ri.ref_id " + + " WHERE ri.isactive = 1 " + + + " ) t WHERE 1=1 "); + + List params = new ArrayList<>(); + + /* Meeting filter */ + if (meetingid != null && !meetingid.isEmpty()) { + sql.append( + " AND ref_id IN ( " + + " SELECT ref_id FROM committee_data WHERE meeting_id = ? " + + " UNION " + + " SELECT ref_id FROM reinspection WHERE meeting_id = ? " + + " ) "); + params.add(meetingid); + params.add(meetingid); + } + + /* Zone filter */ + if (zones != null && !zones.isEmpty()) { + sql.append( + " AND ref_id IN ( " + + " SELECT ref_id FROM reg_details WHERE zone = ? " + + " ) "); + params.add(zones); + } + + return jdbcTemplate.queryForList( + sql.toString(), + params.toArray(), + String.class); + + } catch (Exception e) { + System.err.println("Error in getrefnums(): " + e.getMessage()); + e.printStackTrace(); + return Collections.emptyList(); + } } - public Map getlistdata(String ref) { - Map regDetails = getRegDetails(ref); - - List> compDetails = getComplaintDetails(ref); - - regDetails.put("comp_details", compDetails); - - List> inspectionList = new ArrayList<>(); - - String sql = - "SELECT id.*, um.name AS inspector_name, " + - " DATE_FORMAT(id.cdate, '%d-%m-%Y %l:%i %p') AS f_Cdate " + - "FROM inspection_data id " + - "LEFT JOIN user_maping um ON um.userid = id.cby " + - "INNER JOIN ( " + - " SELECT inspection_by, MAX(cdate) AS latest_date " + - " FROM inspection_data " + - " WHERE ref_id = ? AND isactive = 1 " + - " GROUP BY inspection_by " + - ") latest ON id.inspection_by = latest.inspection_by " + - " AND id.cdate = latest.latest_date " + - "WHERE id.ref_id = ? AND id.isactive = 1 " + - "ORDER BY FIELD(id.inspection_by, 'GCC', 'NGO', 'TNFD')"; - - List> rows = jdbcTemplate.queryForList( - sql, ref, ref - ); - - - for (Map row : rows) { - - Integer inspId = (Integer) row.get("inspection_data_id"); - - // 4a — Recommendation details - List> recommend = jdbcTemplate.queryForList( - "SELECT rm.name, itd.nooftrees AS count " + - "FROM inspection_tree_data itd " + - "JOIN inspection_recommend_master rm ON rm.rid = itd.action " + - "WHERE itd.inspection_data_id=? AND itd.isactive=1", - inspId - ); - - row.put("recommendations", recommend); - - inspectionList.add(row); - } - - regDetails.put("inspections", inspectionList); - - - String reSql = - "SELECT r.id AS reins_id, r.committee_action, r.remarks AS reins_remarks, " + - " DATE_FORMAT(r.cdate, '%d-%m-%Y %l:%i %p') AS reins_date, " + - " cm.event_name, DATE_FORMAT(cm.event_date, '%d-%m-%Y') AS event_date, crm.name as ins_name " + - "FROM reinspection r " + - "LEFT JOIN create_meeting cm ON cm.id = r.meeting_id " + - " LEFT JOIN committee_recommend_master crm ON crm.id=r.committee_action " + - "WHERE r.ref_id = ? AND r.isactive = 1 " + - "ORDER BY r.id DESC"; - - List> reinspectionList = jdbcTemplate.queryForList(reSql, ref); - - regDetails.put("reinspections", reinspectionList); - - Map c1 = null; - - List> committeeList = jdbcTemplate.queryForList( - "SELECT cd.*, DATE_FORMAT(cd.cdate, '%d-%m-%Y %l:%i %p') AS c_Cdate, " + - "cm.event_name AS meeting_name, cm.event_date AS meeting_date " + - "FROM committee_data cd " + - "LEFT JOIN create_meeting cm ON cm.id = cd.meeting_id " + - "WHERE cd.ref_id = ? AND cd.isactive = 1", - ref - ); - - if (!committeeList.isEmpty()) { - c1 = committeeList.get(0); - - List> com_complaints = jdbcTemplate.queryForList( - "SELECT crm.name AS nature, SUM(ctd.nooftrees) AS count " + - "FROM committee_tree_data ctd " + - "JOIN committee_recommend_master crm ON crm.id = ctd.committee_action " + - "WHERE ctd.ref_id = ? " + - "GROUP BY crm.name", - ref - ); - - c1.put("com_complaints", com_complaints); - } - - // IMPORTANT: always put committee key (even if null) - regDetails.put("committee", c1); - - - return regDetails; + Map regDetails = getRegDetails(ref); + + List> compDetails = getComplaintDetails(ref); + + regDetails.put("comp_details", compDetails); + + List> inspectionList = new ArrayList<>(); + + String sql = "SELECT id.*, um.name AS inspector_name, " + + " DATE_FORMAT(id.cdate, '%d-%m-%Y %l:%i %p') AS f_Cdate " + + "FROM inspection_data id " + + "LEFT JOIN user_maping um ON um.userid = id.cby " + + "INNER JOIN ( " + + " SELECT inspection_by, MAX(cdate) AS latest_date " + + " FROM inspection_data " + + " WHERE ref_id = ? AND isactive = 1 " + + " GROUP BY inspection_by " + + ") latest ON id.inspection_by = latest.inspection_by " + + " AND id.cdate = latest.latest_date " + + "WHERE id.ref_id = ? AND id.isactive = 1 " + + "ORDER BY FIELD(id.inspection_by, 'GCC', 'NGO', 'TNFD')"; + + List> rows = jdbcTemplate.queryForList( + sql, ref, ref); + + for (Map row : rows) { + + Integer inspId = (Integer) row.get("inspection_data_id"); + + // 4a — Recommendation details + List> recommend = jdbcTemplate.queryForList( + "SELECT rm.name, itd.nooftrees AS count " + + "FROM inspection_tree_data itd " + + "JOIN inspection_recommend_master rm ON rm.rid = itd.action " + + "WHERE itd.inspection_data_id=? AND itd.isactive=1", + inspId); + + row.put("recommendations", recommend); + + inspectionList.add(row); + } + + regDetails.put("inspections", inspectionList); + + String reSql = "SELECT r.id AS reins_id, r.committee_action, r.remarks AS reins_remarks, " + + " DATE_FORMAT(r.cdate, '%d-%m-%Y %l:%i %p') AS reins_date, " + + " cm.event_name, DATE_FORMAT(cm.event_date, '%d-%m-%Y') AS event_date, crm.name as ins_name " + + "FROM reinspection r " + + "LEFT JOIN create_meeting cm ON cm.id = r.meeting_id " + + " LEFT JOIN committee_recommend_master crm ON crm.id=r.committee_action " + + "WHERE r.ref_id = ? AND r.isactive = 1 " + + "ORDER BY r.id DESC"; + + List> reinspectionList = jdbcTemplate.queryForList(reSql, ref); + + regDetails.put("reinspections", reinspectionList); + + Map c1 = null; + + List> committeeList = jdbcTemplate.queryForList( + "SELECT cd.*, DATE_FORMAT(cd.cdate, '%d-%m-%Y %l:%i %p') AS c_Cdate, " + + "cm.event_name AS meeting_name, cm.event_date AS meeting_date " + + "FROM committee_data cd " + + "LEFT JOIN create_meeting cm ON cm.id = cd.meeting_id " + + "WHERE cd.ref_id = ? AND cd.isactive = 1", + ref); + + if (!committeeList.isEmpty()) { + c1 = committeeList.get(0); + + List> com_complaints = jdbcTemplate.queryForList( + "SELECT crm.name AS nature, SUM(ctd.nooftrees) AS count " + + "FROM committee_tree_data ctd " + + "JOIN committee_recommend_master crm ON crm.id = ctd.committee_action " + + "WHERE ctd.ref_id = ? " + + "GROUP BY crm.name", + ref); + + c1.put("com_complaints", com_complaints); + } + + // IMPORTANT: always put committee key (even if null) + regDetails.put("committee", c1); + + return regDetails; } - + public Map getRegDetails(String ref) { - String sql = "SELECT * FROM reg_details WHERE is_active = 1 AND ref_id = ?"; - return jdbcTemplate.queryForMap(sql, ref); + String sql = "SELECT * FROM reg_details WHERE is_active = 1 AND ref_id = ?"; + return jdbcTemplate.queryForMap(sql, ref); } public List> getComplaintDetails(String ref) { - String sql = "SELECT cn.name AS nature, SUM(cd.no_of_trees) AS total_trees " + - "FROM complaint_details cd " + - "JOIN comp_nature cn ON cn.id = cd.comp_nature_id " + - "WHERE cd.is_active = 1 AND cd.ref_id = ? " + - "GROUP BY cn.name"; + String sql = "SELECT cn.name AS nature, SUM(cd.no_of_trees) AS total_trees " + + "FROM complaint_details cd " + + "JOIN comp_nature cn ON cn.id = cd.comp_nature_id " + + "WHERE cd.is_active = 1 AND cd.ref_id = ? " + + "GROUP BY cn.name"; + + return jdbcTemplate.queryForList(sql, ref); + } + + public List> getabscount(String startDate, String endDate) { + + String baseSql = "SELECT " + + " zm.zone_name, " + + " COALESCE(COUNT(DISTINCT rd.ref_id), 0) AS total_requests, " + + + " COALESCE(SUM(CASE " + + " WHEN rd.ref_id IS NOT NULL " + + " AND rd.is_withdraw = 0 " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM reinspection WHERE isactive=1) " + + " AND rd.ref_id NOT IN ( " + + " SELECT id.ref_id FROM inspection_data id " + + " WHERE id.inspection_by='NGO' AND id.isactive=1 " + + " AND ( (rd.reinspection_id IS NULL AND id.reinspection_id IS NULL) " + + " OR (rd.reinspection_id=id.reinspection_id) ) " + + " ) " + + " THEN 1 ELSE 0 END), 0) AS ngo_pending, " + + + " COALESCE(SUM(CASE " + + " WHEN rd.ref_id IS NOT NULL " + + " AND rd.is_withdraw = 0 " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM reinspection WHERE isactive=1) " + + " AND rd.ref_id NOT IN ( " + + " SELECT id.ref_id FROM inspection_data id " + + " WHERE id.inspection_by='GCC' AND id.isactive=1 " + + " AND ( (rd.reinspection_id IS NULL AND id.reinspection_id IS NULL) " + + " OR (rd.reinspection_id=id.reinspection_id) ) " + + " ) " + + " THEN 1 ELSE 0 END), 0) AS gcc_pending, " + + + " COALESCE(SUM(CASE " + + " WHEN rd.ref_id IS NOT NULL " + + " AND rd.is_withdraw = 0 " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM reinspection WHERE isactive=1) " + + " AND rd.ref_id NOT IN ( " + + " SELECT id.ref_id FROM inspection_data id " + + " WHERE id.inspection_by='TNFD' AND id.isactive=1 " + + " AND ( (rd.reinspection_id IS NULL AND id.reinspection_id IS NULL) " + + " OR (rd.reinspection_id=id.reinspection_id) ) " + + " ) " + + " THEN 1 ELSE 0 END), 0) AS tnfd_pending, " + + + " COALESCE(SUM(CASE " + + " WHEN rd.ref_id IS NOT NULL " + + " AND rd.is_withdraw = 0 " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM reinspection WHERE isactive=1) " + + " AND ( " + + " SELECT COUNT(DISTINCT inspection_by) " + + " FROM inspection_data id " + + " WHERE id.ref_id = rd.ref_id AND id.isactive=1 " + + " AND ( (rd.reinspection_id IS NULL AND id.reinspection_id IS NULL) " + + " OR (rd.reinspection_id=id.reinspection_id) ) " + + " ) = 3 " + + " THEN 1 ELSE 0 END), 0) AS committee_pending, " + + + " COALESCE(SUM(CASE WHEN rd.is_withdraw = 1 THEN 1 ELSE 0 END), 0) AS withdrawn, " + + + " COALESCE(SUM(CASE " + + " WHEN rd.ref_id IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + " THEN 1 ELSE 0 END), 0) AS completed " + + + "FROM zone_master zm " + + "LEFT JOIN reg_details rd " + + " ON rd.zone = zm.zone_name " + + " AND rd.is_active = 1 "; + + StringBuilder sql = new StringBuilder(baseSql); + List params = new ArrayList<>(); + + if (startDate != null && !startDate.isEmpty()) { + sql.append(" AND DATE(rd.cdate) >= ? "); + params.add(startDate); + } + + if (endDate != null && !endDate.isEmpty()) { + sql.append(" AND DATE(rd.cdate) <= ? "); + params.add(endDate); + } + + sql.append( + " WHERE zm.is_active = 1 " + + " AND zm.is_delete = 0 " + + " GROUP BY zm.zone_name " + + " ORDER BY zm.zone_name "); + + return jdbcTemplate.queryForList(sql.toString(), params.toArray()); + } + + public List> getWardDetailsByZone( + String zone, + String startDate, + String endDate) { + + String baseSql = "SELECT " + + " wm.zone_id, " + + " wm.ward_name, " + + + " COALESCE(COUNT(DISTINCT rd.ref_id), 0) AS total_requests, " + + + " COALESCE(SUM(CASE " + + " WHEN rd.ref_id IS NOT NULL " + + " AND rd.is_withdraw = 0 " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM reinspection WHERE isactive=1) " + + " AND rd.ref_id NOT IN ( " + + " SELECT id.ref_id FROM inspection_data id " + + " WHERE id.inspection_by='NGO' AND id.isactive=1 " + + " AND ( (rd.reinspection_id IS NULL AND id.reinspection_id IS NULL) " + + " OR (rd.reinspection_id = id.reinspection_id) ) " + + " ) " + + " THEN 1 ELSE 0 END), 0) AS ngo_pending, " + + + " COALESCE(SUM(CASE " + + " WHEN rd.ref_id IS NOT NULL " + + " AND rd.is_withdraw = 0 " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM reinspection WHERE isactive=1) " + + " AND rd.ref_id NOT IN ( " + + " SELECT id.ref_id FROM inspection_data id " + + " WHERE id.inspection_by='GCC' AND id.isactive=1 " + + " AND ( (rd.reinspection_id IS NULL AND id.reinspection_id IS NULL) " + + " OR (rd.reinspection_id = id.reinspection_id) ) " + + " ) " + + " THEN 1 ELSE 0 END), 0) AS gcc_pending, " + + + " COALESCE(SUM(CASE " + + " WHEN rd.ref_id IS NOT NULL " + + " AND rd.is_withdraw = 0 " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM reinspection WHERE isactive=1) " + + " AND rd.ref_id NOT IN ( " + + " SELECT id.ref_id FROM inspection_data id " + + " WHERE id.inspection_by='TNFD' AND id.isactive=1 " + + " AND ( (rd.reinspection_id IS NULL AND id.reinspection_id IS NULL) " + + " OR (rd.reinspection_id = id.reinspection_id) ) " + + " ) " + + " THEN 1 ELSE 0 END), 0) AS tnfd_pending, " + + + " COALESCE(SUM(CASE " + + " WHEN rd.ref_id IS NOT NULL " + + " AND rd.is_withdraw = 0 " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + " AND rd.ref_id NOT IN (SELECT ref_id FROM reinspection WHERE isactive=1) " + + " AND ( " + + " SELECT COUNT(DISTINCT inspection_by) " + + " FROM inspection_data id " + + " WHERE id.ref_id = rd.ref_id AND id.isactive=1 " + + " AND ( (rd.reinspection_id IS NULL AND id.reinspection_id IS NULL) " + + " OR (rd.reinspection_id = id.reinspection_id) ) " + + " ) = 3 " + + " THEN 1 ELSE 0 END), 0) AS committee_pending, " + + + " COALESCE(SUM(CASE WHEN rd.is_withdraw=1 THEN 1 ELSE 0 END), 0) AS withdrawn, " + + + " COALESCE(SUM(CASE " + + " WHEN rd.ref_id IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + " THEN 1 ELSE 0 END), 0) AS completed " + + + "FROM ward_master wm " + + "JOIN zone_master zm ON zm.id = wm.zone_id AND zm.zone_name = ? " + + "LEFT JOIN reg_details rd " + + " ON rd.ward = wm.ward_name " + + " AND rd.is_active = 1 "; + + StringBuilder sql = new StringBuilder(baseSql); + List params = new ArrayList<>(); + + params.add(zone); + + if (startDate != null && !startDate.isEmpty()) { + sql.append(" AND DATE(rd.cdate) >= ? "); + params.add(startDate); + } + + if (endDate != null && !endDate.isEmpty()) { + sql.append(" AND DATE(rd.cdate) <= ? "); + params.add(endDate); + } + + sql.append( + " WHERE wm.is_active=1 AND wm.is_delete=0 " + + " GROUP BY wm.zone_id, wm.ward_name " + + " ORDER BY wm.ward_name "); + + return jdbcTemplate.queryForList(sql.toString(), params.toArray()); + } + + public List getPendingRefIds( + String zone, + String ward, + String type, + String startDate, + String endDate) { + + String baseSql; + + switch (type.toUpperCase()) { + + case "NGO": + baseSql = "SELECT rd.ref_id FROM reg_details rd " + + "WHERE rd.zone=? " + + "AND rd.is_active=1 AND rd.is_withdraw=0 " + + "AND rd.ref_id NOT IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + "AND rd.ref_id NOT IN (SELECT ref_id FROM reinspection WHERE isactive=1) " + + "AND rd.ref_id NOT IN ( " + + " SELECT id.ref_id FROM inspection_data id " + + " WHERE id.inspection_by='NGO' AND id.isactive=1 " + + " AND ( (rd.reinspection_id IS NULL AND id.reinspection_id IS NULL) " + + " OR (rd.reinspection_id = id.reinspection_id) ) " + + ")"; + break; + + case "GCC": + baseSql = "SELECT rd.ref_id FROM reg_details rd " + + "WHERE rd.zone=? " + + "AND rd.is_active=1 AND rd.is_withdraw=0 " + + "AND rd.ref_id NOT IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + "AND rd.ref_id NOT IN (SELECT ref_id FROM reinspection WHERE isactive=1) " + + "AND rd.ref_id NOT IN ( " + + " SELECT id.ref_id FROM inspection_data id " + + " WHERE id.inspection_by='GCC' AND id.isactive=1 " + + " AND ( (rd.reinspection_id IS NULL AND id.reinspection_id IS NULL) " + + " OR (rd.reinspection_id = id.reinspection_id) ) " + + ")"; + break; + + case "TNFD": + baseSql = "SELECT rd.ref_id FROM reg_details rd " + + "WHERE rd.zone=? " + + "AND rd.is_active=1 AND rd.is_withdraw=0 " + + "AND rd.ref_id NOT IN (SELECT ref_id FROM committee_data WHERE isactive=1) " + + "AND rd.ref_id NOT IN (SELECT ref_id FROM reinspection WHERE isactive=1) " + + "AND rd.ref_id NOT IN ( " + + " SELECT id.ref_id FROM inspection_data id " + + " WHERE id.inspection_by='TNFD' AND id.isactive=1 " + + " AND ( (rd.reinspection_id IS NULL AND id.reinspection_id IS NULL) " + + " OR (rd.reinspection_id = id.reinspection_id) ) " + + ")"; + break; + + case "WITHDRAW": + baseSql = "SELECT rd.ref_id FROM reg_details rd " + + "WHERE rd.zone=? AND rd.is_withdraw=1"; + break; + + default: + return Collections.emptyList(); + } + + StringBuilder sql = new StringBuilder(baseSql); + List params = new ArrayList<>(); + + params.add(zone); + + if (ward != null && !ward.isEmpty()) { + sql.append(" AND rd.ward = ? "); + params.add(ward); + } + + if (startDate != null && !startDate.isEmpty()) { + sql.append(" AND DATE(rd.cdate) >= ? "); + params.add(startDate); + } + + if (endDate != null && !endDate.isEmpty()) { + sql.append(" AND DATE(rd.cdate) <= ? "); + params.add(endDate); + } + + return jdbcTemplate.query( + sql.toString(), + params.toArray(), + (rs, rowNum) -> rs.getString("ref_id")); + } - return jdbcTemplate.queryForList(sql, ref); + public Map getfulldetailsdata(String refId) { + + Map response = new HashMap<>(); + + // 1 — Application details + Map app = jdbcTemplate.queryForMap( + "SELECT *,DATE_FORMAT(cdate, '%d-%m-%Y %l:%i %p') as r_Cdate,IFNULL(reinspection_id, '') AS com_reinspection_id FROM reg_details WHERE ref_id=? AND is_active=1", + refId); + + // 2 — Complaint details (grouped) + List> complaints = jdbcTemplate.queryForList( + "SELECT cn.name AS nature, SUM(cd.no_of_trees) AS count " + + "FROM complaint_details cd JOIN comp_nature cn ON cn.id=cd.comp_nature_id " + + "WHERE cd.ref_id=? GROUP BY cn.name", + refId); + + String compDetails = complaints.stream() + .map(c -> c.get("nature") + "-" + c.get("count")) + .collect(Collectors.joining(",")); + + // 3 — Complaint images + List> imagePaths = jdbcTemplate.queryForList( + "SELECT img_path FROM img_uploads WHERE ref_id=? AND is_active=1", + new Object[] { refId }).stream() + .map(row -> { + Map img = new HashMap<>(); + img.put( + "img_path", + fileBaseUrl + "/gccofficialapp/files" + row.get("img_path").toString()); + return img; + }) + .collect(Collectors.toList()); + + app.put("complaints", complaints); + app.put("comp_details", compDetails); + app.put("image_paths", imagePaths); + + response.put("data", app); + + return response; } + } diff --git a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/controller/VehicleApiController.java b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/controller/VehicleApiController.java index 3d222be4..047367b6 100644 --- a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/controller/VehicleApiController.java +++ b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/controller/VehicleApiController.java @@ -23,10 +23,10 @@ import in.gov.chennaicorporation.gccoffice.vtrack.service.VehicleService; @RestController @RequestMapping("/gcc/api/vtrack") public class VehicleApiController { - @Autowired - public VehicleService vehicleService; - - @GetMapping("/getTemplateDetails") + @Autowired + public VehicleService vehicleService; + + @GetMapping("/getTemplateDetails") public ResponseEntity>> getTemplateDetails() { try { List> templateNames = vehicleService.getAllTemplateNames(); @@ -41,52 +41,51 @@ public class VehicleApiController { .body(Collections.emptyList()); } } - - @PostMapping("/saveMessageDetails") + + @PostMapping("/saveMessageDetails") public String saveMessageDetails(@RequestParam("date") String date, @RequestParam("image") MultipartFile image, - @RequestParam("templateType") String tempType) throws IOException { + @RequestParam("templateType") String tempType) throws IOException { - String img_path = vehicleService.fileUpload("vtrack",tempType,image); + String img_path = vehicleService.fileUpload("vtrack", tempType, image); - int result = vehicleService.saveMessageDetails(date, tempType, img_path); + int result = vehicleService.saveMessageDetails(date, tempType, img_path); - if(result>0){ - return "success"; - } - return "Failed"; + if (result > 0) { + return "success"; + } + return "Failed"; } - - @GetMapping({"/sendmessage"}) - public String sendmessage( - @RequestParam(value = "msgid", required = true) String msgid, - @RequestParam(value = "datetxt", required = false) String datetxt, - @RequestParam(value = "fileurl", required = false) String fileurl - ) { - - String LoginUserId = LoginUserInfo.getLoginUserId(); - - return vehicleService.sendMessage(msgid, datetxt, fileurl); - } - - @PostMapping("/disablemessage") - public String disablemessage(@RequestParam(value="msgId", required = true) String msgid){ + + @GetMapping({ "/sendmessage" }) + public String sendmessage( + @RequestParam(value = "msgid", required = true) String msgid, + @RequestParam(value = "datetxt", required = false) String datetxt, + @RequestParam(value = "fileurl", required = false) String fileurl) { + + String LoginUserId = LoginUserInfo.getLoginUserId(); + + return vehicleService.sendMessage(msgid, datetxt, fileurl); + } + + @PostMapping("/disablemessage") + public String disablemessage(@RequestParam(value = "msgId", required = true) String msgid) { String status = vehicleService.disablemessage(msgid); - if(status.equals("success")){ + if (status.equals("success")) { return "success"; - } else{ + } else { return "Failed to update"; } } @PostMapping("/enablemessage") - public String enablemessage(@RequestParam(value="msgId", required = true) String msgid){ + public String enablemessage(@RequestParam(value = "msgId", required = true) String msgid) { String status = vehicleService.enableMessage(msgid); - if(status.equals("success")){ + if (status.equals("success")) { return "success"; - } else{ + } else { return "Failed to update"; } } diff --git a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/service/VehicleService.java b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/service/VehicleService.java index fcd3ce4e..74c58a6e 100644 --- a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/service/VehicleService.java +++ b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/service/VehicleService.java @@ -670,6 +670,29 @@ public class VehicleService { break; + case "23": + System.out.println("TempID is 22 (1590940 - Green Committee Report - IMAGE - STATIC)"); + urlString = "https://media.smsgupshup.com/GatewayAPI/rest?" + + "userid=" + username + + "&password=" + password + + "&send_to=" + sendTo + + "&v=1.1&format=json" + + "&msg_type=IMAGE" + + "&method=SENDMEDIAMESSAGE" + + "&caption=%2AGCC+Enforcement+Team+Monitoring%2A%0A%0AToday%27s+%28" + msgDate + + "%29+Zone+wise+Enforcement+Team+activity+details+shared+above+for+your+reference.%0A%0AFor+more+details%2C+please+click+the+link+below." + + "&media_url=" + fileURL + + "&isTemplate=true&footer=GCC+-+IT+Cell"; + + urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?type=template" + + "&apikey=" + apikey + + "&from=" + from + + "&to={{to}}&templateid=2784943" + + "&url=" + fileURL + + "&placeholders=Green%20Committee%20Report%20Details"; + + break; + default: System.out.println("TempID (" + tempid + ") is unknown"); } diff --git a/gcc_officer_portal/src/main/resources/templates/modules/greencommittee/dashboard.html b/gcc_officer_portal/src/main/resources/templates/modules/greencommittee/dashboard.html index b325dca8..6a984389 100644 --- a/gcc_officer_portal/src/main/resources/templates/modules/greencommittee/dashboard.html +++ b/gcc_officer_portal/src/main/resources/templates/modules/greencommittee/dashboard.html @@ -1,39 +1,52 @@ + - - - - -
- -
- - -
- -
- -
-
-