7 changed files with 3182 additions and 7 deletions
-
20src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java
-
49src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java
-
6src/main/java/com/gcc/commissionerreview/controller/MainController.java
-
98src/main/java/com/gcc/commissionerreview/controller/TenementController.java
-
318src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java
-
489src/main/java/com/gcc/commissionerreview/service/TenementService.java
-
2209src/main/resources/templates/modules/vendorreport.html
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue