Browse Source

Implemented report module for three ie complaint and tenment complaint

master
AJITHKUMAR12 5 months ago
parent
commit
b948f92d8b
  1. 20
      src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java
  2. 49
      src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java
  3. 6
      src/main/java/com/gcc/commissionerreview/controller/MainController.java
  4. 98
      src/main/java/com/gcc/commissionerreview/controller/TenementController.java
  5. 318
      src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java
  6. 489
      src/main/java/com/gcc/commissionerreview/service/TenementService.java
  7. 2209
      src/main/resources/templates/modules/vendorreport.html

20
src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java

@ -17,11 +17,11 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
public class DataSourceConfig {
// private static String host = "localhost:3306";
// private static String dbpassword = "root";
// private static String host = "localhost:3306";
// private static String dbpassword = "root";
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";
public static class MyDataSourceConfig {
@Primary
@ -179,7 +179,15 @@ public class DataSourceConfig {
return dataSource;
}
////////// Tenements//////////////////////
@Bean(name = "mysqlTenementDataSource")
public DataSource mysqlTenementDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://" + host + "/gcc_tenements");
dataSource.setUsername("root");
dataSource.setPassword(dbpassword);
return dataSource;
}
}

49
src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java

@ -84,4 +84,53 @@ public class IeComplaintsApiController {
iecomplaintservice.getComplaintDetails(zone, ward, complaintId, fromDate, toDate));
}
@GetMapping("/vendorzoneActivity")
public ResponseEntity<Map<String, Object>> vendorzoneActivity(
@RequestParam(required = false) String fromDate,
@RequestParam(required = false) String toDate,
@RequestParam(required = false) Integer complaintId) {
return ResponseEntity.ok(
iecomplaintservice.getvendorZoneActivity(fromDate, toDate, complaintId));
}
@GetMapping("/vendorwardActivity")
public ResponseEntity<Map<String, Object>> vendorwardActivity(
@RequestParam String zone,
@RequestParam(required = false) String complaintId,
@RequestParam(required = false) String fromDate,
@RequestParam(required = false) String toDate) {
return ResponseEntity.ok(
iecomplaintservice.getvendorWardActivity(zone, complaintId, fromDate, toDate));
}
@GetMapping("/vendorcomplaintDetails")
public ResponseEntity<Map<String, Object>> vendorcomplaintDetails(
@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.getvendorComplaintDetails(zone, ward, complaintId, fromDate, toDate));
}
@GetMapping("/vendorcomplaintDashboard")
public ResponseEntity<Map<String, Object>> vendorcomplaintDashboard(
@RequestParam(required = false) String fromDate,
@RequestParam(required = false) String toDate) {
return ResponseEntity.ok(
iecomplaintservice.getvendorComplaintDashboard(fromDate, toDate));
}
}

6
src/main/java/com/gcc/commissionerreview/controller/MainController.java

@ -311,7 +311,6 @@ public class MainController {
return "modules/fooddistribution/fooddistributiondetailedreport";
}
@GetMapping("/posterreport")
public String posterdetailedreport(Model model) {
return "modules/poster/posterReport";
@ -322,4 +321,9 @@ public class MainController {
return "modules/poster/bannerReport";
}
@GetMapping("/vendorreport")
public String vendorreport(Model model) {
return "modules/vendorreport";
}
}

98
src/main/java/com/gcc/commissionerreview/controller/TenementController.java

@ -0,0 +1,98 @@
package com.gcc.commissionerreview.controller;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
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;
import com.gcc.commissionerreview.service.TenementService;
@RestController
@RequestMapping("/commissionerreview/api/tenement")
public class TenementController {
@Autowired
private TenementService tenementService;
@GetMapping("/tenementDashboard")
public ResponseEntity<Map<String, Object>> getTenementDashboard(
@RequestParam String fromDate,
@RequestParam String toDate) {
return ResponseEntity.ok(
tenementService.getTenementDashboard(
fromDate,
toDate));
}
@GetMapping("/zoneActivity")
public ResponseEntity<Map<String, Object>> zoneActivity(
@RequestParam(required = false) String fromDate,
@RequestParam(required = false) String toDate) {
return ResponseEntity.ok(
tenementService.getZoneActivity(fromDate, toDate));
}
@GetMapping("/wardActivity")
public ResponseEntity<Map<String, Object>> wardActivity(
@RequestParam String zone,
@RequestParam(required = false) String fromDate,
@RequestParam(required = false) String toDate) {
return ResponseEntity.ok(
tenementService.getWardActivity(
zone,
fromDate,
toDate));
}
// ================= CONTROLLER =================
@GetMapping("/getSchemeWiseReport")
public ResponseEntity<Map<String, Object>> getSchemeWiseReport(
@RequestParam String ward,
@RequestParam(required = false) String fromDate,
@RequestParam(required = false) String toDate) {
return ResponseEntity.ok(
tenementService.getSchemeWiseReport(
ward,
fromDate,
toDate));
}
@GetMapping("/getComplaintDetails")
public Map<String, Object> getComplaintDetails(
@RequestParam String ward,
@RequestParam String schemeid,
@RequestParam(required = false) String fromDate,
@RequestParam(required = false) String toDate) {
return tenementService.getComplaintDetails(
ward,
schemeid,
fromDate,
toDate);
}
}

