diff --git a/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java b/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java index 01ba3fa..8725528 100644 --- a/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java +++ b/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java @@ -157,4 +157,16 @@ public class DataSourceConfig { return dataSource; } + ////////////////////////////// For IE Complaints //////////////////////// + @Bean(name = "mysqlIEComplaintsDataSource") + public DataSource mysqlIEComplaintsDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + // dataSource.setUrl("jdbc:mysql://" + host + "/gcc_ie_complaints"); + dataSource.setUrl("jdbc:mysql://" + host + "/gcc_ie_complaints_live"); + dataSource.setUsername("root"); + dataSource.setPassword(dbpassword); + return dataSource; + } + } diff --git a/src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java b/src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java new file mode 100644 index 0000000..a7c53fc --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java @@ -0,0 +1,87 @@ +package com.gcc.commissionerreview.controller; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.gcc.commissionerreview.service.IeComplaintsService; + +@RestController +@RequestMapping("/commissionerreview/api/iecomplaints") + +public class IeComplaintsApiController { + @Autowired + private IeComplaintsService iecomplaintservice; + + @GetMapping("/getIESummary") + public ResponseEntity> getIESummary() { + + return ResponseEntity.ok( + iecomplaintservice.getIEComplaintSummary()); + } + + @GetMapping("/complaintDashboard") + public ResponseEntity> complaintDashboard( + + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + + return ResponseEntity.ok( + iecomplaintservice.getComplaintDashboard(fromDate, toDate)); + + } + + @GetMapping("/zoneActivity") + public ResponseEntity> zoneActivity( + + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate, + @RequestParam(required = false) Integer complaintId) { + + return ResponseEntity.ok( + iecomplaintservice.getZoneActivity(fromDate, toDate, complaintId)); + + } + + @GetMapping("/complaintTypes") + public ResponseEntity> complaintTypes() { + + return ResponseEntity.ok( + iecomplaintservice.getComplaintTypes()); + + } + + @GetMapping("/wardActivity") + public ResponseEntity> wardActivity( + + @RequestParam String zone, + @RequestParam(required = false) String complaintId, + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + + return ResponseEntity.ok( + iecomplaintservice.getWardActivity(zone, complaintId, fromDate, toDate)); + + } + + @GetMapping("/complaintDetails") + public ResponseEntity> complaintDetails( + + @RequestParam String zone, + @RequestParam String ward, + @RequestParam(required = false) String complaintId, + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + + return ResponseEntity.ok( + iecomplaintservice.getComplaintDetails(zone, ward, complaintId, fromDate, toDate)); + } + +} diff --git a/src/main/java/com/gcc/commissionerreview/controller/MainController.java b/src/main/java/com/gcc/commissionerreview/controller/MainController.java index a79dc06..3ea4dab 100644 --- a/src/main/java/com/gcc/commissionerreview/controller/MainController.java +++ b/src/main/java/com/gcc/commissionerreview/controller/MainController.java @@ -291,4 +291,9 @@ public class MainController { return "modules/greencommittee/gcreport"; } + @GetMapping("/iecomplaints") + public String iecomplaints(Model model) { + return "modules/iecomplaintsreport"; + } + } diff --git a/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java b/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java new file mode 100644 index 0000000..19993b4 --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java @@ -0,0 +1,596 @@ +package com.gcc.commissionerreview.service; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +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 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.core.env.Environment; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service + +public class IeComplaintsService { + + @Autowired + @Value("${fileBaseUrl}") + + private String fileBaseUrl; + @Autowired + private JdbcTemplate jdbcTemplate; + @Autowired + private Environment environment; + + @Autowired + public void setDataSource(@Qualifier("mysqlIEComplaintsDataSource") DataSource IEComplaintsDataSource) { + this.jdbcTemplate = new JdbcTemplate(IEComplaintsDataSource); + } + + public IeComplaintsService(Environment environment) { + + this.environment = environment; + + this.fileBaseUrl = environment.getProperty("fileBaseUrl"); + } + + public Map getIEComplaintSummary() { + + Map response = new HashMap<>(); + + try { + + String sql = "SELECT " + + "COUNT(*) AS total_count, " + + "COUNT(CASE WHEN status='completed' THEN 1 END) AS completed_count, " + + "COUNT(CASE WHEN status='pending' THEN 1 END) AS pending_count " + + "FROM complaint_details"; + + Map result = jdbcTemplate.queryForMap(sql); + + response.put("status", "Success"); + response.put("message", "IE Complaint Summary"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + + response.put("status", "Error"); + response.put("message", "Something went wrong"); + response.put("data", null); + } + + return response; + } + + public Map getComplaintDashboard(String fromDate, String toDate) { + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + + List params = new ArrayList<>(); + + sql.append("SELECT "); + sql.append("cm.complaint_id, cm.complaint_name, "); + + sql.append("COUNT(DISTINCT cd.ref_id) AS total_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NOT NULL "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(comp.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN comp.ref_id END) AS completed_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NULL "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(cd.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN cd.ref_id END) AS pending_count "); + + sql.append("FROM complaint_master cm "); + + sql.append("LEFT JOIN complaint_details cd "); + sql.append("ON cm.complaint_id = cd.complaint_id "); + + sql.append("LEFT JOIN completion comp "); + sql.append("ON comp.ref_id = cd.ref_id "); + + sql.append("GROUP BY cm.complaint_id, cm.complaint_name "); + sql.append("ORDER BY cm.complaint_id"); + + List> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); + + response.put("status", "Success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + + response.put("status", "Error"); + response.put("message", "Something went wrong"); + } + + return response; + } + + /* + * public Map getZoneActivity(String fromDate, String toDate, + * Integer complaintId) { + * + * Map response = new HashMap<>(); + * + * try { + * + * StringBuilder sql = new StringBuilder(); + * + * List params = new ArrayList<>(); + * + * sql.append("SELECT "); + * sql.append("zm.zone_name, "); + * + * sql.append("COUNT(cd.ref_id) AS total_count, "); + * + * sql. + * append("COUNT(CASE WHEN cd.status = 'completed' THEN 1 END) AS completed_count, " + * ); + * + * sql. + * append("COUNT(CASE WHEN cd.status = 'pending' THEN 1 END) AS pending_count " + * ); + * + * sql.append("FROM gcc_street_vendor.zone_master zm "); + * + * sql.append("LEFT JOIN complaint_details cd "); + * sql.append("ON zm.zone_name = cd.zone "); + * + * sql.append("AND cd.is_delete = 0 "); + * sql.append("AND cd.is_active = 1 "); + * + * if (complaintId != null) { + * sql.append("AND cd.complaint_id = ? "); + * params.add(complaintId); + * } + * + * if (fromDate != null && !fromDate.isEmpty() && toDate != null && + * !toDate.isEmpty()) { + * sql.append("AND DATE(cd.cdate) BETWEEN ? AND ? "); + * params.add(fromDate); + * params.add(toDate); + * } + * + * sql.append("GROUP BY zm.zone_name "); + * sql.append("ORDER BY zm.zone_name "); + * + * List> result = jdbcTemplate.queryForList(sql.toString(), + * params.toArray()); + * + * response.put("status", "Success"); + * response.put("data", result); + * + * } catch (Exception e) { + * + * e.printStackTrace(); + * + * response.put("status", "Error"); + * response.put("message", "Something went wrong"); + * + * } + * + * return response; + * } + */ + public Map getZoneActivity(String fromDate, String toDate, Integer complaintId) { + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + List params = new ArrayList<>(); + + sql.append("SELECT "); + sql.append("zm.zone_name, "); + + sql.append("COUNT(DISTINCT cd.ref_id) AS total_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NOT NULL "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(comp.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN comp.ref_id END) AS completed_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NULL "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(cd.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN cd.ref_id END) AS pending_count "); + + sql.append("FROM gcc_street_vendor.zone_master zm "); + + sql.append("LEFT JOIN complaint_details cd "); + sql.append("ON zm.zone_name = cd.zone "); + sql.append("AND cd.is_delete = 0 "); + sql.append("AND cd.is_active = 1 "); + + if (complaintId != null) { + sql.append("AND cd.complaint_id = ? "); + params.add(complaintId); + } + + sql.append("LEFT JOIN completion comp "); + sql.append("ON comp.ref_id = cd.ref_id "); + + sql.append("GROUP BY zm.zone_name "); + sql.append("ORDER BY zm.zone_name "); + + List> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); + + response.put("status", "Success"); + response.put("data", result); + + } catch (Exception e) { + e.printStackTrace(); + response.put("status", "Error"); + } + + return response; + } + + public Map getComplaintTypes() { + + Map response = new HashMap<>(); + + try { + + String sql = "SELECT complaint_id, complaint_name FROM complaint_master"; + + List> result = jdbcTemplate.queryForList(sql); + + response.put("status", "Success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + response.put("status", "Error"); + response.put("message", "Something went wrong"); + } + + return response; + } + + public Map getWardActivity(String zone, String complaintId, + String fromDate, String toDate) { + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + List params = new ArrayList<>(); + + sql.append("SELECT "); + sql.append("wm.ward_name AS ward, "); + + sql.append("COUNT(DISTINCT cd.ref_id) AS total_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NOT NULL "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(comp.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN comp.ref_id END) AS completed_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NULL "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(cd.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN cd.ref_id END) AS pending_count "); + + sql.append("FROM gcc_street_vendor.ward_master wm "); + + // Complaint details join + sql.append("LEFT JOIN complaint_details cd "); + sql.append("ON wm.ward_name = cd.ward "); + // this below condition is here because if to get all the ward if no data for + // that ward also + sql.append("AND cd.zone = ? "); + params.add(zone); + + sql.append("AND cd.is_delete = 0 "); + sql.append("AND cd.is_active = 1 "); + + if (complaintId != null && !complaintId.isEmpty()) { + sql.append("AND cd.complaint_id = ? "); + params.add(complaintId); + } + + // Completion join + sql.append("LEFT JOIN completion comp "); + sql.append("ON comp.ref_id = cd.ref_id "); + + // Zone filter + sql.append("WHERE wm.zone_id = ? "); + params.add(zone); + + sql.append("GROUP BY wm.ward_name "); + sql.append("ORDER BY wm.ward_name "); + + List> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); + + response.put("status", "Success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + response.put("status", "Error"); + response.put("message", "Something went wrong"); + } + + return response; + } + + /* + * public Map getWardActivity(String zone, String complaintId, + * String fromDate, String toDate) { + * + * Map response = new HashMap<>(); + * + * try { + * + * StringBuilder sql = new StringBuilder(); + * List params = new ArrayList<>(); + * + * sql.append("SELECT "); + * sql.append("wm.ward_name AS ward, "); + * + * sql.append("COUNT(cd.ref_id) AS total_count, "); + * + * sql. + * append("COUNT(CASE WHEN cd.status='completed' THEN 1 END) AS completed_count, " + * ); + * + * sql. + * append("COUNT(CASE WHEN cd.status='pending' THEN 1 END) AS pending_count "); + * + * sql.append("FROM gcc_street_vendor.ward_master wm "); + * + * sql.append("LEFT JOIN complaint_details cd "); + * sql.append("ON wm.ward_name = cd.ward "); + * sql.append("AND cd.zone = ? "); + * params.add(zone); + * + * sql.append("AND cd.is_delete = 0 "); + * sql.append("AND cd.is_active = 1 "); + * + * if (complaintId != null && !complaintId.isEmpty()) { + * sql.append("AND cd.complaint_id = ? "); + * params.add(complaintId); + * } + * + * if (fromDate != null && !fromDate.isEmpty() && toDate != null && + * !toDate.isEmpty()) { + * sql.append("AND DATE(cd.cdate) BETWEEN ? AND ? "); + * params.add(fromDate); + * params.add(toDate); + * } + * + * sql.append("WHERE wm.zone_id = ? "); + * params.add(zone); + * + * sql.append("GROUP BY wm.ward_name "); + * sql.append("ORDER BY wm.ward_name "); + * + * List> result = jdbcTemplate.queryForList(sql.toString(), + * params.toArray()); + * + * response.put("status", "Success"); + * response.put("data", result); + * + * } catch (Exception e) { + * + * e.printStackTrace(); + * response.put("status", "Error"); + * response.put("message", "Something went wrong"); + * + * } + * + * return response; + * } + */ + + public Map getComplaintDetails(String zone, String ward, + String complaintId, String fromDate, String toDate) { + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + List params = new ArrayList<>(); + + String beforeImageColumn = "cd.image_path"; + String afterImageColumn = "comp.image_path"; + + sql.append("SELECT "); + sql.append("cm.complaint_name, "); + sql.append("cd.street_name, "); + sql.append("cd.status, "); + sql.append("DATE_FORMAT(cd.cdate,'%d-%m-%Y') AS complaint_created_date, "); + sql.append("IFNULL(DATE_FORMAT(comp.cdate,'%d-%m-%Y'),'Pending') AS completion_date, "); + /* + * sql.append("DATE(cd.cdate) AS complaint_created_date, "); + * sql.append("IFNULL(DATE(comp.cdate),'Pending') AS completion_date, "); + */ + + sql.append( + "CONCAT('" + fileBaseUrl + "/gccofficialapp/files'," + beforeImageColumn + ") AS before_image, "); + sql.append("CONCAT('" + fileBaseUrl + "/gccofficialapp/files'," + afterImageColumn + ") AS after_image "); + + sql.append("FROM complaint_details cd "); + + sql.append("LEFT JOIN complaint_master cm "); + sql.append("ON cm.complaint_id = cd.complaint_id "); + + sql.append("LEFT JOIN completion comp "); + sql.append("ON comp.ref_id = cd.ref_id "); + + sql.append("WHERE cd.zone = ? "); + params.add(zone); + + sql.append("AND cd.ward = ? "); + params.add(ward); + + sql.append("AND cd.is_delete = 0 "); + sql.append("AND cd.is_active = 1 "); + + if (complaintId != null && !complaintId.isEmpty()) { + sql.append("AND cd.complaint_id = ? "); + params.add(complaintId); + } + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + + sql.append("AND ( "); + + sql.append("(comp.ref_id IS NOT NULL AND DATE(comp.cdate) BETWEEN ? AND ?) "); + + sql.append("OR "); + + sql.append("(comp.ref_id IS NULL AND DATE(cd.cdate) BETWEEN ? AND ?) "); + + sql.append(") "); + + params.add(fromDate); + params.add(toDate); + params.add(fromDate); + params.add(toDate); + } + + List> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); + + response.put("status", "Success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + response.put("status", "Error"); + } + + return response; + } + + /* + * public Map getComplaintDetails(String zone, String ward, + * String complaintId, String fromDate, String toDate) { + * + * Map response = new HashMap<>(); + * + * try { + * + * StringBuilder sql = new StringBuilder(); + * List params = new ArrayList<>(); + * String beforeImageColumn = "cd.image_path"; + * String afterImageColumn = "comp.image_path"; + * + * sql.append("SELECT "); + * sql.append("cm.complaint_name, "); + * sql.append("cd.street_name, "); + * sql.append("cd.status, "); + * sql.append( + * "CONCAT('" + fileBaseUrl + "/gccofficialapp/files'," + beforeImageColumn + + * ") AS before_image, "); + * + * sql.append("CONCAT('" + fileBaseUrl + "/gccofficialapp/files'," + + * afterImageColumn + ") AS after_image "); + * + * sql.append("FROM complaint_details cd "); + * + * sql.append("LEFT JOIN complaint_master cm "); + * sql.append("ON cm.complaint_id=cd.complaint_id "); + * + * sql.append("LEFT JOIN completion comp "); + * sql.append("ON comp.ref_id=cd.ref_id "); + * + * sql.append("WHERE cd.zone=? "); + * params.add(zone); + * + * sql.append("AND cd.ward=? "); + * params.add(ward); + * + * if (complaintId != null && !complaintId.isEmpty()) { + * sql.append("AND cd.complaint_id=? "); + * params.add(complaintId); + * } + * + * if (fromDate != null && !fromDate.isEmpty() && toDate != null && + * !toDate.isEmpty()) { + * sql.append("AND DATE(cd.cdate) BETWEEN ? AND ? "); + * params.add(fromDate); + * params.add(toDate); + * } + * + * List> result = jdbcTemplate.queryForList(sql.toString(), + * params.toArray()); + * + * response.put("status", "Success"); + * response.put("data", result); + * + * } catch (Exception e) { + * + * e.printStackTrace(); + * response.put("status", "Error"); + * } + * + * return response; + * + * } + */ + +} diff --git a/src/main/resources/templates/modules/iecomplaintsreport.html b/src/main/resources/templates/modules/iecomplaintsreport.html new file mode 100644 index 0000000..91995be --- /dev/null +++ b/src/main/resources/templates/modules/iecomplaintsreport.html @@ -0,0 +1,763 @@ + + + + + IE Complaints Report + + + + + + + + + + + + + +
+

IE Complaints Report

+
+ +
+ + + + + + + + + + +
Total ComplaintsCompletedPending
+ + +
+
+ +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ +
+
+ +
+ +
+ +
+ +
+ +
+ +
+
+ + +
+
+ + + + + + + + + + + + + + +
ZoneTotalCompletedPending
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file