From 0b232fe7c4d298e646803a98766f2b5290f041b3 Mon Sep 17 00:00:00 2001 From: Hariprasath S <113695067+Hariprasath4022@users.noreply.github.com> Date: Thu, 30 Jul 2026 10:22:41 +0530 Subject: [PATCH] Added PGR Complaints creating page in UI --- .../controller/Apicontroller.java | 22 + .../controller/Maincontroller.java | 5 + .../service/Greencommitteeservice.java | 406 ++++++++++++++ .../templates/modules/pgrcomplaints.html | 499 ++++++++++++++++++ 4 files changed, 932 insertions(+) create mode 100644 src/main/resources/templates/modules/pgrcomplaints.html diff --git a/src/main/java/com/gcc/greencommitte/controller/Apicontroller.java b/src/main/java/com/gcc/greencommitte/controller/Apicontroller.java index 8ff4da2..197833e 100644 --- a/src/main/java/com/gcc/greencommitte/controller/Apicontroller.java +++ b/src/main/java/com/gcc/greencommitte/controller/Apicontroller.java @@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; @@ -503,5 +504,26 @@ public class Apicontroller { "description", "Application withdrawn successfully", "ref_id", saveStatus)); } + + + //getpurninglist + + @GetMapping("/getpurninglist") + public List> getpurninglist() { + + return gcservice.getpurninglist(); + + } + + @PostMapping("/generatepgrcomplaints") + @ResponseBody + public ResponseEntity generatepgrcomplaints(String refid){ + + return gcservice.generatepgrcomplaints(refid); + } + + + + } diff --git a/src/main/java/com/gcc/greencommitte/controller/Maincontroller.java b/src/main/java/com/gcc/greencommitte/controller/Maincontroller.java index adc7c9f..381a99d 100644 --- a/src/main/java/com/gcc/greencommitte/controller/Maincontroller.java +++ b/src/main/java/com/gcc/greencommitte/controller/Maincontroller.java @@ -29,4 +29,9 @@ public class Maincontroller { public String withdrawpage(){ return "modules/withdrawpage"; } + + @GetMapping("/pgrcomplaints") + public String pgrcomplaints(){ + return "modules/pgrcomplaints"; + } } diff --git a/src/main/java/com/gcc/greencommitte/service/Greencommitteeservice.java b/src/main/java/com/gcc/greencommitte/service/Greencommitteeservice.java index 3108d6d..a7ed0ea 100644 --- a/src/main/java/com/gcc/greencommitte/service/Greencommitteeservice.java +++ b/src/main/java/com/gcc/greencommitte/service/Greencommitteeservice.java @@ -24,6 +24,23 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; + +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; + +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; + +import java.util.Base64; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.fasterxml.jackson.databind.ObjectMapper; + import com.gcc.greencommitte.config.AppConfig; @@ -607,6 +624,395 @@ public class Greencommitteeservice { } } + + +public List> getpurninglist() { + + String sql=" SELECT " + + " r.ref_id,r.cby, " + + " r.p_name, dm.name as deptname," + + " r.dept_name," + + " CHAR_LENGTH( " + + " COALESCE( " + + " NULLIF(r.p_name, ''), " + + " NULLIF(r.dept_name, ''), " + + " dm.name " + + " ) " + + " ) AS name_length, " + + " r.address, " + + " r.ph_no, " + + " r.gender, " + + " r.latitude, " + + " r.longitude, " + + " r.streetid,r.remarks, " + + "CHAR_LENGTH(r.remarks) AS remarks_length, " + + " ( " + + " SELECT cd.comp_nature_id " + + " FROM complaint_details cd " + + " WHERE cd.ref_id = r.ref_id " + + " AND cd.comp_nature_id IN (1,3) " + + " LIMIT 1 " + + " ) AS comp_nature_id, " + + " ( " + + " SELECT iu.img_path " + + " FROM img_uploads iu " + + " WHERE iu.ref_id = r.ref_id " + + " AND iu.is_active = 1 " + + " AND iu.is_delete = 0 " + + " ORDER BY iu.id " + + " LIMIT 1 " + + " ) AS img_path " + + "FROM reg_details r " + + "LEFT JOIN dept_master dm ON dm.id=r.dept_id " + + "WHERE r.is_active = 1 " + + "AND r.is_delete = 0 AND r.pgrticketno is NULL " + + "AND r.streetid IS NOT NULL " + + "AND EXISTS " + + "( " + + " SELECT 1 " + + " FROM complaint_details cd " + + " WHERE cd.ref_id = r.ref_id " + + " AND cd.comp_nature_id IN (1,3) " + + ") "; + + try { + return jdbcTemplate.queryForList(sql); + } catch (Exception e) { + e.printStackTrace(); + return Collections.emptyList(); + } + } + + + + public ResponseEntity generatepgrcomplaints(String refid) { + + try { + + String sql=" SELECT " + + " r.ref_id,r.cby, " + + " r.p_name,dm.name as deptname, " + + " r.dept_name," + + " r.address, " + + " r.ph_no, " + + " r.gender, " + + " r.latitude, " + + " r.longitude, " + + " r.streetid,r.remarks, " + + " ( " + + " SELECT cd.comp_nature_id " + + " FROM complaint_details cd " + + " WHERE cd.ref_id = r.ref_id " + + " AND cd.comp_nature_id IN (1,3) " + + " LIMIT 1 " + + " ) AS comp_nature_id, " + + " ( " + + " SELECT iu.img_path " + + " FROM img_uploads iu " + + " WHERE iu.ref_id = r.ref_id " + + " AND iu.is_active = 1 " + + " AND iu.is_delete = 0 " + + " ORDER BY iu.id " + + " LIMIT 1 " + + " ) AS img_path " + + "FROM reg_details r " + + "LEFT JOIN dept_master dm ON dm.id=r.dept_id " + + "WHERE r.is_active = 1 " + + "AND r.is_delete = 0 AND r.ref_id=? AND r.pgrticketno is NULL " + + "AND r.streetid IS NOT NULL " + + "AND EXISTS " + + "( " + + " SELECT 1 " + + " FROM complaint_details cd " + + " WHERE cd.ref_id = r.ref_id " + + " AND cd.comp_nature_id IN (1,3) " + + ") "; + + List> list = jdbcTemplate.queryForList(sql,refid); + + System.out.println("Total Generating Complaints : " + list.size()); + + if(list.isEmpty()) { + + return ResponseEntity.ok(Map.of( + "status", false, + "message", "No eligible complaint found for this Ref ID." + )); + } + + String complaintNumber=""; + + for (Map row : list) { + try { + + String refId = String.valueOf(row.get("ref_id")); + +// String imageUrl = ""; +// +// if(row.get("img_path") != null){ +// imageUrl = "https://gccservices.in/gccofficialapp/files" + row.get("img_path"); +// } + + //String imageBase64 = convertUrlToBase64(imageUrl); + + complaintNumber = sendComplaintToERP(row); + if(complaintNumber == null) { + + return ResponseEntity.ok(Map.of( + "status", false, + "message", "ERP complaint generation failed." + )); + } + + if(complaintNumber != null && !complaintNumber.equals("N/A")){ + + jdbcTemplate.update( + "UPDATE reg_details SET pgrticketno=? WHERE ref_id=?", + complaintNumber, + refId + ); + + jdbcTemplate.update( + "UPDATE complaint_details " + + "SET is_active=0, is_delete=1 " + + "WHERE ref_id=? " + + "AND comp_nature_id IN (1,3)", + refId + ); + + System.out.println(refId + " -> " + complaintNumber); + + } + + } catch (Exception e) { + System.out.println("Failed RefId : " + row.get("ref_id")); + e.printStackTrace(); + } + } + + return ResponseEntity.ok(Map.of( + "status", true, + "message", "PGR Complaint generation completed.", + "complaintNumber",complaintNumber, + "total", list.size() + )); + + + + } catch (Exception e) { + e.printStackTrace(); + return ResponseEntity.internalServerError().body( + Map.of( + "status", false, + "message", e.getMessage() + ) + ); + } + + } +private String sendComplaintToERP(Map row) { + + try { + + String externalUrl = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice"; + + URL url = new URL(externalUrl); + + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + conn.setDoOutput(true); + + String complaintType = "454"; + String complaintTitle = "Tree Pruning"; + + //System.out.println("Name : " + getString(row.get("p_name"))); + + String complainantName = getComplainantName(row); + + String params = + "serviceId=RegComplaint" + + "&ComplainantName=" + URLEncoder.encode(complainantName, "UTF-8") + + "&ComplainantAddr=" + URLEncoder.encode(getString(row.get("address")), "UTF-8") + + "&MobileNo=" + URLEncoder.encode(getString(row.get("ph_no")), "UTF-8") + + "&Email="+ URLEncoder.encode( "", "UTF-8") + + "&ComplaintType=" + URLEncoder.encode(complaintType, "UTF-8") + + "&ComplaintTitle=" + URLEncoder.encode(complaintTitle, "UTF-8") + + "&ComplaintDetails=" + URLEncoder.encode(getString(row.get("remarks")), "UTF-8")+ URLEncoder.encode(getString(row.get("ref_id")), "UTF-8") + + "&StreetId=" + URLEncoder.encode(getString(row.get("streetid")), "UTF-8") + //+ "&Comp_Image=" + URLEncoder.encode(imageBase64 == null ? "" : imageBase64, "UTF-8") + + "&Comp_Image="+ URLEncoder.encode( "", "UTF-8") + + "&latitude=" + URLEncoder.encode(getString(row.get("latitude")), "UTF-8") + + "&longtitude=" + URLEncoder.encode(getString(row.get("longitude")), "UTF-8") + + "&Landmark="+ URLEncoder.encode( "", "UTF-8") + + "&gender=" + URLEncoder.encode(getString(row.get("gender")), "UTF-8") + + "&compmode=1"; + + + + System.out.println(params); + + try(OutputStream os = conn.getOutputStream()){ + + os.write(params.getBytes("UTF-8")); + + } + + BufferedReader reader; + + System.out.println(conn.getResponseCode()); + System.out.println(conn.getResponseMessage()); + if(conn.getResponseCode()==200){ + + reader = new BufferedReader( + new InputStreamReader(conn.getInputStream())); + + }else{ + + reader = new BufferedReader( + new InputStreamReader(conn.getErrorStream())); + } + + StringBuilder response = new StringBuilder(); + + String line; + + while((line = reader.readLine()) != null){ + + response.append(line); + + } + + reader.close(); + + + String responseText = response.toString(); + + System.out.println("================================="); + System.out.println("Response Code : " + conn.getResponseCode()); + System.out.println("Response Body : "); + System.out.println(responseText); + System.out.println("================================="); + + if (!responseText.trim().startsWith("{")) { + System.out.println("Response is not JSON."); + return null; + } + + ObjectMapper mapper = new ObjectMapper(); + Map responseMap = + mapper.readValue(responseText, Map.class); + + return String.valueOf(responseMap.get("Complaint Number")); + + } + catch(Exception e){ + + e.printStackTrace(); + return null; + } + +} + +private String getString(Object obj){ + + return obj == null ? "" : obj.toString(); + +} + +public String convertUrlToBase64(String urlString) { + try { + URL url = new URL(urlString); + + try (InputStream inputStream = url.openStream(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + + byte[] buffer = new byte[4096]; + int bytesRead; + + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + + byte[] fileBytes = outputStream.toByteArray(); + System.out.println("Image Size : " + fileBytes.length + " bytes"); + return Base64.getEncoder().encodeToString(fileBytes); + + } + + } catch (Exception e) { + e.printStackTrace(); + return null; + } +} + +private String getComplainantName(Map row) { + + String name = getString(row.get("p_name")).trim(); + + if (name.isEmpty()) { + name = getString(row.get("dept_name")).trim(); + } + + if (name.isEmpty()) { + name = getString(row.get("deptname")).trim(); + } + + if (name.isEmpty()) { + System.out.println("No Complainant Name found."); + return ""; + } + + System.out.println("Original Name : " + name); + System.out.println("Original Length : " + name.length()); + + if (name.length() <= 31) { + return name; + } + + String temp = name.substring(0, 31); + + int lastSpace = temp.lastIndexOf(' '); + + if (lastSpace > 0) { + temp = temp.substring(0, lastSpace); + } + + System.out.println("Trimmed Name : " + temp); + System.out.println("Trimmed Length : " + temp.length()); + + return temp; +} + + +//private String getComplainantName(Map row) { +// +// String pName = getString(row.get("p_name")).trim(); +// if (!pName.isEmpty()) { +// System.out.println("Using p_name : " + pName); +// System.out.println("Length : " + pName.length()); +// return pName; +// } +// +// String deptName = getString(row.get("dept_name")).trim(); +// if (!deptName.isEmpty()) { +// System.out.println("Using dept_name : " + deptName); +// System.out.println("Length : " + deptName.length()); +// return deptName; +// } +// +// String deptMasterName = getString(row.get("deptname")).trim(); +// if (!deptMasterName.isEmpty()) { +// System.out.println("Using deptname : " + deptMasterName); +// System.out.println("Length : " + deptMasterName.length()); +// return deptMasterName; +// } +// +// System.out.println("No Complainant Name found."); +// System.out.println("Length : 0"); +// return ""; +//} } diff --git a/src/main/resources/templates/modules/pgrcomplaints.html b/src/main/resources/templates/modules/pgrcomplaints.html new file mode 100644 index 0000000..374b973 --- /dev/null +++ b/src/main/resources/templates/modules/pgrcomplaints.html @@ -0,0 +1,499 @@ + + + + +GCC Green Committee + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ GREATER CHENNAI CORPORATION +
+ + + +
+ + + + +
+ + +
+ +
+
+
Green Committee Pruning Complaint Creation
+
+ +
+ + + + + + + + + + + + + + + + + + + +
S.NoC ByRefidNameName LengthMobileRemarks lengthAction
+ +
+
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file