diff --git a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcCallsController.java b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcCallsController.java index 24f450ab..5e908552 100644 --- a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcCallsController.java +++ b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcCallsController.java @@ -116,11 +116,13 @@ public class QaqcCallsController { String result = sendWhatsappMsg(pname, cat, mob_no, complaintNumber); if(result.equals("200")) { - System.out.println("Followup Whatsapp Complaint Triggered for "+complaintNumber); + System.out.println("Followup Whatsapp Message Triggered for "+complaintNumber); } } + + // Execute common update methods qaqcCallsService.updateComplaintDetails(complaintNumber, dataId, action,remarks,updated_agent); qaqcCallsService.updateComplaintHistoryDetails(complaintNumber,dataId, action, remarks,updated_agent, remainderDate); diff --git a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/WhatsappController.java b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/WhatsappController.java index c2ebc812..631ee871 100644 --- a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/WhatsappController.java +++ b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/WhatsappController.java @@ -1,8 +1,15 @@ package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +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.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -11,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController; import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.WhatsappqaqcMsgService; @RestController("callcenterqaqcwhatsapp") -@RequestMapping("/gcc/qaqc/api/whatsapp") +@RequestMapping("/gcc/api/qaqc/whatsapp") public class WhatsappController { @Autowired @@ -22,6 +29,119 @@ public class WhatsappController { String response = whatsappqaqcMsgService.sendMsg(msgUrl,tamilmsgUrl); return ResponseEntity.ok(response); } + + @GetMapping("/checkforwhatsappmsg") + public boolean checkforwhatsappmsg( + @RequestParam String complaintNumber, + @RequestParam String action, + @RequestParam String complaintTypeName, + @RequestParam String mobnumber, + @RequestParam String pname) { + + Map ismsg = + whatsappqaqcMsgService.checkforwhatsappmsg( + complaintNumber, + action); + + String returnedAction = + String.valueOf(ismsg.get("action")); + + boolean status = + Boolean.TRUE.equals(ismsg.get("status")); + + System.out.println("Action = " + returnedAction); + System.out.println("Status = " + status); + + if (status) { + + String result = sendWhatsappMsg(pname, complaintTypeName, mobnumber, complaintNumber,returnedAction); + if(result.equals("200")) { + System.out.println("Whatsapp Message Triggered for "+complaintNumber); + return true; + } + else { + System.out.println("Whatsapp Message Failed for "+complaintNumber); + return false; + } + } + + return false; + } + + private String sendWhatsappMsg(String pname,String cat,String mob_no, String complaintNumber,String returnedAction) { + String urlString = ""; + + try { + + + if("COMPLETED".equalsIgnoreCase(returnedAction)) { + + } + + if("UNATTENDED".equalsIgnoreCase(returnedAction)) { + + } + + String placeholders = + URLEncoder.encode( + pname + "|~|" + cat + "|~|" + complaintNumber, + StandardCharsets.UTF_8.toString()); + + String buttonPlaceholder = + URLEncoder.encode( + complaintNumber, + StandardCharsets.UTF_8.toString()); + + String mobile = + URLEncoder.encode( + mob_no, + StandardCharsets.UTF_8.toString()); + + + urlString=""; + + String res = hitURL(urlString); + return res; + + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + + + } + + private String hitURL(String urlString) { + String response = ""; + try { + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + + int responseCode = connection.getResponseCode(); + response = String.valueOf(responseCode); + //System.out.println("Response Code for URL: " + urlString + " is " + responseCode); + + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("response=" + response); + return response; + } + + @GetMapping("/getclosefromuser") + public String getclosefromuser(@RequestParam String complaintNumber) { + + return whatsappqaqcMsgService.getclosefromuser(complaintNumber); + + } + + @GetMapping("/getreopenfromuser") + public String getreopenfromuser(@RequestParam String complaintNumber) { + + return whatsappqaqcMsgService.getreopenfromuser(complaintNumber); + + } } diff --git a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/WhatsappqaqcMsgService.java b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/WhatsappqaqcMsgService.java index da2fdc33..1e7b012e 100644 --- a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/WhatsappqaqcMsgService.java +++ b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/WhatsappqaqcMsgService.java @@ -2,13 +2,44 @@ package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; import java.net.HttpURLConnection; import java.net.URL; +import java.util.HashMap; +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.core.env.Environment; +import org.springframework.http.ResponseEntity; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @Service public class WhatsappqaqcMsgService { + private final RestTemplate restTemplate; + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + private SocialMediaService socialMediaService; + + @Autowired + private QaqcCallsService qaqcCallsService; + + + @Autowired + public void setDataSource(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { + this.jdbcTemplate = new JdbcTemplate(dataSource); + } + + public WhatsappqaqcMsgService(RestTemplate restTemplate) { + this.restTemplate=restTemplate; + } + public String sendMsg(String msgUrl, String tamilmsgUrl) { StringBuilder response = new StringBuilder(); @@ -45,4 +76,159 @@ public class WhatsappqaqcMsgService { String response =restTemplate.getForObject(SMS_Url,String.class); return response; } + + public Map checkforwhatsappmsg(String complaintNumber, String action) { + + Map response = new HashMap<>(); + + boolean result = false; + + if ("COMPLETED".equalsIgnoreCase(action)) { + + String sql = + "SELECT call_status " + + "FROM qaqc_upload_data_history " + + "WHERE complaint_number=? " + + "ORDER BY id DESC " + + "LIMIT 20"; + + List statuses = + jdbcTemplate.queryForList( + sql, + String.class, + complaintNumber); + + if (!statuses.isEmpty() + && "COMPLETED".equalsIgnoreCase(statuses.get(0))) { + + int unattendedCount = 0; + + for (int i = 1; i < statuses.size(); i++) { + + if ("UNATTENDED".equalsIgnoreCase(statuses.get(i))) { + unattendedCount++; + } else { + break; + } + } + + result = unattendedCount >= 5; + } + } + + else if ("UNATTENDED".equalsIgnoreCase(action)) { + + String sql = + "SELECT call_status " + + "FROM qaqc_upload_data_history " + + "WHERE complaint_number=? " + + "ORDER BY id DESC " + + "LIMIT 5"; + + List statuses = + jdbcTemplate.queryForList( + sql, + String.class, + complaintNumber); + + int unattendedCount = 0; + + for (String status : statuses) { + + if ("UNATTENDED".equalsIgnoreCase(status)) { + unattendedCount++; + } else { + break; + } + } + + result = unattendedCount >= 3; + } + + response.put("action", action); + response.put("status", result); + + return response; + } + + public String getclosefromuser(String complaintNumber) { + + try { + + Map complaintDetails =socialMediaService.getDetailsByComplaintNumber(complaintNumber); + String currentStatus = + String.valueOf( + complaintDetails.getOrDefault( + "currentStatus", + "" + ) + ); + + String Erpname="QAops72"; + + if ("Action Taken - Level 2".equalsIgnoreCase(currentStatus)) { + + boolean statusUpdated=qaqcCallsService.ChangeStatusInErp(complaintNumber, "", "COMPLETED",Erpname); + if (statusUpdated) + { + return complaintNumber+ " PGR Complaint closed Successfully"; + } + else { + return "Unable to close "+complaintNumber+" PGR Complaint"; + } + } + else { + return "Unable to close PGR "+complaintNumber+" Complaint,Because the complaint status is "+currentStatus; + } + + + } catch (Exception e) { + e.printStackTrace(); + return "Error in closing PGR complaint from user "+complaintNumber; + } + + } + + + public String getreopenfromuser(String complaintNumber) { + + try { + + Map complaintDetails =socialMediaService.getDetailsByComplaintNumber(complaintNumber); + String currentStatus = + String.valueOf( + complaintDetails.getOrDefault( + "currentStatus", + "" + ) + ); + + String Erpname="QAops72"; + + if ("Action Taken - Level 2".equalsIgnoreCase(currentStatus)) { + + boolean statusUpdated=qaqcCallsService.ChangeStatusInErp(complaintNumber, "", "REOPEN",Erpname); + if (statusUpdated) + { + return complaintNumber+ " Complaint Reopened Successfully"; + } + else { + return "Unable to Reopen "+complaintNumber+" Complaint"; + } + } + else { + return "Unable to Reopen "+complaintNumber+" Complaint,Because the complaint status is "+currentStatus; + } + + + } catch (Exception e) { + e.printStackTrace(); + return "Error in Reopen complaint from user "+complaintNumber; + } + + + } + + +} diff --git a/gcc_officer_portal/src/main/resources/templates/modules/callcenterqaqc/agentqaqccalls.html b/gcc_officer_portal/src/main/resources/templates/modules/callcenterqaqc/agentqaqccalls.html index b27ddd43..ffb241a2 100644 --- a/gcc_officer_portal/src/main/resources/templates/modules/callcenterqaqc/agentqaqccalls.html +++ b/gcc_officer_portal/src/main/resources/templates/modules/callcenterqaqc/agentqaqccalls.html @@ -780,11 +780,19 @@ //console.log("valid phone number"); $('.submitid').prop('disabled', false).text('Submit'); // Trigger WhatsApp message functions based on action - if (action === "UNATTENDED") { +// if (action === "UNATTENDED") { //sendWhatsAppMessageUnattended(name, complaintNumber, cellnumber, complaintTypeName); - } else if (action === "REOPEN") { +// } else if (action === "REOPEN") { //sendWhatsAppMessageReopened(name, complaintNumber, cellnumber, complaintTypeName); - } +// } + + + + if (action === "UNATTENDED" || action === "COMPLETED" ) { + + //checkforUnattendedwhatsappmsg(complaintNumber,action,complaintTypeName,cellnumber,name); + } + } else{ console.log("not valid phone number,So message not sent"); @@ -1025,6 +1033,26 @@ const detailsHtml = ` return detailsHtml; } +//checkforwhatsappmsg +function checkforUnattendedwhatsappmsg(complaintNumber,action,complaintTypeName,cellnumber,name) { + + $.ajax({ + url: '/gcc/api/qaqc/whatsapp/checkforwhatsappmsg', + type: 'GET', + data: { complaintNumber: complaintNumber,action:action, + complaintTypeName:complaintTypeName,mobnumber:cellnumber, + name:pname}, + success: function(response) { + //console.log('WhatsApp message sent successfully', response); + console.log(response); + + }, + error: function(xhr, status, error) { + console.error('Error sending WhatsApp message:', error); + } + }); + } + //whatsapp message function for REOPENED