diff --git a/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java b/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java index 38cde82..0c23936 100644 --- a/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java +++ b/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java @@ -17,8 +17,8 @@ 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"; @@ -189,5 +189,30 @@ public class DataSourceConfig { dataSource.setPassword(dbpassword); return dataSource; } + + + ////////// GCC Street Vendor////////////////////// + @Bean(name = "mysqlStreetVendorDataSource") + public DataSource mysqlStreetVendorDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + dataSource.setUrl("jdbc:mysql://" + host + "/gcc_street_vendor"); + dataSource.setUsername("root"); + dataSource.setPassword(dbpassword); + return dataSource; + } + + ////////// Vending Committee ////////////////////// + @Bean(name = "mysqlVendingCommitteeDataSource") + public DataSource mysqlVendingCommitteeDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + dataSource.setUrl("jdbc:mysql://" + host + "/vendingcommitte"); + dataSource.setUsername("root"); + dataSource.setPassword(dbpassword); + return dataSource; + } + + } diff --git a/src/main/java/com/gcc/commissionerreview/controller/MainController.java b/src/main/java/com/gcc/commissionerreview/controller/MainController.java index 0561e6b..caa1222 100644 --- a/src/main/java/com/gcc/commissionerreview/controller/MainController.java +++ b/src/main/java/com/gcc/commissionerreview/controller/MainController.java @@ -325,5 +325,15 @@ public class MainController { public String vendorreport(Model model) { return "modules/vendorreport"; } + + @GetMapping("/stvendor/overallreport") + public String stvendor_overallreport(Model model) { + return "modules/streetvendor/overalldetails"; + } + + @GetMapping("/stvendor/inspectiondetails") + public String stvendor_inspectiondetails(Model model) { + return "modules/streetvendor/inspectiondetails"; + } } diff --git a/src/main/java/com/gcc/commissionerreview/controller/StreetVendorApiController.java b/src/main/java/com/gcc/commissionerreview/controller/StreetVendorApiController.java new file mode 100644 index 0000000..0e19ad2 --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/controller/StreetVendorApiController.java @@ -0,0 +1,46 @@ +package com.gcc.commissionerreview.controller; + +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +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.StreetVendorService; + +@RestController +@RequestMapping("/commissionerreview/api/streetvendor") +public class StreetVendorApiController { + + @Autowired + private StreetVendorService stvservice; + + @GetMapping("/getzoneoveralldetails") + public List> getzoneoveralldetails(@RequestParam String fromdate,@RequestParam String todate) + { + + return stvservice.getzoneoveralldetails(fromdate,todate); + } + + @GetMapping("/getwardoveralldetails") + public List> getwardoveralldetails(@RequestParam String fromdate,@RequestParam String todate,@RequestParam String zone) + { + return stvservice.getwardoveralldetails(fromdate, todate, zone); + } + + @GetMapping("/getzoneinspectiondetails") + public List> getzoneinspectiondetails(@RequestParam String fromdate,@RequestParam String todate) + { + return stvservice.getzoneinspectiondetails(fromdate,todate); + } + + @GetMapping("/getwardinspectiondetails") + public List> getwardinspectiondetails(@RequestParam String fromdate,@RequestParam String todate,@RequestParam String zone) + { + return stvservice.getwardinspectiondetails(fromdate,todate,zone); + } + +} diff --git a/src/main/java/com/gcc/commissionerreview/service/StreetVendorService.java b/src/main/java/com/gcc/commissionerreview/service/StreetVendorService.java new file mode 100644 index 0000000..beac4ca --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/service/StreetVendorService.java @@ -0,0 +1,475 @@ +package com.gcc.commissionerreview.service; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.ArrayList; +import java.util.List; + +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.core.env.Environment; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +@Service +public class StreetVendorService { + + private final Environment environment; + + private String fileBaseUrl; + + @Autowired + private JdbcTemplate gccstrTemplate; + + @Autowired + private JdbcTemplate vendingcommitteTemplate; + + public StreetVendorService(Environment environment) { + this.environment = environment; + this.fileBaseUrl = environment.getProperty("fileBaseUrl"); + } + + @Autowired + public void setDataSource1(@Qualifier("mysqlVendingCommitteeDataSource") DataSource dataSource) { + this.vendingcommitteTemplate = new JdbcTemplate(dataSource); + } + + @Autowired + public void setDataSource2(@Qualifier("mysqlStreetVendorDataSource") DataSource dataSource) { + this.gccstrTemplate = new JdbcTemplate(dataSource); + } + + public List> getzoneoveralldetails(String fromdate, String todate) { + + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT "); + sql.append(" vd.zone AS zone, "); + + // 1. Application Received + sql.append(" COUNT(DISTINCT vd.id) AS application_received, "); + + // 2. Assistant Processed + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) AS assistant_processed, "); + + // 3. LI Processed + sql.append(" COUNT(DISTINCT va1.vdid) AS li_processed, "); + + // 4. ARO Processed + sql.append(" COUNT(DISTINCT va2.vdid) AS aro_processed, "); + + // 5. EE Processed + sql.append(" COUNT(DISTINCT va3.vdid) AS ee_processed, "); + + // 6. Committee Processed + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) AS committee_processed, "); + + // 7. Total Processed + sql.append(" ( "); + + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" + COUNT(DISTINCT va1.vdid) "); + sql.append(" + COUNT(DISTINCT va2.vdid) "); + sql.append(" + COUNT(DISTINCT va3.vdid) "); + + sql.append(" + COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" ) AS total_processed, "); + + // 8. Pending + sql.append(" ( "); + sql.append(" COUNT(DISTINCT vd.id) - "); + + sql.append(" ( "); + + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" + COUNT(DISTINCT va1.vdid) "); + sql.append(" + COUNT(DISTINCT va2.vdid) "); + sql.append(" + COUNT(DISTINCT va3.vdid) "); + + sql.append(" + COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" ) "); + + sql.append(" ) AS pending, "); + + // 9. Processed within 30 days + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.cdate IS NOT NULL "); + sql.append(" AND DATEDIFF(vrl.cdate, vd.cdate) <= 30 "); + sql.append(" THEN vd.id "); + + sql.append(" WHEN vpl.cdate IS NOT NULL "); + sql.append(" AND DATEDIFF(vpl.cdate, vd.cdate) <= 30 "); + sql.append(" THEN vd.id "); + + sql.append(" END) AS processed_within_30_days "); + + sql.append(" FROM gcc_street_vendor.vendor_details vd "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_1 va1 "); + sql.append(" ON va1.vdid = vd.id "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_2 va2 "); + sql.append(" ON va2.vdid = vd.id "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_3 va3 "); + sql.append(" ON va3.vdid = vd.id "); + + sql.append(" LEFT JOIN vendingcommitte.vendor_request_list vrl "); + sql.append(" ON vrl.vdid = vd.id "); + + sql.append(" LEFT JOIN vendingcommitte.vendor_postponed_list vpl "); + sql.append(" ON vpl.vdid = vd.id "); + + sql.append(" WHERE vd.isactive = 1 "); + + List params = new ArrayList<>(); + + if (fromdate != null && !fromdate.isEmpty() + && todate != null && !todate.isEmpty()) { + + sql.append(" AND DATE(vd.cdate) BETWEEN ? AND ? "); + params.add(fromdate); + params.add(todate); + } + + sql.append(" AND vd.zone IS NOT NULL "); + + sql.append(" GROUP BY vd.zone "); + sql.append(" ORDER BY vd.zone "); + + List> reportList = + gccstrTemplate.queryForList(sql.toString(), params.toArray()); + + Map response = new LinkedHashMap<>(); + response.put("status", "Success"); + response.put("message", "Zone-wise Report"); + response.put("data", reportList); + + return Collections.singletonList(response); + } + + + public List> getwardoveralldetails(String fromdate, String todate, String zone) { + + + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT "); + sql.append(" vd.ward AS ward, "); + + // 1. Application Received + sql.append(" COUNT(DISTINCT vd.id) AS application_received, "); + + // 2. Assistant Processed + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) AS assistant_processed, "); + + // 3. LI Processed + sql.append(" COUNT(DISTINCT va1.vdid) AS li_processed, "); + + // 4. ARO Processed + sql.append(" COUNT(DISTINCT va2.vdid) AS aro_processed, "); + + // 5. EE Processed + sql.append(" COUNT(DISTINCT va3.vdid) AS ee_processed, "); + + // 6. Committee Processed + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) AS committee_processed, "); + + // 7. Total Processed + sql.append(" ( "); + + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" + COUNT(DISTINCT va1.vdid) "); + sql.append(" + COUNT(DISTINCT va2.vdid) "); + sql.append(" + COUNT(DISTINCT va3.vdid) "); + + sql.append(" + COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" ) AS total_processed, "); + + // 8. Pending + sql.append(" ( "); + sql.append(" COUNT(DISTINCT vd.id) - "); + + sql.append(" ( "); + + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" + COUNT(DISTINCT va1.vdid) "); + sql.append(" + COUNT(DISTINCT va2.vdid) "); + sql.append(" + COUNT(DISTINCT va3.vdid) "); + + sql.append(" + COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" ) "); + + sql.append(" ) AS pending, "); + + // 9. Processed within 30 days + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.cdate IS NOT NULL "); + sql.append(" AND DATEDIFF(vrl.cdate, vd.cdate) <= 30 "); + sql.append(" THEN vd.id "); + + sql.append(" WHEN vpl.cdate IS NOT NULL "); + sql.append(" AND DATEDIFF(vpl.cdate, vd.cdate) <= 30 "); + sql.append(" THEN vd.id "); + + sql.append(" END) AS processed_within_30_days "); + + sql.append(" FROM gcc_street_vendor.vendor_details vd "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_1 va1 "); + sql.append(" ON va1.vdid = vd.id "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_2 va2 "); + sql.append(" ON va2.vdid = vd.id "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_3 va3 "); + sql.append(" ON va3.vdid = vd.id "); + + sql.append(" LEFT JOIN vendingcommitte.vendor_request_list vrl "); + sql.append(" ON vrl.vdid = vd.id "); + + sql.append(" LEFT JOIN vendingcommitte.vendor_postponed_list vpl "); + sql.append(" ON vpl.vdid = vd.id "); + + sql.append(" WHERE vd.isactive = 1 "); + + List params = new ArrayList<>(); + + if (fromdate != null && !fromdate.isEmpty() + && todate != null && !todate.isEmpty()) { + + sql.append(" AND DATE(vd.cdate) BETWEEN ? AND ? "); + params.add(fromdate); + params.add(todate); + } + + if(zone != null && !zone.isEmpty()) { + sql.append(" AND vd.zone = ? "); + params.add(zone); + } + + sql.append(" AND vd.zone IS NOT NULL AND vd.ward IS NOT NULL "); + + + sql.append(" GROUP BY vd.ward "); + sql.append(" ORDER BY vd.ward "); + + List> reportList = + gccstrTemplate.queryForList(sql.toString(), params.toArray()); + + Map response = new LinkedHashMap<>(); + response.put("status", "Success"); + response.put("message","Zone:"+ zone+" Ward-wise Report"); + response.put("data", reportList); + + return Collections.singletonList(response); + + } + + public List> getzoneinspectiondetails(String fromdate, String todate) { + + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT "); + sql.append(" vd.zone AS zone, "); + + // 1. Application Received + sql.append(" COUNT(DISTINCT vd.id) AS application_received, "); + + // 2. LI Processed + sql.append(" COUNT(DISTINCT va1.vdid) AS li_processed, "); + + + // 8. Pending + sql.append(" ( "); + sql.append(" COUNT(DISTINCT vd.id) - "); + + + + sql.append(" COUNT(DISTINCT va1.vdid) "); + + + sql.append(" ) AS li_pending "); + + + sql.append(" FROM gcc_street_vendor.vendor_details vd "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_1 va1 "); + sql.append(" ON va1.vdid = vd.id "); + + + sql.append(" WHERE vd.isactive = 1 "); + + List params = new ArrayList<>(); + + if (fromdate != null && !fromdate.isEmpty() + && todate != null && !todate.isEmpty()) { + + sql.append(" AND DATE(vd.cdate) BETWEEN ? AND ? "); + params.add(fromdate); + params.add(todate); + } + + sql.append(" AND vd.zone IS NOT NULL "); + + sql.append(" GROUP BY vd.zone "); + sql.append(" ORDER BY vd.zone "); + + List> reportList = + gccstrTemplate.queryForList(sql.toString(), params.toArray()); + + Map response = new LinkedHashMap<>(); + response.put("status", "Success"); + response.put("message", "LI Inspection Zone-wise Report"); + response.put("data", reportList); + + return Collections.singletonList(response); + } + + public List> getwardinspectiondetails(String fromdate, String todate, String zone) { + + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT "); + sql.append(" vd.ward AS ward, "); + + // 1. Application Received + sql.append(" COUNT(DISTINCT vd.id) AS application_received, "); + + // 2. LI Processed + sql.append(" COUNT(DISTINCT va1.vdid) AS li_processed, "); + + + // 8. Pending + sql.append(" ( "); + sql.append(" COUNT(DISTINCT vd.id) - "); + + sql.append(" ( "); + + sql.append(" COUNT(DISTINCT va1.vdid) "); + + sql.append(" ) "); + + sql.append(" ) AS li_pending "); + + + sql.append(" FROM gcc_street_vendor.vendor_details vd "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_1 va1 "); + sql.append(" ON va1.vdid = vd.id "); + + + sql.append(" WHERE vd.isactive = 1 "); + + List params = new ArrayList<>(); + + if (fromdate != null && !fromdate.isEmpty() + && todate != null && !todate.isEmpty()) { + + sql.append(" AND DATE(vd.cdate) BETWEEN ? AND ? "); + params.add(fromdate); + params.add(todate); + } + + if(zone != null && !zone.isEmpty()) { + sql.append(" AND vd.zone = ? "); + params.add(zone); + } + + sql.append(" AND vd.zone IS NOT NULL AND vd.ward IS NOT NULL "); + + sql.append(" GROUP BY vd.ward "); + sql.append(" ORDER BY vd.ward "); + + List> reportList = + gccstrTemplate.queryForList(sql.toString(), params.toArray()); + + Map response = new LinkedHashMap<>(); + response.put("status", "Success"); + response.put("message","Zone:"+ zone+" Ward-wise Inspection Report"); + response.put("data", reportList); + + return Collections.singletonList(response); + + } + + +} diff --git a/src/main/resources/templates/modules/streetvendor/inspectiondetails.html b/src/main/resources/templates/modules/streetvendor/inspectiondetails.html new file mode 100644 index 0000000..e700960 --- /dev/null +++ b/src/main/resources/templates/modules/streetvendor/inspectiondetails.html @@ -0,0 +1,543 @@ + + + + StreetVendor Inspection Details + + + + + + + + + + + + +
+

Street Vendor - Inspection Report (LI)

+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ +
+ + + + + + + + + + + + + +
ZoneApplication ReceivedLI ProcessedLI Pending
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/modules/streetvendor/overalldetails.html b/src/main/resources/templates/modules/streetvendor/overalldetails.html new file mode 100644 index 0000000..2ca5020 --- /dev/null +++ b/src/main/resources/templates/modules/streetvendor/overalldetails.html @@ -0,0 +1,577 @@ + + + + StreetVendor Overall Details + + + + + + + + + + + + +
+

Street Vendor - Zonewise Report

+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
ZoneApplication ReceivedApplication ProcessedTotal ProcessedPending Processed within 30 days
Assistant ProcessedLI ProcessedARO ProcessedEE ProcessedCommittee Processed
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file