318
src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java

@ -529,6 +529,324 @@ public class IeComplaintsService {
return response;
}
// vendor api
public Map<String, Object> getvendorZoneActivity(String fromDate, String toDate, Integer complaintId) {
Map<String, Object> response = new HashMap<>();
try {
StringBuilder sql = new StringBuilder();
List<Object> params = new ArrayList<>();
sql.append("SELECT ");
sql.append("zm.zone_name, ");
sql.append("COUNT(DISTINCT CASE ");
if (fromDate != null && !fromDate.isEmpty()
&& toDate != null && !toDate.isEmpty()) {
sql.append("WHEN DATE(cd.cdate) BETWEEN ? AND ? ");
params.add(fromDate);
params.add(toDate);
} else {
sql.append("WHEN 1=1 ");
}
sql.append("THEN cd.ref_id END) 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 ");
sql.append("AND cd.complaint_id IN (4,6,12)");
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<Map<String, Object>> 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<String, Object> getvendorWardActivity(String zone, String complaintId,
String fromDate, String toDate) {
Map<String, Object> response = new HashMap<>();
try {
StringBuilder sql = new StringBuilder();
List<Object> 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 ");
sql.append("AND cd.complaint_id IN (4,6,12)");
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<Map<String, Object>> 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<String, Object> getvendorComplaintDetails(String zone, String ward,
String complaintId, String fromDate, String toDate) {
Map<String, Object> response = new HashMap<>();
try {
StringBuilder sql = new StringBuilder();
List<Object> 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("cd.street_name AS complaint_street_name, ");
sql.append("comp.street_name AS completion_street_name, ");
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 ");
sql.append("AND cd.complaint_id IN (4,6,12)");
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<Map<String, Object>> 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<String, Object> getvendorComplaintDashboard(String fromDate, String toDate) {
Map<String, Object> response = new HashMap<>();
try {
StringBuilder sql = new StringBuilder();
List<Object> 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 ");
sql.append("AND cd.complaint_id IN (4,6,12) ");
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 ");
sql.append("AND cd.complaint_id IN (4,6,12) ");
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("WHERE cm.complaint_id IN (4,6,12) ");
sql.append("GROUP BY cm.complaint_id, cm.complaint_name ");
sql.append("ORDER BY cm.complaint_id");
List<Map<String, Object>> 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<String, Object> getComplaintDetails(String zone, String ward,
* String complaintId, String fromDate, String toDate) {

489
src/main/java/com/gcc/commissionerreview/service/TenementService.java

@ -0,0 +1,489 @@
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 TenementService {
@Autowired
@Value("${fileBaseUrl}")
private String fileBaseUrl;
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private Environment environment;
@Autowired
public void setDataSource(@Qualifier("mysqlTenementDataSource") DataSource tenementDataSource) {
this.jdbcTemplate = new JdbcTemplate(tenementDataSource);
}
public TenementService(Environment environment) {
this.environment = environment;
this.fileBaseUrl = environment.getProperty("fileBaseUrl");
}
public Map<String, Object> getTenementDashboard(
String fromDate,
String toDate) {
Map<String, Object> response = new HashMap<>();
try {
String sql = "";
List<Map<String, Object>> result;
// ✅ if no date filter
if (fromDate == null || fromDate.isBlank()
|| toDate == null || toDate.isBlank()) {
sql = "SELECT " +
"'Tenement' AS complaint_name, " +
"COUNT(*) AS total_count, " +
"COUNT(CASE " +
"WHEN final_status IN ('completed','verified') " +
"THEN 1 END) AS completed_count, " +
"COUNT(CASE " +
"WHEN final_status = 'created' " +
"THEN 1 END) AS pending_count " +
"FROM issue_list1";
result = jdbcTemplate.queryForList(sql);
} else {
// ✅ with date filter
sql = "SELECT " +
"'Tenement' AS complaint_name, " +
"COUNT(*) AS total_count, " +
"COUNT(CASE " +
"WHEN final_status IN ('completed','verified') " +
"THEN 1 END) AS completed_count, " +
"COUNT(CASE " +
"WHEN final_status = 'created' " +
"THEN 1 END) AS pending_count " +
"FROM issue_list1 " +
"WHERE DATE(cdate) BETWEEN ? AND ?";
result = jdbcTemplate.queryForList(
sql,
fromDate,
toDate);
}
response.put("status", "Success");
response.put("data", result);
} catch (Exception e) {
e.printStackTrace();
response.put("status", "Error");
response.put("message", e.getMessage());
}
return response;
}
public Map<String, Object> getZoneActivity(
String fromDate,
String toDate) {
Map<String, Object> response = new HashMap<>();
try {
String sql = "";
List<Map<String, Object>> result;
// ✅ PAGE LOAD -> fetch all data without date filter
if (fromDate == null || fromDate.isBlank()
|| toDate == null || toDate.isBlank()) {
sql =
"SELECT " +
"am.zone, " +
// ✅ total complaints
"COUNT(DISTINCT il1.id) AS total_complaint_count, " +
// ✅ completed
"COUNT(DISTINCT CASE " +
"WHEN il1.final_status IN ('completed','verified') " +
"THEN il1.id END) " +
"AS total_complaint_closed_count, " +
// ✅ pending
"COUNT(DISTINCT CASE " +
"WHEN il1.final_status = 'created' " +
"THEN il1.id END) " +
"AS total_complaint_pending_count " +
"FROM asset_master am " +
"LEFT JOIN asset_list al " +
"ON al.am_id = am.id " +
"LEFT JOIN issue_list1 il1 " +
"ON il1.assetlist_id = al.id " +
"GROUP BY am.zone " +
"ORDER BY am.zone";
result = jdbcTemplate.queryForList(sql);
} else {
// ✅ SEARCH BUTTON -> apply date filter
sql =
"SELECT " +
"am.zone, " +
// ✅ total complaints
"COUNT(DISTINCT il1.id) AS total_complaint_count, " +
// ✅ completed
"COUNT(DISTINCT CASE " +
"WHEN il1.final_status IN ('completed','verified') " +
"THEN il1.id END) " +
"AS total_complaint_closed_count, " +
// ✅ pending
"COUNT(DISTINCT CASE " +
"WHEN il1.final_status = 'created' " +
"THEN il1.id END) " +
"AS total_complaint_pending_count " +
"FROM asset_master am " +
"LEFT JOIN asset_list al " +
"ON al.am_id = am.id " +
"LEFT JOIN issue_list1 il1 " +
"ON il1.assetlist_id = al.id " +
"AND DATE(il1.cdate) BETWEEN ? AND ? " +
"GROUP BY am.zone " +
"ORDER BY am.zone";
result = jdbcTemplate.queryForList(
sql,
fromDate,
toDate);
}
response.put("status", "success");
response.put("data", result);
} catch (Exception e) {
e.printStackTrace();
response.put("status", "error");
response.put("message", e.getMessage());
}
return response;
}
public Map<String, Object> getWardActivity(
String zone,
String fromDate,
String toDate) {
Map<String, Object> response = new HashMap<>();
try {
StringBuilder sql = new StringBuilder();
List<Object> params = new ArrayList<>();
sql.append("SELECT ");
sql.append("am.ward, ");
// total
sql.append("COUNT(DISTINCT il1.id) ");
sql.append("AS total_complaint_count, ");
// completed
sql.append("COUNT(DISTINCT CASE ");
sql.append("WHEN il1.final_status IN ('completed','verified') ");
sql.append("THEN il1.id END) ");
sql.append("AS total_complaint_closed_count, ");
// pending
sql.append("COUNT(DISTINCT CASE ");
sql.append("WHEN il1.final_status = 'created' ");
sql.append("THEN il1.id END) ");
sql.append("AS total_complaint_pending_count ");
sql.append("FROM asset_master am ");
sql.append("LEFT JOIN asset_list al ");
sql.append("ON al.am_id = am.id ");
sql.append("LEFT JOIN issue_list1 il1 ");
sql.append("ON il1.assetlist_id = al.id ");
sql.append("WHERE am.zone = ? ");
params.add(zone);
// date filter
if (fromDate != null && !fromDate.isBlank()
&& toDate != null && !toDate.isBlank()) {
sql.append("AND DATE(il1.cdate) BETWEEN ? AND ? ");
params.add(fromDate);
params.add(toDate);
}
sql.append("GROUP BY am.ward ");
sql.append("ORDER BY am.ward ");
List<Map<String, Object>> 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", e.getMessage());
}
return response;
}
// ================= SERVICE =================
public Map<String, Object> getSchemeWiseReport(
String ward,
String fromDate,
String toDate) {
Map<String, Object> response = new HashMap<>();
try {
StringBuilder sql = new StringBuilder();
List<Object> params = new ArrayList<>();
sql.append("SELECT ");
sql.append("am.scheme_name, ");
sql.append("am.id as schemeid, ");
// TOTAL
sql.append("COUNT(DISTINCT il1.id) ");
sql.append("AS total_complaint_count, ");
// COMPLETED
sql.append("COUNT(DISTINCT CASE ");
sql.append("WHEN il1.final_status IN ('completed','verified') ");
sql.append("THEN il1.id END) ");
sql.append("AS total_complaint_closed_count, ");
// PENDING
sql.append("COUNT(DISTINCT CASE ");
sql.append("WHEN il1.final_status = 'created' ");
sql.append("THEN il1.id END) ");
sql.append("AS total_complaint_pending_count ");
sql.append("FROM asset_master am ");
sql.append("LEFT JOIN asset_list al ");
sql.append("ON al.am_id = am.id ");
sql.append("LEFT JOIN issue_list1 il1 ");
sql.append("ON il1.assetlist_id = al.id ");
sql.append("WHERE am.ward = ? ");
params.add(ward);
// DATE FILTER
if (fromDate != null && !fromDate.isBlank()
&& toDate != null && !toDate.isBlank()) {
sql.append("AND DATE(il1.cdate) BETWEEN ? AND ? ");
params.add(fromDate);
params.add(toDate);
}
sql.append("GROUP BY am.scheme_name, am.id ");
sql.append("ORDER BY am.scheme_name ");
List<Map<String, Object>> 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", e.getMessage());
}
return response;
}
public Map<String, Object> getComplaintDetails(
String ward,
String schemeid,
String fromDate,
String toDate) {
Map<String, Object> response = new HashMap<>();
try {
StringBuilder sql = new StringBuilder();
List<Object> params = new ArrayList<>();
sql.append("SELECT ");
sql.append("il1.id AS issuelist1_id, ");
sql.append("il1.final_status, ");
sql.append("DATE_FORMAT(il1.cdate,'%d-%m-%Y') AS created_date,");
// sql.append(
// "IFNULL(DATE_FORMAT(il1.cdate,'%d-%m-%Y %h:%i %p'),'') AS created_date, ");
sql.append("IFNULL(il1.remarks,'') AS created_remarks, ");
sql.append(
"CASE " +
"WHEN il1.before_image IS NOT NULL " +
"THEN CONCAT('" + fileBaseUrl + "/gccofficialapp/files', il1.before_image) " +
"ELSE '' END AS before_image, ");
/*
* sql.append(
* "IFNULL(DATE_FORMAT(il2.cdate,'%d-%m-%Y %h:%i %p'),'') AS completed_date, ");
*/
sql.append("DATE_FORMAT(il2.cdate,'%d-%m-%Y') AS completed_date,");
sql.append(
"IFNULL(il2.remarks,'') AS completed_remarks, ");
sql.append(
"CASE " +
"WHEN il2.after_image IS NOT NULL " +
"THEN CONCAT('" + fileBaseUrl + "/gccofficialapp/files', il2.after_image) " +
"ELSE '' END AS after_image, ");
sql.append(
"IFNULL(DATE_FORMAT(il3.cdate,'%d-%m-%Y %h:%i %p'),'') AS verified_date, ");
sql.append(
"IFNULL(il3.remarks,'') AS verified_remarks, ");
sql.append(
"CASE " +
"WHEN il3.Verify_image IS NOT NULL " +
"THEN CONCAT('" + fileBaseUrl + "/gccofficialapp/files', il3.Verify_image) " +
"ELSE '' END AS verify_image ");
sql.append("FROM issue_list1 il1 ");
sql.append("LEFT JOIN asset_list al ");
sql.append("ON al.id = il1.assetlist_id ");
sql.append("LEFT JOIN issue_list2 il2 ");
sql.append("ON il2.issuelist1_id = il1.id ");
sql.append("LEFT JOIN issue_list3 il3 ");
sql.append("ON il3.issuelist1_id = il1.id ");
sql.append("WHERE il1.ward = ? ");
params.add(ward);
sql.append("AND al.am_id = ? ");
params.add(schemeid);
// ✅ only if dates available
if (fromDate != null && !fromDate.isBlank()
&& toDate != null && !toDate.isBlank()) {
sql.append("AND DATE(il1.cdate) BETWEEN ? AND ? ");
params.add(fromDate);
params.add(toDate);
}
sql.append("ORDER BY il1.id DESC ");
List<Map<String, Object>> 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", e.getMessage());
}
return response;
}
}

2209
src/main/resources/templates/modules/vendorreport.html
File diff suppressed because it is too large
View File

Loading…
Cancel
Save