9414 changed files with 1757997 additions and 244 deletions
-
BINsrc/.DS_Store
-
BINsrc/main/.DS_Store
-
BINsrc/main/java/.DS_Store
-
BINsrc/main/java/in/.DS_Store
-
BINsrc/main/java/in/gov/.DS_Store
-
BINsrc/main/java/in/gov/chennaicorporation/.DS_Store
-
BINsrc/main/java/in/gov/chennaicorporation/gccoffice/.DS_Store
-
26src/main/java/in/gov/chennaicorporation/gccoffice/GccOfficeApplication.java
-
244src/main/java/in/gov/chennaicorporation/gccoffice/bulkwaste/Controller/APIController.java
-
38src/main/java/in/gov/chennaicorporation/gccoffice/bulkwaste/Controller/MainController.java
-
65src/main/java/in/gov/chennaicorporation/gccoffice/bulkwaste/Service/BulkMasterService.java
-
456src/main/java/in/gov/chennaicorporation/gccoffice/bulkwaste/Service/BulkWasteService.java
-
151src/main/java/in/gov/chennaicorporation/gccoffice/c_petition/controller/APIController.java
-
130src/main/java/in/gov/chennaicorporation/gccoffice/c_petition/controller/MainController.java
-
1src/main/java/in/gov/chennaicorporation/gccoffice/c_petition/controller/package-info.java
-
21src/main/java/in/gov/chennaicorporation/gccoffice/c_petition/data/ComplaintType.java
-
1src/main/java/in/gov/chennaicorporation/gccoffice/c_petition/data/package-info.java
-
1src/main/java/in/gov/chennaicorporation/gccoffice/c_petition/entity/package-info.java
-
7src/main/java/in/gov/chennaicorporation/gccoffice/c_petition/package-info.java
-
709src/main/java/in/gov/chennaicorporation/gccoffice/c_petition/service/Petition.java
-
58src/main/java/in/gov/chennaicorporation/gccoffice/c_petition/service/PetitionMaster.java
-
1src/main/java/in/gov/chennaicorporation/gccoffice/c_petition/service/package-info.java
-
112src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/controller/AgentAssignAPIController.java
-
320src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/controller/AgentsAPIController.java
-
36src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/controller/AttendanceAPIController.java
-
643src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/controller/CampaignAPIController.java
-
29src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/controller/CampaignDropdownApiController.java
-
100src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/controller/CampaignReportAPIController.java
-
281src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/controller/CategoryAPIController.java
-
219src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/controller/MainController.java
-
26src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/controller/WhatsappController.java
-
303src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/service/AddcategoryServices.java
-
214src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/service/AgentAssignService.java
-
665src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/service/AgentsService.java
-
116src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/service/AttendanceService.java
-
29src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/service/CampaignDropdownApiService.java
-
533src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/service/CampaignReportService.java
-
715src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/service/CampaignService.java
-
40src/main/java/in/gov/chennaicorporation/gccoffice/callcenter/service/WhatsappMsgService.java
-
BINsrc/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/.DS_Store
-
36src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/AttendanceApiController.java
-
71src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/AttendanceMainController.java
-
672src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/ComplaintController.java
-
31src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/ComplaintStatusMainController.java
-
278src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/DomesticWasteApiController.java
-
73src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/DomesticWasteMainController.java
-
85src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/FollowUpController.java
-
96src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/InprogresscallController.java
-
370src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/MainController.java
-
89src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/PublicFollowUpController.java
-
391src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcAPIController.java
-
208src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcAdminSettingsApiController.java
-
47src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcAdminSettingsMainController.java
-
234src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcAgentAssignAPIController.java
-
161src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcAgentsAPIController.java
-
519src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcCallsController.java
-
38src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcPgrComplaintsMainController.java
-
68src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/QaqcTaskListAPIController.java
-
58src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/ReportsMainController.java
-
563src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/ScpApiController.java
-
55src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/ScpMaincontroller.java
-
464src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/SocialMediaApiController.java
-
50src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/SocialMediaMainController.java
-
82src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/StatusCountController.java
-
358src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/WhatsappController.java
-
95src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/ComplaintService.java
-
308src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/DomesticWasteService.java
-
224src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/FollowUpService.java
-
102src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/InprogresscallService.java
-
52src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/PublicFollowUpService.java
-
123src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/QaqcAdminSettingService.java
-
1166src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/QaqcAgentAssignService.java
-
686src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/QaqcAgentsService.java
-
391src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/QaqcCallsService.java
-
357src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/QaqcService.java
-
291src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/QaqcTaskListService.java
-
361src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/ScpService.java
-
822src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/SocialMediaService.java
-
274src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/StatusCountService.java
-
271src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/WhatsappqaqcMsgService.java
-
174src/main/java/in/gov/chennaicorporation/gccoffice/cdwaste/controller/DumpRegistrationAPIController.java
-
75src/main/java/in/gov/chennaicorporation/gccoffice/cdwaste/controller/MainController.java
-
195src/main/java/in/gov/chennaicorporation/gccoffice/cdwaste/service/OfficerService.java
-
40src/main/java/in/gov/chennaicorporation/gccoffice/cdwaste/service/SMSService.java
-
BINsrc/main/java/in/gov/chennaicorporation/gccoffice/cdwastecollectorregistrations/.DS_Store
-
111src/main/java/in/gov/chennaicorporation/gccoffice/cdwastecollectorregistrations/controller/ApiController.java
-
142src/main/java/in/gov/chennaicorporation/gccoffice/cdwastecollectorregistrations/controller/MainController.java
-
29src/main/java/in/gov/chennaicorporation/gccoffice/cdwastecollectorregistrations/controller/WhatsappControllerCD.java
-
33src/main/java/in/gov/chennaicorporation/gccoffice/cdwastecollectorregistrations/service/RegistrationService.java
-
41src/main/java/in/gov/chennaicorporation/gccoffice/cdwastecollectorregistrations/service/WhatsappMsgService.java
-
428src/main/java/in/gov/chennaicorporation/gccoffice/childrensurvey/Controller/ChildrenSurveyController.java
-
102src/main/java/in/gov/chennaicorporation/gccoffice/childrensurvey/Controller/MainController.java
-
3411src/main/java/in/gov/chennaicorporation/gccoffice/childrensurvey/Service/ChildrenSurveyService.java
-
58src/main/java/in/gov/chennaicorporation/gccoffice/circular/controller/APIController.java
-
61src/main/java/in/gov/chennaicorporation/gccoffice/circular/controller/MainController.java
-
1src/main/java/in/gov/chennaicorporation/gccoffice/circular/controller/package-info.java
-
1src/main/java/in/gov/chennaicorporation/gccoffice/circular/package-info.java
-
223src/main/java/in/gov/chennaicorporation/gccoffice/circular/service/CircularMaster.java
-
1src/main/java/in/gov/chennaicorporation/gccoffice/circular/service/package-info.java
-
BINsrc/main/java/in/gov/chennaicorporation/gccoffice/com_petition/.DS_Store
@ -0,0 +1,26 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice; |
||||
|
|
||||
|
import org.springframework.boot.SpringApplication; |
||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
import org.springframework.boot.autoconfigure.domain.EntityScan; |
||||
|
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; |
||||
|
//import org.springframework.cloud.client.discovery.EnableDiscoveryClient; |
||||
|
import org.springframework.context.annotation.ComponentScan; |
||||
|
|
||||
|
@EntityScan(basePackages = { |
||||
|
"in.gov.chennaicorporation.gccoffice", |
||||
|
"in.gov.chennaicorporation.gccoffice.taxcollection.entity" |
||||
|
}) |
||||
|
@ComponentScan(basePackages = { |
||||
|
"in.gov.chennaicorporation.gccoffice", |
||||
|
"in.gov.chennaicorporation.gccoffice.taxcollection", |
||||
|
"in.gov.chennaicorporation.gccoffice.garbagecollection" |
||||
|
}) |
||||
|
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) |
||||
|
//@EnableDiscoveryClient |
||||
|
public class GccOfficeApplication { |
||||
|
public static void main(String[] args) { |
||||
|
//System.setProperty("spring.config.name", "gcc-portal"); |
||||
|
SpringApplication.run(GccOfficeApplication.class, args); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,244 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.bulkwaste.Controller; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import org.springframework.http.MediaType; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
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; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.bulkwaste.Service.BulkWasteService; |
||||
|
import in.gov.chennaicorporation.gccoffice.bulkwaste.Service.BulkMasterService; |
||||
|
|
||||
|
@RequestMapping("gcc/api/bulkwaste") |
||||
|
@RestController("BulkWasteAPIController") |
||||
|
public class APIController { |
||||
|
|
||||
|
@Autowired |
||||
|
private BulkMasterService masterService; |
||||
|
private BulkWasteService bulkWasteService; |
||||
|
|
||||
|
@Autowired |
||||
|
public APIController(BulkMasterService masterService, |
||||
|
BulkWasteService bulkWasteService) { |
||||
|
this.masterService = masterService; |
||||
|
this.bulkWasteService = bulkWasteService; |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getCategoryTypes") |
||||
|
public List getCategoryTypes() { |
||||
|
return masterService.getCategoryTypes(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getZones") |
||||
|
public List getZones() { |
||||
|
return masterService.getZones(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getWards") |
||||
|
public List<Map<String, Object>> getWards( |
||||
|
@RequestParam String zoneName) { |
||||
|
|
||||
|
return masterService.getWards(zoneName); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getBulkWasteRequestDetails") |
||||
|
public List<Map<String, Object>> getBulkWasteRequestDetails( |
||||
|
|
||||
|
@RequestParam(value = "fromDate", required = false) |
||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd") Date fromDate, |
||||
|
|
||||
|
@RequestParam(value = "toDate", required = false) |
||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd") Date toDate, |
||||
|
|
||||
|
@RequestParam(value = "categoryType", required = false) String categoryType, |
||||
|
@RequestParam(value = "zoneType", required = false) String zoneType, |
||||
|
@RequestParam(value = "wardType", required = false) String wardType) { |
||||
|
|
||||
|
return bulkWasteService.getBulkWasteRequestDetails(fromDate, toDate, categoryType, zoneType, wardType); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/bulkWasteRequestView") |
||||
|
public Map<String, Object> bulkWasteRequestView( |
||||
|
@RequestParam Long requestId) { |
||||
|
|
||||
|
return bulkWasteService.getBulkWasteRequestView(requestId); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getMinSurveyDate") |
||||
|
public String getMinSurveyDate() { |
||||
|
return bulkWasteService.getMinSurveyDate(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@PostMapping(value="/updateBulkWasteRequest", |
||||
|
consumes = MediaType.MULTIPART_FORM_DATA_VALUE) |
||||
|
public ResponseEntity<Map<String, Object>> updateBulkWasteRequest( |
||||
|
|
||||
|
@RequestParam Long requestId, |
||||
|
|
||||
|
@RequestParam String name_of_establishment, @RequestParam Integer category_id, |
||||
|
@RequestParam Integer zone_id, @RequestParam Integer ward_id, |
||||
|
@RequestParam(required = false) String trade_license_No, |
||||
|
@RequestParam String person_name, @RequestParam String email_id, |
||||
|
@RequestParam String mobile_no, @RequestParam String address, |
||||
|
@RequestParam(required = false) String gst_No, |
||||
|
|
||||
|
|
||||
|
@RequestParam String total_builtup_area_sqmt, @RequestParam String establishment_type, |
||||
|
@RequestParam(required = false) Integer dwelling_units, |
||||
|
@RequestParam(required = false) Integer avg_daily_footfall, |
||||
|
@RequestParam String totalEmployees, |
||||
|
|
||||
|
@RequestParam BigDecimal wet_waste, @RequestParam BigDecimal dry_waste, |
||||
|
@RequestParam BigDecimal domestic_hazardous_waste, |
||||
|
@RequestParam BigDecimal sanitary_waste, |
||||
|
@RequestParam(required = false) BigDecimal cd_waste, |
||||
|
|
||||
|
@RequestParam(required = false) MultipartFile wasteAuditFile, |
||||
|
|
||||
|
@RequestParam String wet_waste_processed, |
||||
|
@RequestParam(required = false) String technology_used, |
||||
|
@RequestParam(required = false) String other_technology, |
||||
|
@RequestParam(required = false) BigDecimal installed_capacity_kg, |
||||
|
@RequestParam(required = false) Integer installation_year, |
||||
|
@RequestParam(required = false) String vendor_name, |
||||
|
@RequestParam(required = false) String unit_functional_status, |
||||
|
@RequestParam(required = false) MultipartFile installedUnitPhoto, |
||||
|
@RequestParam(defaultValue = "false") boolean removeInstalledPhoto, |
||||
|
|
||||
|
@RequestParam(required = false) String longitude, |
||||
|
@RequestParam(required = false) String latitude, |
||||
|
|
||||
|
@RequestParam String dry_waste_recycler, |
||||
|
@RequestParam(required = false) String recycler_name, |
||||
|
@RequestParam(required = false) String recycler_authorization_no, |
||||
|
|
||||
|
@RequestParam BigDecimal residual_waste_quantity, |
||||
|
@RequestParam String collection_frequency, |
||||
|
@RequestParam String vehicle_type, |
||||
|
|
||||
|
@RequestParam Integer update_by |
||||
|
|
||||
|
) { |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
String result = bulkWasteService.updateBulkWasteRequest( |
||||
|
|
||||
|
requestId, |
||||
|
|
||||
|
name_of_establishment, category_id, zone_id, ward_id, trade_license_No, |
||||
|
person_name, email_id, mobile_no, gst_No, address, |
||||
|
|
||||
|
total_builtup_area_sqmt, establishment_type, |
||||
|
dwelling_units, avg_daily_footfall, totalEmployees, |
||||
|
|
||||
|
wet_waste, dry_waste, domestic_hazardous_waste, sanitary_waste, cd_waste, |
||||
|
|
||||
|
wasteAuditFile, |
||||
|
|
||||
|
wet_waste_processed, technology_used, other_technology, |
||||
|
installed_capacity_kg, installation_year, |
||||
|
vendor_name, unit_functional_status, installedUnitPhoto, |
||||
|
|
||||
|
removeInstalledPhoto, // <-- ADD THIS |
||||
|
|
||||
|
longitude, latitude, |
||||
|
|
||||
|
dry_waste_recycler, recycler_name, recycler_authorization_no, |
||||
|
|
||||
|
residual_waste_quantity, collection_frequency, vehicle_type, |
||||
|
|
||||
|
update_by |
||||
|
); |
||||
|
|
||||
|
if ("mobile_exists".equals(result)) { |
||||
|
|
||||
|
return ResponseEntity.ok(Map.of( |
||||
|
"status", false, |
||||
|
"message", "duplicate", |
||||
|
"description", "This Mobile Number is already registered." |
||||
|
)); |
||||
|
} |
||||
|
|
||||
|
if ("success".equals(result)) { |
||||
|
|
||||
|
return ResponseEntity.ok(Map.of( |
||||
|
"status", true, |
||||
|
"message", "success", |
||||
|
"description", "Bulk Waste Request Updated Successfully" |
||||
|
)); |
||||
|
} |
||||
|
|
||||
|
return ResponseEntity.ok(Map.of( |
||||
|
"status", false, |
||||
|
"message", "failed", |
||||
|
"description", "Update Failed" |
||||
|
)); |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
|
||||
|
e.printStackTrace(); |
||||
|
|
||||
|
return ResponseEntity.ok(Map.of( |
||||
|
"status", false, |
||||
|
"message", "error", |
||||
|
"description", "Something went wrong" |
||||
|
)); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@PostMapping("/deactivatebulk") |
||||
|
public ResponseEntity<Map<String, Object>> DeactivateBulkRequest(@RequestParam int requestId, |
||||
|
//@RequestParam Integer userId, |
||||
|
@RequestParam("update_by") Integer updateBy) { |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
String result = bulkWasteService.deactivatebulkrequest(requestId,updateBy); |
||||
|
|
||||
|
if (result == null || result.equals("error")) { |
||||
|
|
||||
|
return ResponseEntity.ok(Map.of( |
||||
|
"status", false, |
||||
|
"message", "failed", |
||||
|
"description", " Failed to Deleted Bulk " |
||||
|
)); |
||||
|
} |
||||
|
|
||||
|
return ResponseEntity.ok(Map.of( |
||||
|
"status", true, |
||||
|
"title", "success", |
||||
|
"message", " Bulk Deleted successfully " |
||||
|
)); |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
|
||||
|
e.printStackTrace(); |
||||
|
|
||||
|
return ResponseEntity.ok(Map.of( |
||||
|
"status", false, |
||||
|
"message", "error", |
||||
|
"description", " Something went wrong " |
||||
|
)); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,38 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.bulkwaste.Controller; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@Controller("BulkWasteController") |
||||
|
@RequestMapping("/gcc/bulkwaste") |
||||
|
public class MainController { |
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
private String BasePath = "modules/bulkwaste/"; |
||||
|
@Autowired |
||||
|
public MainController(RestTemplate restTemplate) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("bulkwastelist") |
||||
|
public String ownerList(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
return BasePath+"requestdetails"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("surveyorsreports") |
||||
|
public String surveyorsreports(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
return BasePath+"surveyorsreports"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,65 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.bulkwaste.Service; |
||||
|
|
||||
|
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.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
@Service |
||||
|
public class BulkMasterService { |
||||
|
|
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysqlBulkWasteDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String, Object>> getCategoryTypes() { |
||||
|
|
||||
|
String sqlQuery = |
||||
|
"SELECT * " + |
||||
|
"FROM category_master " + |
||||
|
"WHERE is_active = 1 " + |
||||
|
"AND is_delete = 0"; |
||||
|
|
||||
|
// getSpaceRearTypes |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String, Object>> getZones() { |
||||
|
|
||||
|
String sqlQuery = |
||||
|
"SELECT * FROM zones " + |
||||
|
"WHERE is_active = 1 AND is_delete = 0"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String, Object>> getWards(String zoneName) { |
||||
|
|
||||
|
String sqlQuery = |
||||
|
"SELECT * " + |
||||
|
"FROM wards " + |
||||
|
"WHERE is_active = 1 " + |
||||
|
"AND is_delete = 0 " + |
||||
|
"AND zone_name = ?"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery, zoneName); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,456 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.bulkwaste.Service; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
import java.nio.file.Files; |
||||
|
import java.nio.file.Path; |
||||
|
import java.nio.file.Paths; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.core.env.Environment; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.controller.DateTimeUtil; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.dao.DataAccessException; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
@Service |
||||
|
public class BulkWasteService { |
||||
|
|
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
private final Environment environment; |
||||
|
private String fileBaseUrl; |
||||
|
|
||||
|
public BulkWasteService(Environment environment) { |
||||
|
this.environment = environment; |
||||
|
this.fileBaseUrl = environment.getProperty("fileBaseUrl"); |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysqlBulkWasteDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String, Object>> getBulkWasteRequestDetails(Date fromDate, Date toDate, |
||||
|
String categoryType, String zoneType, String wardType) { |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
StringBuilder sql = new StringBuilder( |
||||
|
"SELECT bwr.request_id, bwr.name_of_establishment, " + |
||||
|
"bwr.category_id, cm.category_name, " + |
||||
|
"bwr.zone_id, bwr.ward_id, " + |
||||
|
"bwr.person_name, bwr.mobile_no, bwr.cdate " + |
||||
|
"FROM bulk_waste_request bwr " + |
||||
|
"LEFT JOIN category_master cm ON cm.category_id = bwr.category_id " |
||||
|
); |
||||
|
|
||||
|
List<Object> params = new ArrayList<>(); |
||||
|
List<String> conditions = new ArrayList<>(); |
||||
|
|
||||
|
// Date Filter |
||||
|
if (fromDate != null && toDate != null) { |
||||
|
conditions.add("DATE(bwr.cdate) BETWEEN ? AND ?"); |
||||
|
params.add(fromDate); |
||||
|
params.add(toDate); |
||||
|
} |
||||
|
|
||||
|
// Category Filter |
||||
|
if (categoryType != null && !categoryType.trim().isEmpty()) { |
||||
|
conditions.add("bwr.category_id = ?"); |
||||
|
params.add(Integer.parseInt(categoryType)); |
||||
|
} |
||||
|
|
||||
|
// Zone Filter |
||||
|
if (zoneType != null && !zoneType.trim().isEmpty()) { |
||||
|
conditions.add("bwr.zone_id = ?"); |
||||
|
params.add(zoneType); |
||||
|
} |
||||
|
|
||||
|
// Ward Filter |
||||
|
if (wardType != null && !wardType.trim().isEmpty()) { |
||||
|
conditions.add("bwr.ward_id = ?"); |
||||
|
params.add(wardType); |
||||
|
} |
||||
|
|
||||
|
// Show only active records (Optional) |
||||
|
conditions.add("bwr.is_delete = 0"); |
||||
|
conditions.add("bwr.is_active = 1"); |
||||
|
|
||||
|
if (!conditions.isEmpty()) { |
||||
|
sql.append(" WHERE ").append(String.join(" AND ", conditions)); |
||||
|
} |
||||
|
|
||||
|
sql.append(" ORDER BY bwr.cdate DESC"); |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sql.toString(), params.toArray()); |
||||
|
|
||||
|
} catch (DataAccessException e) { |
||||
|
e.printStackTrace(); |
||||
|
return Collections.emptyList(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public String getMinSurveyDate() { |
||||
|
|
||||
|
String sql = "SELECT DATE(MIN(cdate)) FROM bulk_waste_request"; |
||||
|
|
||||
|
return jdbcTemplate.queryForObject(sql, String.class); |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public Map<String, Object> getBulkWasteRequestView(Long requestId) { |
||||
|
|
||||
|
String sql = |
||||
|
"SELECT bwr.request_id, " + |
||||
|
"bwr.name_of_establishment, bwr.person_name, " + |
||||
|
"bwr.category_id, cm.category_name, bwr.email_id, bwr.mobile_no, " + |
||||
|
"bwr.zone_id, bwr.ward_id, bwr.trade_license_No, bwr.gst_No, " + |
||||
|
"bwr.address, " + |
||||
|
"bwr.total_builtup_area_sqmt, bwr.establishment_type, " + |
||||
|
"bwr.dwelling_units, bwr.avg_daily_footfall, bwr.totalEmployees, " + |
||||
|
"bwr.wet_waste, bwr.dry_waste, bwr.domestic_hazardous_waste, " + |
||||
|
"bwr.sanitary_waste, bwr.cd_waste, " + |
||||
|
"CONCAT('" + fileBaseUrl + "/gccofficialapp/files', bwr.waste_audit_report_file) AS waste_audit_report_file, " + |
||||
|
"bwr.wet_waste_processed, bwr.technology_used, bwr.other_technology, " + |
||||
|
"bwr.installed_capacity_kg, bwr.installation_year, " + |
||||
|
"bwr.vendor_name, bwr.unit_functional_status, " + |
||||
|
"CONCAT('" + fileBaseUrl + "/gccofficialapp/files', bwr.installed_unit_photo_file) AS installed_unit_photo_file, " + |
||||
|
"bwr.longitude, bwr.latitude, " + |
||||
|
"bwr.dry_waste_recycler, bwr.recycler_name, bwr.recycler_authorization_no, " + |
||||
|
"bwr.residual_waste_quantity, bwr.collection_frequency, bwr.vehicle_type, " + |
||||
|
"bwr.is_active, bwr.is_delete, bwr.cdate " + |
||||
|
"FROM bulk_waste_request bwr " + |
||||
|
"LEFT JOIN category_master cm ON cm.category_id = bwr.category_id " + |
||||
|
"WHERE bwr.request_id = ?"; |
||||
|
|
||||
|
return jdbcTemplate.queryForMap(sql, requestId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public String fileUpload(MultipartFile file, String name) { |
||||
|
|
||||
|
// Set the file path where you want to save it |
||||
|
String uploadDirectory = environment.getProperty("file.upload.directory.mobile"); |
||||
|
String serviceFolderName = environment.getProperty("bulk_waste_foldername"); |
||||
|
var year = DateTimeUtil.getCurrentYear(); |
||||
|
var month = DateTimeUtil.getCurrentMonth(); |
||||
|
|
||||
|
uploadDirectory = uploadDirectory + serviceFolderName + "/" + year + "/" + month; |
||||
|
|
||||
|
try { |
||||
|
// Create directory if it doesn't exist |
||||
|
Path directoryPath = Paths.get(uploadDirectory); |
||||
|
if (!Files.exists(directoryPath)) { |
||||
|
Files.createDirectories(directoryPath); |
||||
|
} |
||||
|
|
||||
|
// Datetime string |
||||
|
String datetimetxt = DateTimeUtil.getCurrentDateTime(); |
||||
|
|
||||
|
// File name |
||||
|
String fileName = name + "_" + datetimetxt + "_" + file.getOriginalFilename(); |
||||
|
fileName = fileName.replaceAll("\\s+", ""); // Remove space on filename |
||||
|
|
||||
|
String filePath = uploadDirectory + "/" + fileName; |
||||
|
|
||||
|
String filepath_txt = "/" + serviceFolderName + "/" + year + "/" + month + "/" + fileName; |
||||
|
|
||||
|
// Create a new Path object |
||||
|
Path path = Paths.get(filePath); |
||||
|
|
||||
|
// Get the bytes of the file |
||||
|
byte[] bytes = file.getBytes(); |
||||
|
|
||||
|
Files.write(path, bytes); |
||||
|
|
||||
|
// System.out.println(filePath); |
||||
|
return filepath_txt; |
||||
|
|
||||
|
} catch (IOException e) { |
||||
|
e.printStackTrace(); |
||||
|
return "Failed to save file " + file.getOriginalFilename(); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public String updateBulkWasteRequest( |
||||
|
|
||||
|
Long requestId, |
||||
|
|
||||
|
String name_of_establishment, |
||||
|
Integer category_id, Integer zone_id, Integer ward_id, |
||||
|
String trade_license_No, String person_name, String email_id, |
||||
|
String mobile_no, String gst_No, String address, |
||||
|
|
||||
|
String total_builtup_area_sqmt, String establishment_type, |
||||
|
Integer dwelling_units, Integer avg_daily_footfall, String totalEmployees, |
||||
|
|
||||
|
BigDecimal wet_waste, BigDecimal dry_waste, |
||||
|
BigDecimal domestic_hazardous_waste, BigDecimal sanitary_waste, BigDecimal cd_waste, |
||||
|
|
||||
|
MultipartFile wasteAuditFile, |
||||
|
|
||||
|
String wet_waste_processed, String technology_used, String other_technology, |
||||
|
BigDecimal installed_capacity_kg, Integer installation_year, String vendor_name, |
||||
|
String unit_functional_status, MultipartFile installedUnitPhoto, |
||||
|
|
||||
|
boolean removeInstalledPhoto, |
||||
|
|
||||
|
String longitude, String latitude, |
||||
|
|
||||
|
String dry_waste_recycler, String recycler_name, String recycler_authorization_no, |
||||
|
|
||||
|
BigDecimal residual_waste_quantity, String collection_frequency, String vehicle_type, |
||||
|
|
||||
|
Integer update_by |
||||
|
|
||||
|
) { |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
//===================================================== |
||||
|
// Store Existing Record into Log Table |
||||
|
//===================================================== |
||||
|
|
||||
|
String logSql = |
||||
|
"INSERT INTO bulk_waste_request_log(" + |
||||
|
"request_id,name_of_establishment,category_id,zone_id,ward_id," + |
||||
|
"trade_license_No,person_name,email_id,mobile_no,gst_No,address," + |
||||
|
"total_builtup_area_sqmt,establishment_type,dwelling_units," + |
||||
|
"avg_daily_footfall,totalEmployees,wet_waste,dry_waste," + |
||||
|
"domestic_hazardous_waste,sanitary_waste,cd_waste," + |
||||
|
"waste_audit_report_file,wet_waste_processed,technology_used," + |
||||
|
"other_technology,installed_capacity_kg,installation_year," + |
||||
|
"vendor_name,unit_functional_status,installed_unit_photo_file," + |
||||
|
"longitude,latitude,dry_waste_recycler,recycler_name," + |
||||
|
"recycler_authorization_no,residual_waste_quantity," + |
||||
|
"collection_frequency,vehicle_type,is_active,is_delete," + |
||||
|
"cdate,update_date,update_by,log_cdate)" + |
||||
|
|
||||
|
" SELECT " + |
||||
|
"request_id,name_of_establishment,category_id,zone_id,ward_id," + |
||||
|
"trade_license_No,person_name,email_id,mobile_no,gst_No,address," + |
||||
|
"total_builtup_area_sqmt,establishment_type,dwelling_units," + |
||||
|
"avg_daily_footfall,totalEmployees,wet_waste,dry_waste," + |
||||
|
"domestic_hazardous_waste,sanitary_waste,cd_waste," + |
||||
|
"waste_audit_report_file,wet_waste_processed,technology_used," + |
||||
|
"other_technology,installed_capacity_kg,installation_year," + |
||||
|
"vendor_name,unit_functional_status,installed_unit_photo_file," + |
||||
|
"longitude,latitude,dry_waste_recycler,recycler_name," + |
||||
|
"recycler_authorization_no,residual_waste_quantity," + |
||||
|
"collection_frequency,vehicle_type,is_active,is_delete," + |
||||
|
"cdate,update_date,update_by,NOW()" + |
||||
|
" FROM bulk_waste_request WHERE request_id=?"; |
||||
|
|
||||
|
jdbcTemplate.update(logSql, requestId); |
||||
|
|
||||
|
//-------------------------------------------------- |
||||
|
// Existing File Paths |
||||
|
//-------------------------------------------------- |
||||
|
|
||||
|
String wasteAuditPath = jdbcTemplate.queryForObject( |
||||
|
"SELECT waste_audit_report_file FROM bulk_waste_request WHERE request_id=?", |
||||
|
String.class, |
||||
|
requestId); |
||||
|
|
||||
|
String installedPhotoPath = jdbcTemplate.queryForObject( |
||||
|
"SELECT installed_unit_photo_file FROM bulk_waste_request WHERE request_id=?", |
||||
|
String.class, |
||||
|
requestId); |
||||
|
|
||||
|
// Remove old installed photo |
||||
|
if(removeInstalledPhoto){ |
||||
|
installedPhotoPath = null; |
||||
|
} |
||||
|
|
||||
|
//-------------------------------------------------- |
||||
|
// Upload New Files |
||||
|
//-------------------------------------------------- |
||||
|
|
||||
|
if (wasteAuditFile != null && !wasteAuditFile.isEmpty()) { |
||||
|
wasteAuditPath = fileUpload(wasteAuditFile, "waste_audit"); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
if (installedUnitPhoto != null && !installedUnitPhoto.isEmpty()) { |
||||
|
installedPhotoPath = fileUpload(installedUnitPhoto, "installed_unit"); |
||||
|
} |
||||
|
|
||||
|
//---------------------------------------------------- |
||||
|
// If Wet Waste = No |
||||
|
//---------------------------------------------------- |
||||
|
|
||||
|
if ("No".equalsIgnoreCase(wet_waste_processed)) { |
||||
|
|
||||
|
technology_used = null; |
||||
|
other_technology = null; |
||||
|
|
||||
|
installed_capacity_kg = null; |
||||
|
installation_year = null; |
||||
|
vendor_name = null; |
||||
|
|
||||
|
unit_functional_status = null; |
||||
|
|
||||
|
longitude = null; |
||||
|
latitude = null; |
||||
|
|
||||
|
installedPhotoPath = null; |
||||
|
} |
||||
|
|
||||
|
//---------------------------------------------------- |
||||
|
// If Recycler = No |
||||
|
//---------------------------------------------------- |
||||
|
|
||||
|
if ("No".equalsIgnoreCase(dry_waste_recycler)) { |
||||
|
|
||||
|
recycler_name = null; |
||||
|
recycler_authorization_no = null; |
||||
|
} |
||||
|
|
||||
|
//-------------------------------------------------- |
||||
|
// Check Duplicate Mobile Number |
||||
|
//-------------------------------------------------- |
||||
|
|
||||
|
Integer mobileCount = jdbcTemplate.queryForObject( |
||||
|
|
||||
|
"SELECT COUNT(*) FROM bulk_waste_request " + |
||||
|
"WHERE mobile_no=? AND request_id<>? AND is_delete=0", |
||||
|
|
||||
|
Integer.class, |
||||
|
|
||||
|
mobile_no, |
||||
|
requestId |
||||
|
); |
||||
|
|
||||
|
if (mobileCount != null && mobileCount > 0) { |
||||
|
return "mobile_exists"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
//-------------------------------------------------- |
||||
|
// Update |
||||
|
//-------------------------------------------------- |
||||
|
|
||||
|
String sql = |
||||
|
|
||||
|
"UPDATE bulk_waste_request SET " + |
||||
|
|
||||
|
"name_of_establishment=?,category_id=?,zone_id=?,ward_id=?,trade_license_No=?," + |
||||
|
"person_name=?,email_id=?,mobile_no=?,gst_No=?,address=?," + |
||||
|
|
||||
|
"total_builtup_area_sqmt=?,establishment_type=?,dwelling_units=?," + |
||||
|
"avg_daily_footfall=?,totalEmployees=?," + |
||||
|
|
||||
|
"wet_waste=?,dry_waste=?,domestic_hazardous_waste=?,sanitary_waste=?,cd_waste=?," + |
||||
|
"waste_audit_report_file=?," + |
||||
|
|
||||
|
"wet_waste_processed=?,technology_used=?,other_technology=?," + |
||||
|
"installed_capacity_kg=?,installation_year=?,vendor_name=?," + |
||||
|
"unit_functional_status=?,installed_unit_photo_file=?," + |
||||
|
|
||||
|
"longitude=?,latitude=?," + |
||||
|
|
||||
|
"dry_waste_recycler=?,recycler_name=?,recycler_authorization_no=?," + |
||||
|
|
||||
|
"residual_waste_quantity=?,collection_frequency=?,vehicle_type=?," + |
||||
|
|
||||
|
"update_date=NOW()," + |
||||
|
"update_by=? " + |
||||
|
|
||||
|
"WHERE request_id=?"; |
||||
|
|
||||
|
int count = jdbcTemplate.update( |
||||
|
|
||||
|
sql, |
||||
|
|
||||
|
name_of_establishment, category_id, zone_id, ward_id, |
||||
|
trade_license_No, person_name, email_id, mobile_no, gst_No, address, |
||||
|
|
||||
|
total_builtup_area_sqmt, establishment_type, dwelling_units, avg_daily_footfall, totalEmployees, |
||||
|
|
||||
|
wet_waste, dry_waste, domestic_hazardous_waste, sanitary_waste, cd_waste, |
||||
|
|
||||
|
wasteAuditPath, |
||||
|
|
||||
|
wet_waste_processed, technology_used, other_technology, installed_capacity_kg, |
||||
|
installation_year, vendor_name, unit_functional_status, installedPhotoPath, |
||||
|
|
||||
|
longitude, latitude, |
||||
|
|
||||
|
dry_waste_recycler, recycler_name, recycler_authorization_no, |
||||
|
|
||||
|
residual_waste_quantity, collection_frequency, vehicle_type, |
||||
|
|
||||
|
update_by, |
||||
|
|
||||
|
requestId |
||||
|
); |
||||
|
|
||||
|
return count > 0 ? "success" : "error"; |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
|
||||
|
e.printStackTrace(); |
||||
|
return "error"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// ============================== |
||||
|
// Delete Details |
||||
|
// ============================== |
||||
|
|
||||
|
|
||||
|
public String deactivatebulkrequest(int requestId,Integer updateBy) { |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
String sql = |
||||
|
"UPDATE bulk_waste_request " + |
||||
|
"SET is_active = 0, is_delete = 1,update_by=?,update_date=NOW() " + |
||||
|
"WHERE request_id = ?"; |
||||
|
|
||||
|
|
||||
|
int count = jdbcTemplate.update(sql, updateBy,requestId); |
||||
|
|
||||
|
if (count > 0) { |
||||
|
return "success"; |
||||
|
} else { |
||||
|
return "error"; |
||||
|
} |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return "error"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,151 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.c_petition.controller; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
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.RestController; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.c_petition.service.Petition; |
||||
|
import in.gov.chennaicorporation.gccoffice.c_petition.service.PetitionMaster; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("gcc/api/c_petition") |
||||
|
@RestController("cpRest") // Mayor Petition Rest |
||||
|
public class APIController { |
||||
|
private PetitionMaster petitionMaster; |
||||
|
private Petition petition; |
||||
|
|
||||
|
@Autowired |
||||
|
public APIController(PetitionMaster petitionMaster,Petition petition) { |
||||
|
this.petitionMaster = petitionMaster; |
||||
|
this.petition = petition; |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getComplaintTypes") |
||||
|
public List getComplaintTypeList() { |
||||
|
return petitionMaster.getComplaintType(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getOfficerList") |
||||
|
public List getOfficerList() { |
||||
|
return petitionMaster.getOfficerList(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getPetitionList") |
||||
|
public List getPetitionList() { |
||||
|
return petition.getPetitionList(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getUnmapPetitionList") |
||||
|
public List getUnmapPetitionList() { |
||||
|
return petition.getUnmapPetitionList(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getPetitionDetails") |
||||
|
public List getPetitionDetails(@RequestParam("petitionNo") String petitionNo) { |
||||
|
return petition.getPetitionDetails(petitionNo); |
||||
|
} |
||||
|
|
||||
|
@PostMapping(value="/savePetition") |
||||
|
public String savePetition( |
||||
|
@RequestParam("createdBy") String createdBy, |
||||
|
@RequestParam("petition_type") String petitionType, |
||||
|
@RequestParam("petitionerName") String petitionerName, |
||||
|
@RequestParam("petitionerMobile") String petitionerMobile, |
||||
|
@RequestParam("complaintType") String petitionerComplaint, |
||||
|
@RequestParam("san_page1") MultipartFile page1, |
||||
|
@RequestParam("san_page2") MultipartFile page2, |
||||
|
@RequestParam("san_page3") MultipartFile page3, |
||||
|
@RequestParam("san_page4") MultipartFile page4) { |
||||
|
|
||||
|
return petition.savePetition(petitionType,createdBy, petitionerName, petitionerMobile, petitionerComplaint, page1, page2, page3, page4); |
||||
|
} |
||||
|
|
||||
|
@PostMapping(value="/updatePetition") |
||||
|
public Boolean updatePetition( |
||||
|
@RequestParam("petitionType") String petitionType, |
||||
|
@RequestParam("petitionNo") String petitionNo, |
||||
|
@RequestParam("createdBy") String createdBy, |
||||
|
@RequestParam("petitionerName") String petitionerName, |
||||
|
@RequestParam("petitionerMobile") String petitionerMobile, |
||||
|
@RequestParam("petitionerAddress") String petitionerAddress, |
||||
|
@RequestParam("petitionerPincode") String petitionerPincode, |
||||
|
@RequestParam("complaintType") String petitionerComplaint, |
||||
|
@RequestParam("complaintNature") String complaintNature) { |
||||
|
|
||||
|
return petition.updatePetition(petitionNo, petitionType, createdBy, petitionerName, petitionerMobile, petitionerAddress, petitionerPincode, petitionerComplaint, complaintNature); |
||||
|
} |
||||
|
|
||||
|
@PostMapping(value="/mapComplientToOfficer") |
||||
|
public Boolean updatePetition( |
||||
|
@RequestParam("petitionId") String petitionId, |
||||
|
@RequestParam("petitionNo") String petitionNo, |
||||
|
@RequestParam("createdBy") String createdBy, |
||||
|
@RequestParam(value = "", required = false) String mapOfficers) { |
||||
|
|
||||
|
String com_mapping = mapOfficers; |
||||
|
|
||||
|
// First before Mapping need to unmaps old list |
||||
|
petition.unmapComplient(petitionId, petitionNo); |
||||
|
|
||||
|
if(com_mapping!=null) { |
||||
|
String[] com_mapping_parts = com_mapping.split(","); |
||||
|
for (String values : com_mapping_parts) { |
||||
|
String[] com_mapping_val = values.split("_"); |
||||
|
if (com_mapping_val.length > 0) { |
||||
|
String complientId = com_mapping_val[0]; |
||||
|
String offcierId = com_mapping_val[1]; |
||||
|
petition.mapComplientToOfficer(createdBy, petitionId, petitionNo, complientId, offcierId); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping(value="/getComplaintMappingDetails") |
||||
|
public List getComplaintMappingDetails( |
||||
|
@RequestParam("petitionId") String petitionId, |
||||
|
@RequestParam("petitionNo") String petitionNo, |
||||
|
@RequestParam("complaintTypeId") String complaintTypeId) { |
||||
|
return petition.getComplaintMappingDetails(petitionNo,petitionId,complaintTypeId); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getComplaintList") |
||||
|
public List getComplaintList() { |
||||
|
return petition.getComplaintList(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getComplaintListByPetitionId") |
||||
|
public List getComplaintList(@RequestParam("petitionId") String petitionId) { |
||||
|
return petition.getComplaintListByPetitionId(petitionId); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getComplaintDetails") |
||||
|
public List<?> getComplaintDetails(@RequestParam("mapId") String mapId) { |
||||
|
return petition.getComplaintDetails(mapId); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getComplaintActionDetails") |
||||
|
public List<?> getComplaintActionDetails(@RequestParam("mapId") String mapId) { |
||||
|
return petition.getComplaintActionDetails(mapId); |
||||
|
} |
||||
|
|
||||
|
@PostMapping(value="/saveComplanitStatus") |
||||
|
public String saveComplanitStatus( |
||||
|
@RequestParam("createdBy") String createdBy, |
||||
|
@RequestParam("mapId") String mapId, |
||||
|
@RequestParam("complaintStatus") String complaintStatus, |
||||
|
@RequestParam("complaintActionText") String complaintActionText, |
||||
|
@RequestParam("action_san_page1") MultipartFile actionPage1, |
||||
|
@RequestParam("petitionId") String petitionId, |
||||
|
@RequestParam("petitionNo") String petitionNo) { |
||||
|
|
||||
|
return petition.saveComplanitStatus(createdBy, mapId, complaintStatus, complaintActionText, actionPage1, petitionId, petitionNo); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,130 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.c_petition.controller; |
||||
|
|
||||
|
import org.hibernate.hql.internal.ast.tree.RestrictableStatement; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.service.Base64Util; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("/gcc/c_petition") |
||||
|
@Controller("CouncillorPetitionController") |
||||
|
public class MainController { |
||||
|
private final RestTemplate restTemplate; |
||||
|
private String BasePath = "modules/c_petition/"; |
||||
|
@Autowired |
||||
|
public MainController(RestTemplate restTemplate) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
} |
||||
|
|
||||
|
@GetMapping({"", "/", "/index", "/dashboard"}) |
||||
|
public String dashboard(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
return BasePath+"index"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping({"/new_petition"}) |
||||
|
public String newPetition(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
return BasePath+"new_petition"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/petition-ack/{petitionNo}") |
||||
|
public String petitionAck(Model model,@PathVariable("petitionNo") String petitionNo) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
model.addAttribute("petitionNo",petitionNo); |
||||
|
return BasePath+"petition_ack"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/petition-list") |
||||
|
public String petitionList(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
return BasePath+"petition_list"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/unmapped-petition-list") |
||||
|
public String unMappedPetitionList(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
return BasePath+"petition_not_mapped_list"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/update-petition") |
||||
|
public String petitionUpadte(Model model,@RequestParam(value="petitionNo", required = false) String petitionNo) { |
||||
|
|
||||
|
if (petitionNo != null && !petitionNo.isEmpty()) { |
||||
|
// Decrypt the encrypted value |
||||
|
petitionNo = Base64Util.decodeBase64(petitionNo); |
||||
|
} |
||||
|
else { |
||||
|
petitionNo = null; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
model.addAttribute("petitionNo",petitionNo); |
||||
|
return BasePath+"petition_update"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/view-petition") |
||||
|
public String petitionView(Model model,@RequestParam(value="petitionNo", required = false) String petitionNo) { |
||||
|
|
||||
|
if (petitionNo != null && !petitionNo.isEmpty()) { |
||||
|
// Decrypt the encrypted value |
||||
|
petitionNo = Base64Util.decodeBase64(petitionNo); |
||||
|
} |
||||
|
else { |
||||
|
petitionNo = null; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
model.addAttribute("petitionNo",petitionNo); |
||||
|
return BasePath+"petition_view"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/view-petition-modal") |
||||
|
public String petitionViewModal(Model model,@RequestParam(value="petitionNo", required = false) String petitionNo) { |
||||
|
|
||||
|
if (petitionNo != null && !petitionNo.isEmpty()) { |
||||
|
// Decrypt the encrypted value |
||||
|
petitionNo = Base64Util.decodeBase64(petitionNo); |
||||
|
} |
||||
|
else { |
||||
|
petitionNo = null; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
model.addAttribute("petitionNo",petitionNo); |
||||
|
return BasePath+"petition_view_modal_page"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/search-petition") |
||||
|
public String petitionSearch(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
//model.addAttribute("petitionNo",petitionNo); |
||||
|
return BasePath+"petition_update"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/complaint-list") |
||||
|
public String complaintList(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
return BasePath+"complaint_list"; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.c_petition.controller; |
||||
@ -0,0 +1,21 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.c_petition.data; |
||||
|
|
||||
|
import java.util.Map; |
||||
|
|
||||
|
public class ComplaintType { |
||||
|
private int complaintTypeId; |
||||
|
private String complaintType; |
||||
|
|
||||
|
public ComplaintType(Map<String, Object> map) { |
||||
|
this.complaintTypeId = (int) map.get("complaint_typeid"); |
||||
|
this.complaintType = (String) map.get("complaint_type"); |
||||
|
} |
||||
|
|
||||
|
public int getComplaintTypeId() { |
||||
|
return complaintTypeId; |
||||
|
} |
||||
|
|
||||
|
public String getComplaintType() { |
||||
|
return complaintType; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.c_petition.data; |
||||
@ -0,0 +1 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.c_petition.entity; |
||||
@ -0,0 +1,7 @@ |
|||||
|
/** |
||||
|
* |
||||
|
*/ |
||||
|
/** |
||||
|
* |
||||
|
*/ |
||||
|
package in.gov.chennaicorporation.gccoffice.c_petition; |
||||
@ -0,0 +1,709 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.c_petition.service; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
import java.nio.file.Files; |
||||
|
import java.nio.file.Path; |
||||
|
import java.nio.file.Paths; |
||||
|
import java.sql.PreparedStatement; |
||||
|
import java.sql.Statement; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
|
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.core.env.Environment; |
||||
|
import org.springframework.dao.DataAccessException; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.m_petition.data.ComplaintType; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.Base64Util; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
import org.springframework.jdbc.core.PreparedStatementCreator; |
||||
|
import org.springframework.jdbc.support.GeneratedKeyHolder; |
||||
|
import org.springframework.jdbc.support.KeyHolder; |
||||
|
|
||||
|
@Service("cPetitionService") |
||||
|
public class Petition { |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
private final Environment environment; |
||||
|
private PetitionMaster petitionMaster; |
||||
|
|
||||
|
@Autowired |
||||
|
public Petition(Environment environment,PetitionMaster petitionMaster) { |
||||
|
this.environment = environment; |
||||
|
this.petitionMaster = petitionMaster; |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysqlCouncillorPetitionDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List getComplaintTypeList() { |
||||
|
return petitionMaster.getComplaintType(); |
||||
|
} |
||||
|
/* |
||||
|
@Transactional(readOnly = true) |
||||
|
public static List<ComplaintType> convertToComplaintTypes(List<Map<String, Object>> complaintTypeMaps) { |
||||
|
return complaintTypeMaps.stream() |
||||
|
.map(ComplaintType::new) |
||||
|
.collect(Collectors.toList()); |
||||
|
} |
||||
|
*/ |
||||
|
@Transactional(readOnly = true) |
||||
|
public static List<ComplaintType> convertToComplaintTypes(List<Map<String, Object>> complaintTypeMaps) { |
||||
|
List<ComplaintType> complaintTypes = new ArrayList<>(); |
||||
|
for (Map<String, Object> complaintTypeMap : complaintTypeMaps) { |
||||
|
complaintTypes.add(new ComplaintType(complaintTypeMap)); |
||||
|
} |
||||
|
return complaintTypes; |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
// Method to map complaint type IDs to their respective complaint types |
||||
|
public static String mapComplaintTypes(List<ComplaintType> complaintTypes, String complaint) { |
||||
|
String[] complaintIds = complaint.split(","); |
||||
|
StringBuilder complaintTxtBuilder = new StringBuilder(); |
||||
|
|
||||
|
for (String complaintId : complaintIds) { |
||||
|
int id = Integer.parseInt(complaintId); |
||||
|
for (ComplaintType type : complaintTypes) { |
||||
|
if (type.getComplaintTypeId() == id) { |
||||
|
if (complaintTxtBuilder.length() > 0) { |
||||
|
complaintTxtBuilder.append(","); |
||||
|
} |
||||
|
complaintTxtBuilder.append(type.getComplaintType()); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return complaintTxtBuilder.toString(); |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getPetitionList() { |
||||
|
try { |
||||
|
String sqlQuery = "SELECT * FROM petition WHERE (`isactive`=1 AND `isdelete`=0)"; |
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sqlQuery); |
||||
|
Base64Util.encodeBase64(sqlQuery); |
||||
|
|
||||
|
// Iterate over the list of maps |
||||
|
for (Map<String, Object> map : result) { |
||||
|
// Get the value of the 'petitionNo' field from the map |
||||
|
String petitionNo = (String) map.get("petition_no"); |
||||
|
|
||||
|
// Encode the 'petitionNo' value using Base64Util |
||||
|
String petitionNoEncoded = Base64Util.encodeBase64(petitionNo); |
||||
|
|
||||
|
// Add the encoded value as 'petitionNoEncode' to the map |
||||
|
map.put("petitionNoEncode", petitionNoEncoded); |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} catch (DataAccessException e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; // Return null or handle error appropriately |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getUnmapPetitionList() { |
||||
|
try { |
||||
|
String sqlQuery = "SELECT " |
||||
|
+ " p.* " |
||||
|
+ "FROM " |
||||
|
+ " `petition` p " |
||||
|
+ "WHERE " |
||||
|
+ " p.`isactive` = 1 AND p.`isdelete` = 0 " |
||||
|
+ " AND NOT EXISTS (" |
||||
|
+ " SELECT 1 " |
||||
|
+ " FROM `petition_mapping` pm " |
||||
|
+ " WHERE (p.`petition_id` = pm.`petition_id`) AND (pm.`isactive` = 1 AND pm.`isdelete` = 0 ) " |
||||
|
+ " )"; |
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sqlQuery); |
||||
|
|
||||
|
// Iterate over the list of maps |
||||
|
for (Map<String, Object> map : result) { |
||||
|
// Get the value of the 'petitionNo' field from the map |
||||
|
String petitionNo = (String) map.get("petition_no"); |
||||
|
|
||||
|
// Encode the 'petitionNo' value using Base64Util |
||||
|
String petitionNoEncoded = Base64Util.encodeBase64(petitionNo); |
||||
|
|
||||
|
// Add the encoded value as 'petitionNoEncode' to the map |
||||
|
map.put("petitionNoEncode", petitionNoEncoded); |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} catch (DataAccessException e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; // Return null or handle error appropriately |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getPetitionDetails(String petitionNo) { |
||||
|
// String petitionNoEncoded = Base64Util.encodeBase64(petitionNo); |
||||
|
try { |
||||
|
String sqlQuery = "SELECT * FROM petition WHERE petition_no = ? AND (`isactive`=1 AND `isdelete`=0) LIMIT 1"; |
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sqlQuery, petitionNo); |
||||
|
return result; |
||||
|
} catch (DataAccessException e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; // Return null or handle error appropriately |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public String savePetition( |
||||
|
String petitionType, |
||||
|
String createdBy, |
||||
|
String petitionerName, |
||||
|
String petitionerMobile, |
||||
|
String petitionerComplaint, |
||||
|
MultipartFile page1, |
||||
|
MultipartFile page2, |
||||
|
MultipartFile page3, |
||||
|
MultipartFile page4) { |
||||
|
|
||||
|
//System.out.println("I am from Service Page "+petitionerName); |
||||
|
|
||||
|
//String complaintNature = ""; |
||||
|
int lastInsertId = 0; |
||||
|
String sqlQuery = "INSERT INTO `petition` " |
||||
|
+ "(`petition_type`,`created_by`, `petitioner_name`, `petitioner_mobile`, " |
||||
|
+ "`petitioner_complaint`, `petitioner_complaint_txt`) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?)"; |
||||
|
|
||||
|
try { |
||||
|
// Complaint Type List |
||||
|
List complaintTypelist = getComplaintTypeList(); |
||||
|
// Convert the list of maps to a list of ComplaintType objects |
||||
|
List<ComplaintType> complaintTypes = convertToComplaintTypes(complaintTypelist); |
||||
|
|
||||
|
// Map complaint types |
||||
|
String petitionerComplaint_txt = mapComplaintTypes(complaintTypes, petitionerComplaint); |
||||
|
|
||||
|
KeyHolder keyHolder = new GeneratedKeyHolder(); |
||||
|
// Use JdbcTemplate's update method to execute the query with parameters |
||||
|
jdbcTemplate.update(connection -> { |
||||
|
PreparedStatement ps = connection.prepareStatement(sqlQuery, Statement.RETURN_GENERATED_KEYS); |
||||
|
ps.setString(1, petitionType); |
||||
|
ps.setString(2, createdBy); |
||||
|
ps.setString(3, petitionerName); |
||||
|
ps.setString(4, petitionerMobile); |
||||
|
ps.setString(5, petitionerComplaint); |
||||
|
ps.setString(6, petitionerComplaint_txt); |
||||
|
return ps; |
||||
|
}, keyHolder); |
||||
|
|
||||
|
// Get the last insert ID |
||||
|
lastInsertId = (int) keyHolder.getKey().longValue(); |
||||
|
|
||||
|
// Get the value of cp_ackno from application.properties |
||||
|
String ackno = environment.getProperty("cp_ackno"); |
||||
|
String ackno_prefix = environment.getProperty("cp_ackno_prefix"); |
||||
|
|
||||
|
// Convert ackno to int if needed |
||||
|
int acknoInt = Integer.parseInt(ackno); |
||||
|
|
||||
|
// Calculate the petition number |
||||
|
int petitionNo = (int) (lastInsertId + acknoInt); |
||||
|
|
||||
|
// Construct the petition number string |
||||
|
String petitionNoString = ackno_prefix + petitionNo; |
||||
|
|
||||
|
// Update the petition number in the database |
||||
|
updatePetitionNumber(lastInsertId, petitionNoString); |
||||
|
|
||||
|
// Add Petition Scan File in the database |
||||
|
addPetitionFile(createdBy,lastInsertId, petitionNoString, page1, page2, page3, page4); |
||||
|
|
||||
|
return petitionNoString; // If no exception, query executed successfully |
||||
|
} catch (DataAccessException e) { |
||||
|
// Handle exception (e.g., log error) |
||||
|
e.printStackTrace(); |
||||
|
return "error"; // Query execution failed |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public boolean updatePetitionNumber(int petitionId,String petitionNoString) { |
||||
|
String sqlQuery = "UPDATE `petition` SET `petition_no`='"+petitionNoString+"' WHERE `petition_id`='"+petitionId+"'"; |
||||
|
jdbcTemplate.update(sqlQuery); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public String addPetitionFile(String createdBy, |
||||
|
int petitionId, |
||||
|
String petitionNoString, |
||||
|
MultipartFile page1, |
||||
|
MultipartFile page2, |
||||
|
MultipartFile page3, |
||||
|
MultipartFile page4) { |
||||
|
|
||||
|
String fileName=""; |
||||
|
for (int i = 1; i <= 4; i++) { |
||||
|
MultipartFile file = null; |
||||
|
switch (i) { |
||||
|
case 1: |
||||
|
file = page1; |
||||
|
fileName = "Scan1"; |
||||
|
break; |
||||
|
case 2: |
||||
|
file = page2; |
||||
|
fileName = "Scan2"; |
||||
|
break; |
||||
|
case 3: |
||||
|
file = page3; |
||||
|
fileName = "Scan3"; |
||||
|
break; |
||||
|
case 4: |
||||
|
file = page4; |
||||
|
fileName = "Scan4"; |
||||
|
break; |
||||
|
} |
||||
|
if (file != null && !file.isEmpty()) { |
||||
|
try { |
||||
|
// Get the bytes of the file |
||||
|
byte[] bytes = file.getBytes(); |
||||
|
|
||||
|
// Set the file path where you want to save it |
||||
|
String uploadDirectory = environment.getProperty("file.upload.directory"); |
||||
|
String serviceFolderName = environment.getProperty("cp_foldername"); |
||||
|
uploadDirectory = uploadDirectory + serviceFolderName; |
||||
|
|
||||
|
// File name |
||||
|
fileName = petitionId + "_" + fileName + "_" + petitionNoString + "_" + file.getOriginalFilename(); |
||||
|
|
||||
|
//File Size |
||||
|
Long fileSize = file.getSize(); |
||||
|
|
||||
|
// File Type |
||||
|
String fileType = file.getContentType(); |
||||
|
|
||||
|
// Create directory if it doesn't exist |
||||
|
Path directoryPath = Paths.get(uploadDirectory); |
||||
|
if (!Files.exists(directoryPath)) { |
||||
|
Files.createDirectories(directoryPath); |
||||
|
} |
||||
|
|
||||
|
String filePath = uploadDirectory + "/" + fileName; |
||||
|
|
||||
|
// Create a new Path object |
||||
|
Path path = Paths.get(filePath); |
||||
|
|
||||
|
// Write the bytes to the file |
||||
|
Files.write(path, bytes); |
||||
|
|
||||
|
// Save the file path to a database |
||||
|
String sqlQuery = "INSERT INTO `pentition_files`(`created_by`, `file_name`, `file_size`, `file_type`, `petition_no`, `petition_id`) " |
||||
|
+ "VALUES ('"+createdBy+"','"+fileName+"','"+fileSize+"','"+fileType+"','"+petitionNoString+"','"+petitionId+"')"; |
||||
|
jdbcTemplate.update(sqlQuery); |
||||
|
|
||||
|
} catch (IOException e) { |
||||
|
e.printStackTrace(); |
||||
|
return "Failed to save file " + file.getOriginalFilename(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
return "success"; |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public boolean updatePetition( |
||||
|
String petitionType, |
||||
|
String petitionNo, |
||||
|
String createdBy, |
||||
|
String petitionerName, |
||||
|
String petitionerMobile, |
||||
|
String petitionerAddress, |
||||
|
String petitionerPincode, |
||||
|
String petitionerComplaint, |
||||
|
String complaintNature) { |
||||
|
|
||||
|
try { |
||||
|
// Complaint Type List |
||||
|
List complaintTypelist = getComplaintTypeList(); |
||||
|
// Convert the list of maps to a list of ComplaintType objects |
||||
|
List<ComplaintType> complaintTypes = convertToComplaintTypes(complaintTypelist); |
||||
|
|
||||
|
// Map complaint types |
||||
|
String petitionerComplaint_txt = mapComplaintTypes(complaintTypes, petitionerComplaint); |
||||
|
/* |
||||
|
String sqlQuery = "UPDATE `petition` SET " |
||||
|
+ "`petition_type`='"+petitionType+"', `created_by`='"+createdBy+"', `petitioner_name`='"+petitionerName+"', `petitioner_mobile`='"+petitionerMobile+"', " |
||||
|
+ "`petitioner_address`='"+petitionerAddress+"', `petitioner_pincode`='"+petitionerPincode+"'," |
||||
|
+ "`petitioner_complaint`='"+petitionerComplaint+"', `petitioner_complaint_txt`='"+petitionerComplaint_txt+"', `complaint_nature`='"+complaintNature+"' " |
||||
|
+ "WHERE (`petition_no`='"+petitionNo+"') LIMIT 1"; |
||||
|
|
||||
|
// Use JdbcTemplate's update method to execute the query with parameters |
||||
|
jdbcTemplate.update(sqlQuery); |
||||
|
*/ |
||||
|
String sqlQuery = "UPDATE `petition` SET " |
||||
|
+ "`petition_type` = ?, `created_by` = ?, `petitioner_name` = ?, `petitioner_mobile` = ?, " |
||||
|
+ "`petitioner_address` = ?, `petitioner_pincode` = ?, `petitioner_complaint` = ?, " |
||||
|
+ "`petitioner_complaint_txt` = ?, `complaint_nature` = ? " |
||||
|
+ "WHERE `petition_no` = ? LIMIT 1"; |
||||
|
|
||||
|
int rowsUpdated = jdbcTemplate.update(sqlQuery, |
||||
|
petitionType, |
||||
|
createdBy, |
||||
|
petitionerName, |
||||
|
petitionerMobile, |
||||
|
petitionerAddress, |
||||
|
petitionerPincode, |
||||
|
petitionerComplaint, |
||||
|
petitionerComplaint_txt, // Safely includes single quotes |
||||
|
complaintNature, |
||||
|
petitionNo |
||||
|
); |
||||
|
|
||||
|
// Add Petition Scan File in the database |
||||
|
//addPetitionFile(createdBy,lastInsertId, petitionNoString, page1, page2, page3, page4); |
||||
|
|
||||
|
return true; // If no exception, query executed successfully |
||||
|
} catch (DataAccessException e) { |
||||
|
// Handle exception (e.g., log error) |
||||
|
e.printStackTrace(); |
||||
|
return false; // Query execution failed |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public boolean updatePetitionStatus(String petitionId,String petitionNo) { |
||||
|
String status_value = "close"; |
||||
|
List<Map<String, Object>> petitionMappingDetails = getPetitionMappingDetails(petitionNo, petitionId); |
||||
|
|
||||
|
for (Map<String, Object> mapping : petitionMappingDetails) { |
||||
|
// Access values from the map using keys |
||||
|
Object status = mapping.get("status"); |
||||
|
// Check if status is "close" |
||||
|
if (!"close".equals(status)) { |
||||
|
status_value = "partial"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
String sqlQuery = "UPDATE `petition` SET `status`='"+status_value+"' WHERE `petition_no`='"+petitionNo+"' AND `petition_id`='"+petitionId+"' LIMIT 1"; |
||||
|
jdbcTemplate.update(sqlQuery); |
||||
|
System.out.println(sqlQuery); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getPetitionMappingDetails(String petitionNo, String petitionId) { |
||||
|
try { |
||||
|
String sqlQuery = "SELECT * FROM petition_mapping WHERE (`petition_id`= ? AND petition_no = ?) AND (`isactive`=1 AND `isdelete`=0)"; |
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sqlQuery, petitionId, petitionNo); |
||||
|
return result; |
||||
|
} catch (DataAccessException e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; // Return null or handle error appropriately |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public boolean unmapComplient(String petitionId, String petitionNo) { |
||||
|
String sqlQuery = "UPDATE `petition_mapping` SET `isactive`='0',`isdelete`='1' WHERE `petition_id`='"+petitionId+"' AND `petition_no`='"+petitionNo+"'"; |
||||
|
jdbcTemplate.update(sqlQuery); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public boolean mapComplientToOfficer( |
||||
|
String createdBy, String petitionId, String petitionNo, String complaintId, String officerId) { |
||||
|
String sqlQuery = "INSERT INTO `petition_mapping`" |
||||
|
+ "(`created_by`, `off_id`, `petition_no`, `complaint_typeid`, `petition_id`) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?)"; |
||||
|
jdbcTemplate.update(sqlQuery, createdBy, officerId, petitionNo, complaintId, petitionId); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public boolean updateMapComplientStatus(String mapId,String status) { |
||||
|
String sqlQuery = "UPDATE `petition_mapping` SET `status`=? WHERE `mapid`=? LIMIT 1"; |
||||
|
jdbcTemplate.update(sqlQuery, status, mapId); |
||||
|
System.out.println(sqlQuery); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getComplaintMappingDetails(String petitionNo, String petitionId, String complaintTypeId) { |
||||
|
try { |
||||
|
String sqlQuery = "SELECT * FROM petition_mapping WHERE (`petition_id`= ? AND petition_no = ?) AND `complaint_typeid`= ? AND (`isactive`=1 AND `isdelete`=0) LIMIT 1"; |
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sqlQuery, petitionId, petitionNo,complaintTypeId); |
||||
|
return result; |
||||
|
} catch (DataAccessException e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; // Return null or handle error appropriately |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getComplaintList() { |
||||
|
try { |
||||
|
String sqlQuery = "SELECT " |
||||
|
+ " p.`petition_id`, p.`cdate`, p.`created_by`, p.`isactive`, p.`isdelete`, p.`petition_no`, " |
||||
|
+ " p.`petitioner_address`, p.`petitioner_complaint`, p.`petitioner_complaint_txt`, " |
||||
|
+ " p.`petitioner_mobile`, p.`petitioner_name`, p.`complaint_nature`, p.`petitioner_pincode`, " |
||||
|
+ " pm.`mapid`, pm.`complaint_typeid`, pm.`off_id`, pm.`status`, om.`off_nm`, ctype.`complaint_type` " |
||||
|
+ " FROM " |
||||
|
+ " `petition` p, `petition_mapping` pm, `petition_master`.`officer_master` om, `petition_master`.`complaint_types` ctype " |
||||
|
+ " WHERE " |
||||
|
+ " (p.`isactive` = 1 AND p.`isdelete` = 0) " |
||||
|
+ " AND (pm.`isactive` = 1 AND pm.`isdelete` = 0) " |
||||
|
+ " AND (om.`isactive` = 1 AND om.`isdelete` = 0) " |
||||
|
+ " AND (om.`off_id` = pm.`off_id`) " |
||||
|
+ " AND (ctype.`complaint_typeid` = pm.`complaint_typeid`) " |
||||
|
+ " AND (p.`petition_id` = pm.`petition_id`)" |
||||
|
+ " "; |
||||
|
System.out.println(sqlQuery); |
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sqlQuery); |
||||
|
|
||||
|
// Iterate over the list of maps |
||||
|
for (Map<String, Object> map : result) { |
||||
|
// Get the value of the 'petitionNo' field from the map |
||||
|
String petitionNo = (String) map.get("petition_no"); |
||||
|
|
||||
|
// Encode the 'petitionNo' value using Base64Util |
||||
|
String petitionNoEncoded = Base64Util.encodeBase64(petitionNo); |
||||
|
|
||||
|
// Add the encoded value as 'petitionNoEncode' to the map |
||||
|
map.put("petitionNoEncode", petitionNoEncoded); |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} catch (DataAccessException e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; // Return null or handle error appropriately |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getComplaintListByPetitionId(String petitionId) { |
||||
|
try { |
||||
|
String sqlQuery = "SELECT " |
||||
|
+ " p.`petition_id`, p.`cdate`, p.`created_by`, p.`isactive`, p.`isdelete`, p.`petition_no`, " |
||||
|
+ " p.`petitioner_address`, p.`petitioner_complaint`, p.`petitioner_complaint_txt`, " |
||||
|
+ " p.`petitioner_mobile`, p.`petitioner_name`, p.`complaint_nature`, p.`petitioner_pincode`, p.`status` petition_status, " |
||||
|
+ " pm.`mapid`, pm.`complaint_typeid`, pm.`off_id`, pm.`status` complaint_status, pm.`cdate` mappedOn, om.`off_nm`, ctype.`complaint_type` " |
||||
|
+ " FROM " |
||||
|
+ " `mayor_petition`.`petition` p,`mayor_petition`.`petition_mapping` pm, `petition_master`.`officer_master` om, `petition_master`.`complaint_types` ctype " |
||||
|
+ " WHERE " |
||||
|
+ " (p.`petition_id` = '"+petitionId+"' AND p.`isactive` = 1 AND p.`isdelete` = 0) " |
||||
|
+ " AND (pm.`isactive` = 1 AND pm.`isdelete` = 0) " |
||||
|
+ " AND (om.`isactive` = 1 AND om.`isdelete` = 0) " |
||||
|
+ " AND (om.`off_id` = pm.`off_id`) " |
||||
|
+ " AND (ctype.`complaint_typeid` = pm.`complaint_typeid`) " |
||||
|
+ " AND (p.`petition_id` = pm.`petition_id`)" |
||||
|
+ " "; |
||||
|
System.out.println(sqlQuery); |
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sqlQuery); |
||||
|
|
||||
|
// Iterate over the list of maps |
||||
|
for (Map<String, Object> map : result) { |
||||
|
// Get the value of the 'petitionNo' field from the map |
||||
|
String petitionNo = (String) map.get("petition_no"); |
||||
|
|
||||
|
// Encode the 'petitionNo' value using Base64Util |
||||
|
String petitionNoEncoded = Base64Util.encodeBase64(petitionNo); |
||||
|
|
||||
|
// Add the encoded value as 'petitionNoEncode' to the map |
||||
|
map.put("petitionNoEncode", petitionNoEncoded); |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} catch (DataAccessException e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; // Return null or handle error appropriately |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String, Object>> getComplaintDetails(String mapid) { |
||||
|
try { |
||||
|
String sqlQuery = "SELECT " |
||||
|
+ " p.`petition_id`, p.`cdate`, p.`created_by`, p.`isactive`, p.`isdelete`, p.`petition_no`, " |
||||
|
+ " p.`petitioner_address`, p.`petitioner_complaint`, p.`petitioner_complaint_txt`, " |
||||
|
+ " p.`petitioner_mobile`, p.`petitioner_name`, p.`complaint_nature`, p.`petitioner_pincode`, " |
||||
|
+ " pm.`mapid`, pm.`complaint_typeid`, pm.`off_id`, pm.`status`, om.`off_nm`, ctype.`complaint_type`, " |
||||
|
+ " COALESCE(pf.`mtm_pet_file_id`, 'No file available') AS mtm_pet_file_id, " |
||||
|
+ " COALESCE(pf.`cdate`, '') AS file_cdate, " |
||||
|
+ " COALESCE(pf.`created_by`, 'N/A') AS file_created_by, " |
||||
|
+ " COALESCE(pf.`file_name`, 'No file available') AS file_name, " |
||||
|
+ " COALESCE(pf.`file_size`, 0) AS file_size, " |
||||
|
+ " COALESCE(pf.`file_type`, 'Unknown') AS file_type, " |
||||
|
+ " COALESCE(pf.`isactive`, 0) AS file_isactive, " |
||||
|
+ " COALESCE(pf.`isdelete`, 0) AS file_isdelete " |
||||
|
+ " FROM " |
||||
|
+ " `petition` p " |
||||
|
+ " JOIN `petition_mapping` pm ON p.`petition_id` = pm.`petition_id` " |
||||
|
+ " JOIN `petition_master`.`officer_master` om ON om.`off_id` = pm.`off_id` " |
||||
|
+ " JOIN `petition_master`.`complaint_types` ctype ON ctype.`complaint_typeid` = pm.`complaint_typeid` " |
||||
|
+ " LEFT JOIN `pentition_files` pf ON p.`petition_id` = pf.`petition_id` " |
||||
|
+ " WHERE " |
||||
|
+ " pm.`mapid` = '" + mapid + "' " |
||||
|
+ " AND p.`isactive` = 1 AND p.`isdelete` = 0 " |
||||
|
+ " AND pm.`isactive` = 1 AND pm.`isdelete` = 0 " |
||||
|
+ " AND om.`isactive` = 1 AND om.`isdelete` = 0 "; |
||||
|
|
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sqlQuery); |
||||
|
|
||||
|
// Iterate over the list of maps |
||||
|
for (Map<String, Object> map : result) { |
||||
|
// Get the value of the 'petitionNo' field from the map |
||||
|
String petitionNo = (String) map.get("petition_no"); |
||||
|
|
||||
|
// Encode the 'petitionNo' value using Base64Util |
||||
|
String petitionNoEncoded = Base64Util.encodeBase64(petitionNo); |
||||
|
|
||||
|
// Add the encoded value as 'petitionNoEncode' to the map |
||||
|
map.put("petitionNoEncode", petitionNoEncoded); |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} catch (DataAccessException e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; // Return null or handle error appropriately |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getComplaintActionDetails(String mapId) { |
||||
|
try { |
||||
|
String sqlQuery = "SELECT * FROM `petition_action_taken` WHERE (`mapid`= ? AND `isactive`=1 AND `isdelete`=0) LIMIT 1"; |
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sqlQuery, mapId); |
||||
|
return result; |
||||
|
} catch (DataAccessException e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; // Return null or handle error appropriately |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public String saveComplanitStatus( |
||||
|
String createdBy, |
||||
|
String mapId, |
||||
|
String complaintStatus, |
||||
|
String complaintActionText, |
||||
|
MultipartFile actionPage1, |
||||
|
String petitionId, |
||||
|
String petitionNo) { |
||||
|
|
||||
|
//System.out.println("I am from Service Page "+petitionerName); |
||||
|
|
||||
|
//String complaintNature = ""; |
||||
|
int lastInsertId = 0; |
||||
|
String sqlQuery = "INSERT INTO `petition_action_taken` " |
||||
|
+ "(`created_by`, `off_id`, `mapid`, `status`, " |
||||
|
+ "`comments`) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?)"; |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
KeyHolder keyHolder = new GeneratedKeyHolder(); |
||||
|
// Use JdbcTemplate's update method to execute the query with parameters |
||||
|
jdbcTemplate.update(connection -> { |
||||
|
PreparedStatement ps = connection.prepareStatement(sqlQuery, Statement.RETURN_GENERATED_KEYS); |
||||
|
ps.setString(1, createdBy); |
||||
|
ps.setString(2, createdBy); |
||||
|
ps.setString(3, mapId); |
||||
|
ps.setString(4, complaintStatus); |
||||
|
ps.setString(5, complaintActionText); |
||||
|
return ps; |
||||
|
}, keyHolder); |
||||
|
|
||||
|
// Get the last insert ID |
||||
|
lastInsertId = (int)keyHolder.getKey().longValue(); |
||||
|
String actionID = "error"; |
||||
|
if(lastInsertId>0) { |
||||
|
// Update Complaint Status |
||||
|
updateMapComplientStatus(mapId,"close"); |
||||
|
// Update Petition Status |
||||
|
updatePetitionStatus(petitionId,petitionNo); |
||||
|
// Add Action Scan File in the database |
||||
|
addActionFile(mapId,lastInsertId, actionPage1); |
||||
|
actionID = ""+lastInsertId; |
||||
|
} |
||||
|
|
||||
|
return actionID; // If no exception, query executed successfully |
||||
|
} catch (DataAccessException e) { |
||||
|
// Handle exception (e.g., log error) |
||||
|
e.printStackTrace(); |
||||
|
return "error"; // Query execution failed |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public String addActionFile( String mapId, int solmapid, |
||||
|
MultipartFile page1) { |
||||
|
|
||||
|
MultipartFile file = page1; |
||||
|
String fileName = "Scan1_"+solmapid; |
||||
|
|
||||
|
if (file != null && !file.isEmpty()) { |
||||
|
try { |
||||
|
// Get the bytes of the file |
||||
|
byte[] bytes = file.getBytes(); |
||||
|
|
||||
|
// Set the file path where you want to save it |
||||
|
String uploadDirectory = environment.getProperty("file.upload.directory"); |
||||
|
String serviceFolderName = environment.getProperty("cp_foldername"); |
||||
|
String serviceActionFolderName = environment.getProperty("cp_action_Foldername"); |
||||
|
|
||||
|
uploadDirectory = uploadDirectory + serviceFolderName +"/"+ serviceActionFolderName; |
||||
|
|
||||
|
// File name |
||||
|
fileName = mapId + "_" + fileName + "_" + file.getOriginalFilename(); |
||||
|
|
||||
|
//File Size |
||||
|
Long fileSize = file.getSize(); |
||||
|
|
||||
|
// File Type |
||||
|
String fileType = file.getContentType(); |
||||
|
|
||||
|
// Create directory if it doesn't exist |
||||
|
Path directoryPath = Paths.get(uploadDirectory); |
||||
|
if (!Files.exists(directoryPath)) { |
||||
|
Files.createDirectories(directoryPath); |
||||
|
} |
||||
|
|
||||
|
String filePath = uploadDirectory + "/" + fileName; |
||||
|
|
||||
|
// Create a new Path object |
||||
|
Path path = Paths.get(filePath); |
||||
|
|
||||
|
// Write the bytes to the file |
||||
|
Files.write(path, bytes); |
||||
|
|
||||
|
// Save the file path to a database |
||||
|
String sqlQuery = "UPDATE `petition_action_taken` SET " |
||||
|
+ "`file_name`='"+fileName+"', " |
||||
|
+ "`file_size`='"+fileSize+"', " |
||||
|
+ "`file_type`='"+fileType+"' " |
||||
|
+ "WHERE `solmapid`='"+solmapid+"' LIMIT 1"; |
||||
|
jdbcTemplate.update(sqlQuery); |
||||
|
|
||||
|
} catch (IOException e) { |
||||
|
e.printStackTrace(); |
||||
|
return "Failed to save file " + file.getOriginalFilename(); |
||||
|
} |
||||
|
} |
||||
|
return "success"; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,58 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.c_petition.service; |
||||
|
|
||||
|
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.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
@Service("CPetitionMaster") |
||||
|
public class PetitionMaster { |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysqlPetitionMasterDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getComplaintType(){ |
||||
|
String SqlQuery = ""; |
||||
|
|
||||
|
SqlQuery = "SELECT * FROM `complaint_types` WHERE `isactive`=1 AND `isdelete`=0"; |
||||
|
|
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(SqlQuery); |
||||
|
|
||||
|
return result; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getOfficerList(){ |
||||
|
String SqlQuery = ""; |
||||
|
|
||||
|
SqlQuery = "SELECT * FROM `officer_master` WHERE `isactive`=1 AND `isdelete`=0"; |
||||
|
|
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(SqlQuery); |
||||
|
|
||||
|
return result; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getPetitionTypes(){ |
||||
|
String SqlQuery = ""; |
||||
|
|
||||
|
SqlQuery = "SELECT * FROM `petition_types` WHERE `isactive`=1 AND `isdelete`=0 ORDER BY `orderby` ASC"; |
||||
|
|
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(SqlQuery); |
||||
|
|
||||
|
return result; |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.c_petition.service; |
||||
@ -0,0 +1,112 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.controller; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.AgentAssignService; |
||||
|
|
||||
|
|
||||
|
@RequestMapping("/gcc/api/callcenter/admin") |
||||
|
@RestController("callcentercontroller") |
||||
|
public class AgentAssignAPIController |
||||
|
{ |
||||
|
private AgentAssignService campaignmaster; |
||||
|
|
||||
|
@Autowired |
||||
|
public AgentAssignAPIController(AgentAssignService campaignmaster) { |
||||
|
this.campaignmaster = campaignmaster; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getcategory") |
||||
|
public List<Map<String, Object>> getcategory() |
||||
|
{ |
||||
|
return campaignmaster.getcategory(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getcampaignbycategory") |
||||
|
public List<Map<String, Object>> getcampaignbycategory(@RequestParam int id) |
||||
|
{ |
||||
|
return campaignmaster.getcampaignbycategory(id); |
||||
|
} |
||||
|
|
||||
|
// @GetMapping("/getcampaignbyid") |
||||
|
// public List<Map<String, Object>> getcampaignbyid(@RequestParam int id) |
||||
|
// { |
||||
|
// return campaignmaster.getcampaignbyid(id); |
||||
|
// } |
||||
|
|
||||
|
@GetMapping("/getagentsfortask") |
||||
|
public List<Map<String, Object>> getagentsfortask(@RequestParam int id) |
||||
|
{ |
||||
|
return campaignmaster.getagentsfortask(id); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/addagentsfortask") |
||||
|
public ResponseEntity<List<Map<String, Object>>> addagentsfortask(@RequestBody List<Map<String, Object>> requestList) { |
||||
|
//System.out.println("Received POST request with data: " + requestList); |
||||
|
|
||||
|
List<Map<String, Object>> insertedAgents = new ArrayList<>(); // To store successfully inserted agents |
||||
|
|
||||
|
try { |
||||
|
for (Map<String, Object> request : requestList) { |
||||
|
int agentId = (int) request.get("agentId"); |
||||
|
int categoryId = (int) request.get("categoryId"); |
||||
|
int campaignId = (int) request.get("campaignId"); |
||||
|
|
||||
|
// Call the service method to insert the agent details |
||||
|
int rowsAffected = campaignmaster.addagentsfortask(agentId, categoryId, campaignId); |
||||
|
|
||||
|
if (rowsAffected > 0) { |
||||
|
// If the insert was successful, add the agent data to the response list |
||||
|
Map<String, Object> insertedAgent = new HashMap<>(); |
||||
|
insertedAgent.put("categoryId", categoryId); |
||||
|
insertedAgent.put("campaignId", campaignId); |
||||
|
insertedAgent.put("agentId", agentId); |
||||
|
|
||||
|
insertedAgents.add(insertedAgent); // Add the successfully inserted agent to the list |
||||
|
} else { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body(Collections.singletonList(Collections.singletonMap("error", "Failed to add agent for campaignId: " + campaignId))); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Return the list of successfully inserted agents |
||||
|
return ResponseEntity.status(HttpStatus.CREATED).body(insertedAgents); |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST) |
||||
|
.body(Collections.singletonList(Collections.singletonMap("error", "Invalid request data: " + e.getMessage()))); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getassignedcampaign") |
||||
|
public List<Map<String, Object>> checkcampaigninassignedtable(@RequestParam int id) |
||||
|
{ |
||||
|
return campaignmaster.checkcampaigninassignedtable(id); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/deleteassignedbyid") |
||||
|
public int editagentsfortask(@RequestParam int id) |
||||
|
{ |
||||
|
return campaignmaster.editagentsfortask(id); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getcampaignbyid") |
||||
|
public List<Map<String, Object>> getcampaignquestionbyid(@RequestParam int id){ |
||||
|
return campaignmaster.getcampaignquestionbyid(id); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,320 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.controller; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import javax.servlet.http.HttpSession; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
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 com.fasterxml.jackson.core.JsonProcessingException; |
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.AgentsService; |
||||
|
|
||||
|
@RequestMapping("/gcc/api/agents") |
||||
|
@RestController |
||||
|
public class AgentsAPIController { |
||||
|
|
||||
|
@Autowired |
||||
|
private AgentsService agentsService; |
||||
|
|
||||
|
@GetMapping("/excel") |
||||
|
public List<Map<String, Object>> fetchDataFromExcel(@RequestParam int categoryId,@RequestParam Long campaignId) { |
||||
|
try { |
||||
|
return agentsService.fetchDataFromExcel(categoryId,campaignId); |
||||
|
} catch (IOException e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; // Handle the exception as needed |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@PostMapping("/saveExcelData") |
||||
|
public String saveExcelData( @RequestParam int categoryId,@RequestParam Long campaignId,@RequestParam String filePath) { |
||||
|
|
||||
|
try { |
||||
|
// Fetch data from Excel |
||||
|
List<Map<String, Object>> excelData = agentsService.getExcelData(categoryId,campaignId, filePath); |
||||
|
// Save data into the database |
||||
|
agentsService.saveExcelData(excelData); |
||||
|
return "Data saved successfully"; |
||||
|
} catch (IOException e) { |
||||
|
e.printStackTrace(); |
||||
|
return "Failed to save data"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getdataByIds") |
||||
|
public List<Map<String, Object>> getdataByIds(@RequestParam List<Integer> ids) { |
||||
|
return agentsService.getdataByIds(ids); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getPendingDataByIds") |
||||
|
public List<Map<String, Object>> getPendingDataByIds(@RequestParam List<Integer> ids) { |
||||
|
return agentsService.getPendingDataByIds(ids); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
// @PostMapping("/updatecall") |
||||
|
// public ResponseEntity<String> updatecall(@RequestBody Map<String, Object> callData) |
||||
|
// { |
||||
|
// String call_status = (String) callData.get("call_status"); |
||||
|
// int data_id = (int) callData.get("data_id"); |
||||
|
// int agent_id=(int) callData.get("agent_id"); |
||||
|
// int campaign_id=(int) callData.get("campaign_id"); |
||||
|
// |
||||
|
// if (call_status == null || call_status.isEmpty()) { |
||||
|
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Call status is required."); |
||||
|
// } |
||||
|
// |
||||
|
// agentsService.saveInLogsTable(campaign_id, agent_id, data_id,call_status); |
||||
|
// |
||||
|
// return ResponseEntity.ok("Data Inserted successfully."); |
||||
|
// } |
||||
|
|
||||
|
@GetMapping("/getAgentNames") |
||||
|
public List<Map<String, Object>> getAgentsNameById(@RequestParam List<Integer> agentIds){ |
||||
|
return agentsService.getAgentsNameById(agentIds); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getDataFields") |
||||
|
public List<Map<String, Object>> getDataDetailsById( |
||||
|
@RequestParam String originalDataIds) throws JsonProcessingException { |
||||
|
|
||||
|
// Parse originalDataIds from JSON string |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
List<List<Integer>> originalDataIdsList = objectMapper.readValue(originalDataIds, new TypeReference<List<List<Integer>>>() {}); |
||||
|
|
||||
|
// Prepare a list to hold the results for each sub-array |
||||
|
List<Map<String, Object>> groupedResults = new ArrayList<>(); |
||||
|
|
||||
|
// Iterate through each sub-array of originalDataIds |
||||
|
for (List<Integer> dataIds : originalDataIdsList) { |
||||
|
List<Map<String, Object>> results = agentsService.getDataDetailsById(dataIds); |
||||
|
// Group results according to your business logic |
||||
|
Map<String, Object> combinedResult = new HashMap<>(); |
||||
|
for (Map<String, Object> result : results) { |
||||
|
combinedResult.putAll(result); |
||||
|
} |
||||
|
groupedResults.add(combinedResult); |
||||
|
} |
||||
|
|
||||
|
return groupedResults; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getCompletedDataFields") |
||||
|
public Map<String, Object> getCompletedDataDetailsById( |
||||
|
@RequestParam String originalCDataIds) throws JsonProcessingException { |
||||
|
|
||||
|
// Parse originalDataIds from JSON string |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
List<Integer> originalCDataIdsList = objectMapper.readValue(originalCDataIds, new TypeReference<List<Integer>>() {}); |
||||
|
|
||||
|
// Prepare a list to hold the results for each sub-array |
||||
|
//List<Map<String, Object>> groupedCompletedResults = new ArrayList<>(); |
||||
|
List<Integer> completedDataIds = new ArrayList<>(); // List to hold data_ids with Complete_count > 0 |
||||
|
|
||||
|
// Iterate through each sub-array of originalDataIds |
||||
|
|
||||
|
List<Map<String, Object>> results = agentsService.getCompletedDataDetailsById(originalCDataIdsList); |
||||
|
// Group results according to your business logic |
||||
|
//Map<String, Object> CompletedcombinedResult = new HashMap<>(); |
||||
|
for (Map<String, Object> result : results) { |
||||
|
|
||||
|
if (result.get("Complete_count") != null && ((Number) result.get("Complete_count")).intValue() > 0) { |
||||
|
completedDataIds.add((Integer) result.get("data_id")); |
||||
|
} |
||||
|
//groupedCompletedResults.add(result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
// Prepare the final response containing grouped results and completed dataIds |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
//response.put("groupedCompletedResults", groupedCompletedResults); |
||||
|
response.put("completedDataIds", completedDataIds); |
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getCompletedDataById") |
||||
|
public List<Map<String, Object>> getCompletedDataById(@RequestParam List<Integer> completedDataIds){ |
||||
|
return agentsService.getCompletedDataById(completedDataIds); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@PostMapping("/furtherAssignedAgents") |
||||
|
public ResponseEntity<Map<String, String>> updateAgentAssigndata( |
||||
|
@RequestBody Map<String, Object> requestData) { |
||||
|
|
||||
|
String campaign_id = (String) requestData.get("campaign_id"); |
||||
|
String category_id = (String) requestData.get("category_id"); |
||||
|
String call_per_agent = (String) requestData.get("call_per_agent"); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
// Correct key name for selected agents |
||||
|
List<String> selectedAgentsList = (List<String>) requestData.get("selected_agents"); |
||||
|
|
||||
|
//System.out.println("campaign_id=" + campaign_id); |
||||
|
//System.out.println("category_id=" + category_id); |
||||
|
//System.out.println("call_per_agent=" + call_per_agent); |
||||
|
//System.out.println("selectedAgentsList=" + selectedAgentsList); |
||||
|
|
||||
|
int campaignId = Integer.parseInt(campaign_id); |
||||
|
int categoryId = Integer.parseInt(category_id); |
||||
|
int callperagent = Integer.parseInt(call_per_agent); |
||||
|
|
||||
|
agentsService.resetAgentAssignmentForNextDay(categoryId,campaignId); |
||||
|
|
||||
|
int calls_assign = callperagent * selectedAgentsList.size(); |
||||
|
//System.out.println("calls_assign== " + calls_assign); |
||||
|
|
||||
|
List<Integer> DataIds=agentsService.getDataIdForFurtherAssign(categoryId, campaignId); |
||||
|
//System.out.println("dataids=== " + DataIds); |
||||
|
|
||||
|
if (!DataIds.isEmpty()) { |
||||
|
int dataIndex = 0; // Initialize data index pointer |
||||
|
|
||||
|
for (String agentId : selectedAgentsList) { |
||||
|
int selectedAgentId = Integer.parseInt(agentId); |
||||
|
|
||||
|
agentsService.addAgentsForCampaign(selectedAgentId, categoryId, campaignId); |
||||
|
|
||||
|
// Iterate for noOfCalls times and assign data IDs to the current agent |
||||
|
for (int i = 0; i < callperagent && dataIndex < DataIds.size(); i++, dataIndex++) { |
||||
|
int DataId = DataIds.get(dataIndex); |
||||
|
|
||||
|
agentsService.updateAgentForCampaign( |
||||
|
selectedAgentId, |
||||
|
categoryId, |
||||
|
campaignId, |
||||
|
DataId |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
else { |
||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
||||
|
.body(Map.of("status", "error", "message", "No data available for Further assign.")); |
||||
|
} |
||||
|
|
||||
|
return ResponseEntity.ok(Map.of("status", "success", "message", "Campaign details saved successfully")); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
////////////////////Ajith code////////////////////// |
||||
|
|
||||
|
@GetMapping("/Campaignview") |
||||
|
public ResponseEntity<?> getCampaignview(@RequestParam int categoryId, @RequestParam int agentId, @RequestParam int dataId) { |
||||
|
try { |
||||
|
List<Map<String, Object>> response = agentsService.getFilteredFields(categoryId, agentId, dataId); |
||||
|
|
||||
|
if (response.isEmpty()) { |
||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No matching data found."); |
||||
|
} |
||||
|
|
||||
|
return ResponseEntity.ok(response); |
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/questions") |
||||
|
public List<Map<String, Object>> getCampaignQuestions( |
||||
|
@RequestParam int categoryId, |
||||
|
@RequestParam int campaignId) { |
||||
|
|
||||
|
return agentsService.getCampaignQuestions(categoryId, campaignId); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/fetchAnswer") |
||||
|
public List<Map<String, Object>> fetchAnswer( |
||||
|
@RequestParam int campaignId, |
||||
|
@RequestParam int agentId, |
||||
|
@RequestParam int questionId, |
||||
|
@RequestParam int dataId) { |
||||
|
|
||||
|
return agentsService.FetchAnswer(campaignId,agentId,questionId,dataId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@PostMapping("/submitAnswers") |
||||
|
public ResponseEntity<String> submitAnswers(@RequestBody Map<String, List<Map<String, Object>>> requestData) { |
||||
|
List<Map<String, Object>> answers = requestData.get("answers"); |
||||
|
|
||||
|
if (answers == null || answers.isEmpty()) { |
||||
|
return ResponseEntity.badRequest().body("No answers provided."); |
||||
|
} |
||||
|
|
||||
|
agentsService.saveAnswers(answers); |
||||
|
return ResponseEntity.ok("Answers submitted successfully"); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/callstatus") |
||||
|
public List<Map<String, Object>> getCallStatus() { |
||||
|
//System.out.println("dropdown"); |
||||
|
return agentsService.getCallStatus(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/checkCounts") |
||||
|
public List<Map<String, Object>> checkCounts( |
||||
|
@RequestParam int campaignId, |
||||
|
@RequestParam int dataId) { |
||||
|
|
||||
|
return agentsService.checkCounts(campaignId,dataId); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/savecall") |
||||
|
public ResponseEntity<String> savecall(@RequestBody Map<String, Object> callData) { |
||||
|
String call_status = (String) callData.get("call_status"); |
||||
|
String remarks = (String) callData.get("remarks"); |
||||
|
int data_id = Integer.parseInt(callData.get("data_id").toString()); |
||||
|
int agent_id = Integer.parseInt(callData.get("agent_id").toString()); |
||||
|
int campaign_id = Integer.parseInt(callData.get("campaign_id").toString()); |
||||
|
|
||||
|
// System.out.println("controler"); |
||||
|
//System.out.println(call_status); |
||||
|
|
||||
|
// Add a debug statement to check the received values |
||||
|
// System.out.println("Received call_status: " + call_status); |
||||
|
|
||||
|
if (call_status == null || call_status.isEmpty()) { |
||||
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Call status is required."); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
agentsService.saveCallLogs(call_status, remarks,data_id,agent_id); |
||||
|
|
||||
|
agentsService.saveInLogsTable(campaign_id, agent_id, data_id,call_status,remarks); |
||||
|
|
||||
|
return ResponseEntity.ok("Data Inserted successfully."); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.controller; |
||||
|
|
||||
|
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 org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
|
||||
|
@RequestMapping("/gcc/api/attendance") |
||||
|
@RestController |
||||
|
public class AttendanceAPIController { |
||||
|
|
||||
|
private AppConfig appConfig; |
||||
|
private final RestTemplate restTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public AttendanceAPIController(RestTemplate restTemplate, AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/getAttendancedetails") |
||||
|
public String getAttendancedetails(@RequestParam String fromDate,@RequestParam String toDate){ |
||||
|
String apiUrl = appConfig.attendanceReport + "/callcenter/api/attendance/getattendancereport"+"?fromDate="+ fromDate + "&toDate="+ toDate; |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
return responseEntity.getBody(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,643 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.controller; |
||||
|
|
||||
|
import org.apache.poi.ss.usermodel.*; |
||||
|
|
||||
|
|
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import java.io.*; |
||||
|
import java.nio.file.Files; |
||||
|
import java.nio.file.Path; |
||||
|
import java.nio.file.Paths; |
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.time.LocalDateTime; |
||||
|
import java.time.format.DateTimeFormatter; |
||||
|
import java.util.*; |
||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
||||
|
|
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.core.env.Environment; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
|
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
|
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
|
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RequestPart; |
||||
|
import org.springframework.web.bind.annotation.ResponseBody; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.AddcategoryServices; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.AgentAssignService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.CampaignService; |
||||
|
|
||||
|
@RestController("callcenterapicontroller") |
||||
|
@RequestMapping("gcc/api/campaign") |
||||
|
public class CampaignAPIController { |
||||
|
|
||||
|
@Autowired |
||||
|
private CampaignService campaignService; |
||||
|
|
||||
|
@Autowired |
||||
|
private AddcategoryServices addCategoryServices; // Injecting the service |
||||
|
|
||||
|
@Autowired |
||||
|
private AgentAssignService agentsAssignService; |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
private Environment environment; |
||||
|
|
||||
|
@GetMapping("/getCampaignDetails") |
||||
|
public ResponseEntity<Map<String, Object>> getCampaignDetails() { |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
List<Map<String, Object>> data = campaignService.getCampaignDetails(); |
||||
|
|
||||
|
response.put("data", data); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// Endpoint to get campaign details by ID |
||||
|
@GetMapping("/getCampaignDetailsById") |
||||
|
public @ResponseBody List<Map<String, Object>> getCampaignDetailsById(@RequestParam("campaign_id") Long campaignId) { |
||||
|
return campaignService.getCampaignDetailsById(campaignId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@PostMapping("/updateCampaign") |
||||
|
public ResponseEntity<String> updateCampaign( |
||||
|
@RequestBody Map<String, Object> requestData) { |
||||
|
|
||||
|
Long campaign_id = ((Number) requestData.get("campaign_id")).longValue(); |
||||
|
String end_date = (String) requestData.get("end_date"); |
||||
|
List<Map<String, Object>> questionsData = |
||||
|
(List<Map<String, Object>>) requestData.get("questionsData"); |
||||
|
|
||||
|
if (campaign_id == null) { |
||||
|
return ResponseEntity.badRequest().body("Campaign ID is required."); |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
// Update campaign details |
||||
|
campaignService.updateCampaign(campaign_id, end_date); |
||||
|
|
||||
|
// Save questions and answers |
||||
|
for (Map<String, Object> questionMap : questionsData) { |
||||
|
String category = (String) questionMap.get("category"); |
||||
|
String question = (String) questionMap.get("question"); |
||||
|
String answerType = (String) questionMap.get("answerType"); |
||||
|
List<String> answers = (List<String>) questionMap.get("answers"); |
||||
|
|
||||
|
if (category != null && question != null && answerType != null) { |
||||
|
campaignService.saveQuestionsAndAnswers( |
||||
|
category, |
||||
|
String.valueOf(campaign_id), // Corrected data type |
||||
|
question, |
||||
|
answerType, |
||||
|
answers |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return ResponseEntity.ok("Campaign updated successfully."); |
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body("Error updating campaign: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
//save question and ansewers for campaign |
||||
|
@PostMapping("/saveQuestionsAndAnswers") |
||||
|
public ResponseEntity<String> saveQuestions(@RequestBody List<Map<String, Object>> requestData) { |
||||
|
String response = campaignService.saveQuestionsAnswers(requestData); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
//save file and get path |
||||
|
private String saveFile(MultipartFile file) throws IOException { |
||||
|
|
||||
|
String uploadDirectory = environment.getProperty("file.upload.directory"); |
||||
|
|
||||
|
String folderName = environment.getProperty("campaign.foldername"); |
||||
|
|
||||
|
String fileName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")) + "_" + file.getOriginalFilename(); |
||||
|
|
||||
|
String folderPath = uploadDirectory + "/" + folderName + "/excel/"; |
||||
|
|
||||
|
|
||||
|
Path dirPath = Paths.get(folderPath); |
||||
|
if (!Files.exists(dirPath)) { |
||||
|
Files.createDirectories(dirPath); |
||||
|
} |
||||
|
|
||||
|
Path filePath = dirPath.resolve(fileName); |
||||
|
|
||||
|
Files.write(filePath, file.getBytes()); |
||||
|
|
||||
|
return filePath.toAbsolutePath().toString(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//read uploaded excel data and make condition for each category uploading same excel columns are other some other? |
||||
|
private List<Map<String, Object>> readExcelData(InputStream inputStream, List<String> categoryColumns) throws IOException { |
||||
|
List<Map<String, Object>> dataList = new ArrayList<>(); |
||||
|
|
||||
|
try (Workbook workbook = new XSSFWorkbook(inputStream)) { |
||||
|
Sheet sheet = workbook.getSheetAt(0); |
||||
|
FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator(); |
||||
|
|
||||
|
// Read header row from Excel |
||||
|
Row headerRow = sheet.getRow(0); |
||||
|
List<String> excelHeaders = new ArrayList<>(); |
||||
|
for (Cell cell : headerRow) { |
||||
|
excelHeaders.add(cell.getStringCellValue().trim()); |
||||
|
} |
||||
|
|
||||
|
// Compare Excel headers with category columns |
||||
|
if (!excelHeaders.containsAll(categoryColumns)) { |
||||
|
// throw new IllegalArgumentException("Excel data does not match the category columns."); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
// Proceed with reading data only if headers match |
||||
|
for (Row row : sheet) { |
||||
|
if (row.getRowNum() == 0) continue; // Skip header row |
||||
|
|
||||
|
Map<String, Object> dataMap = new HashMap<>(); |
||||
|
for (Cell cell : row) { |
||||
|
String cellValue = ""; |
||||
|
switch (formulaEvaluator.evaluateInCell(cell).getCellType()) { |
||||
|
case STRING: |
||||
|
cellValue = cell.getStringCellValue(); |
||||
|
break; |
||||
|
case NUMERIC: |
||||
|
if (DateUtil.isCellDateFormatted(cell)) { |
||||
|
cellValue = new SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue()); |
||||
|
} else { |
||||
|
// Check if value is an integer (whole number) |
||||
|
if (cell.getNumericCellValue() % 1 == 0) { |
||||
|
cellValue = String.valueOf((long) cell.getNumericCellValue()); // Format as integer |
||||
|
} else { |
||||
|
cellValue = String.valueOf(cell.getNumericCellValue()); // Keep decimal values as they are |
||||
|
} |
||||
|
} |
||||
|
break; |
||||
|
case BOOLEAN: |
||||
|
cellValue = String.valueOf(cell.getBooleanCellValue()); |
||||
|
break; |
||||
|
default: |
||||
|
cellValue = "Unknown"; |
||||
|
break; |
||||
|
} |
||||
|
// Map cell data to correct column name |
||||
|
dataMap.put(excelHeaders.get(cell.getColumnIndex()), cellValue); |
||||
|
} |
||||
|
|
||||
|
if (!dataMap.isEmpty()) { |
||||
|
dataList.add(dataMap); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return dataList; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/getExcelData") |
||||
|
public ResponseEntity<List<Map<String, Object>>> getExcelData(@RequestParam("filePath") String filePath) { |
||||
|
try { |
||||
|
// Read data from the uploaded Excel file |
||||
|
List<Map<String, Object>> excelData = readExcelData(new FileInputStream(filePath), null); |
||||
|
|
||||
|
// Return data as JSON |
||||
|
return ResponseEntity.ok(excelData); |
||||
|
|
||||
|
} catch (IOException e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getlastCampaignid") |
||||
|
public List<Map<String, Object>> getLastRow() |
||||
|
{ |
||||
|
return campaignService.getLastRow(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/startcampaign") |
||||
|
public List<Map<String, Object>> getDataforAgents(@RequestParam int campaign_id,@RequestParam int calls_per_agent) |
||||
|
{ |
||||
|
return campaignService.getDataforAgents(campaign_id, calls_per_agent); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/viewcampaignstatus") |
||||
|
public List<Map<String, Object>> viewcampaignstatus(@RequestParam int campaign_id) |
||||
|
{ |
||||
|
return campaignService.viewcampaignstatus(campaign_id); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/viewcompletedby") |
||||
|
public List<Map<String, Object>> viewcompletedby(@RequestParam int campaign_id,@RequestParam int agent_id) |
||||
|
{ |
||||
|
return campaignService.viewcompletedby(campaign_id,agent_id); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
@PostMapping(value = "/savecampaign", consumes = {"multipart/form-data"}) |
||||
|
public ResponseEntity<Map<String, String>> saveCampaign( |
||||
|
@RequestParam String campaignId, |
||||
|
@RequestParam String categoryId, |
||||
|
@RequestParam String eventStartDate, |
||||
|
@RequestParam String eventEndDate, |
||||
|
@RequestParam int noOfCalls, |
||||
|
@RequestParam String description, |
||||
|
@RequestParam(required = false) String questionsData, // JSON as String |
||||
|
@RequestParam(required = false) String selectedAgents // JSON string |
||||
|
) { |
||||
|
|
||||
|
|
||||
|
// Convert JSON strings to List objects |
||||
|
List<Map<String, Object>> questionsDataList = new ArrayList<>(); |
||||
|
List<String> selectedAgentsList = new ArrayList<>(); |
||||
|
|
||||
|
try { |
||||
|
if (questionsData != null) { |
||||
|
questionsDataList = new ObjectMapper().readValue(questionsData, new TypeReference<List<Map<String, Object>>>() {}); |
||||
|
} |
||||
|
|
||||
|
if (selectedAgents != null) { |
||||
|
selectedAgentsList = new ObjectMapper().readValue(selectedAgents, new TypeReference<List<String>>() {}); |
||||
|
} |
||||
|
} catch (JsonProcessingException e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST) |
||||
|
.body(Map.of("status", "error", "message", "Invalid JSON format in request data")); |
||||
|
} |
||||
|
|
||||
|
// Campaign Details Mapping |
||||
|
Map<String, Object> campaignDetails = new HashMap<>(); |
||||
|
campaignDetails.put("campaign_id", campaignId); |
||||
|
campaignDetails.put("category_id", categoryId); |
||||
|
campaignDetails.put("start_date", eventStartDate); |
||||
|
campaignDetails.put("end_date", eventEndDate); |
||||
|
campaignDetails.put("calls_per_agent", noOfCalls); |
||||
|
campaignDetails.put("description", description); |
||||
|
|
||||
|
try { |
||||
|
campaignService.saveCampaignDetails(campaignDetails); |
||||
|
|
||||
|
// Step 3: Assign Agents for the Campaign |
||||
|
if (!selectedAgentsList.isEmpty()) { |
||||
|
int parsedCampaignId = Integer.parseInt(campaignId); |
||||
|
int parsedCategoryId = Integer.parseInt(categoryId); |
||||
|
|
||||
|
System.out.println("selectedAgentsList====== " + selectedAgentsList); |
||||
|
|
||||
|
int calls_assign = noOfCalls * selectedAgentsList.size(); |
||||
|
System.out.println("calls_assign== " + calls_assign); |
||||
|
|
||||
|
List<Integer> DataIds=agentsAssignService.getDataIdForInitialAssign(parsedCategoryId, parsedCampaignId); |
||||
|
|
||||
|
for (String agentId : selectedAgentsList) { |
||||
|
int selectedAgentId = Integer.parseInt(agentId); |
||||
|
|
||||
|
agentsAssignService.addAgentsForCampaign(selectedAgentId, parsedCategoryId, parsedCampaignId); |
||||
|
} |
||||
|
//System.out.println("dataids=== " + DataIds); |
||||
|
if (!DataIds.isEmpty()) { |
||||
|
int dataIndex = 0; // Initialize data index pointer |
||||
|
|
||||
|
for (String agentId : selectedAgentsList) { |
||||
|
int selectedAgentId = Integer.parseInt(agentId); |
||||
|
|
||||
|
// Iterate for noOfCalls times and assign data IDs to the current agent |
||||
|
for (int i = 0; i < noOfCalls && dataIndex < DataIds.size(); i++, dataIndex++) { |
||||
|
int DataId = DataIds.get(dataIndex); |
||||
|
|
||||
|
agentsAssignService.updateAgentForCampaign( |
||||
|
selectedAgentId, |
||||
|
parsedCategoryId, |
||||
|
parsedCampaignId, |
||||
|
DataId |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Update campaign status to 'ONGOING' after successful assignment |
||||
|
campaignService.updateCampaignStatus(parsedCampaignId, parsedCategoryId); |
||||
|
} |
||||
|
|
||||
|
else { |
||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
||||
|
.body(Map.of("status", "error", "message", "No data available for initial assignment.")); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
// Step 4: Save Questions and Answers |
||||
|
if (!questionsDataList.isEmpty()) { |
||||
|
for (Map<String, Object> questionMap : questionsDataList) { |
||||
|
String question = (String) questionMap.get("question"); |
||||
|
String answerType = (String) questionMap.get("answerType"); |
||||
|
List<String> answers = (List<String>) questionMap.get("answers"); |
||||
|
|
||||
|
if (question != null && answerType != null) { |
||||
|
campaignService.saveQuestionsAndAnswers( |
||||
|
categoryId, |
||||
|
campaignId, |
||||
|
question, |
||||
|
answerType, |
||||
|
answers |
||||
|
); |
||||
|
} else { |
||||
|
System.out.println("Skipping invalid question data: " + questionMap); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body(Map.of("status", "error", "message", "Failed to save campaign details: " + e.getMessage())); |
||||
|
} |
||||
|
|
||||
|
return ResponseEntity.ok(Map.of("status", "success", "message", "Campaign details saved successfully")); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//save excel data separate method |
||||
|
|
||||
|
@PostMapping(value = "/saveexcelcampaign" ,consumes = {"multipart/form-data"}) |
||||
|
public Map<String, String> saveExcelCampaign( |
||||
|
@RequestParam String name, |
||||
|
@RequestParam String category, |
||||
|
@RequestPart MultipartFile file) { |
||||
|
|
||||
|
//System.out.println("Received campaign data:"); |
||||
|
//System.out.println("Name: " + name); |
||||
|
//System.out.println("Category: " + category); |
||||
|
|
||||
|
//System.out.println("File Name: " + file.getOriginalFilename()); |
||||
|
|
||||
|
Map<String, Object> campaignDetails = new HashMap<>(); |
||||
|
campaignDetails.put("campaign_name", name); |
||||
|
campaignDetails.put("category_id", category); |
||||
|
|
||||
|
|
||||
|
try { |
||||
|
// Get category-specific columns |
||||
|
List<Map<String, Object>> categoryColumns = addCategoryServices.getCategoryColumns(Integer.parseInt(category)); |
||||
|
/* |
||||
|
//System.out.println("categorycolmns: " + categoryColumns); |
||||
|
List<String> expectedHeaders = categoryColumns.stream() |
||||
|
.map(column -> column.get("column_name").toString()) |
||||
|
.collect(Collectors.toList()); |
||||
|
*/ |
||||
|
List<String> expectedHeaders = new ArrayList<String>(); |
||||
|
|
||||
|
for (Map<String, Object> column : categoryColumns) { |
||||
|
Object columnNameObj = column.get("column_name"); |
||||
|
if (columnNameObj != null) { |
||||
|
expectedHeaders.add(columnNameObj.toString()); |
||||
|
} |
||||
|
} |
||||
|
// Fetch field_ columns from upload_data table |
||||
|
List<String> fieldColumns = campaignService.getUploadDataFieldColumns(); |
||||
|
//System.out.println("fieldColumns: " + fieldColumns); |
||||
|
|
||||
|
|
||||
|
// Read uploaded Excel data and extract headers |
||||
|
List<Map<String, Object>> excelData = readExcelData(file.getInputStream(), expectedHeaders); |
||||
|
|
||||
|
// System.out.println("excedata: " + excelData ); |
||||
|
List<String> uploadedHeaders = new ArrayList<>(excelData.get(0).keySet()); // Extract headers from first row |
||||
|
|
||||
|
//System.out.println("uploadeddata : " + uploadedHeaders); |
||||
|
|
||||
|
// Check column count mismatch with field_ columns |
||||
|
if (uploadedHeaders.size() > fieldColumns.size()) { |
||||
|
Map<String, String> response = new HashMap<>(); |
||||
|
response.put("status", "column_mismatch"); // Changed status to differentiate |
||||
|
response.put("message", "Extend the columns in Database, Inform Admin."); |
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
// Validate headers |
||||
|
if (!new HashSet<>(expectedHeaders).equals(new HashSet<>(uploadedHeaders))) { |
||||
|
Map<String, String> response = new HashMap<>(); |
||||
|
response.put("status", "header_mismatch"); // Changed status to differentiate |
||||
|
response.put("message", "Excel data does not match the category columns."); |
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
String fileUrl = saveFile(file); |
||||
|
campaignDetails.put("excel_url", fileUrl); |
||||
|
|
||||
|
//System.out.println("Campaign Details: " + campaignDetails); |
||||
|
//System.out.println("Excel Data: " + excelData); |
||||
|
|
||||
|
campaignService.saveCampaignDetailsExcel(campaignDetails); |
||||
|
int lastId = campaignService.getLastInsertedCampaignId(); |
||||
|
|
||||
|
String excelUrl = campaignService.getExcelUrlByCampaignId(lastId); |
||||
|
//List<Map<String, Object>> excelDatas = readExcelDataupdated(new FileInputStream(excelUrl)); |
||||
|
List<Map<String, Object>> excelDatas = readExcelData(new FileInputStream(excelUrl), uploadedHeaders); |
||||
|
//System.out.println("excelDatas:" + excelDatas); |
||||
|
|
||||
|
for (Map<String, Object> row : excelDatas) { |
||||
|
campaignService.saveUploadData(category, lastId, row,expectedHeaders); |
||||
|
//System.out.println("exceldatas:" + excelDatas); |
||||
|
} |
||||
|
|
||||
|
Map<String, String> response = new HashMap<>(); |
||||
|
response.put("status", "success"); |
||||
|
response.put("message", "Campaign and Excel saved successfully"); |
||||
|
return response; |
||||
|
|
||||
|
} |
||||
|
catch (IOException e) { |
||||
|
e.printStackTrace(); |
||||
|
Map<String, String> response = new HashMap<>(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Failed to save campaign details: "+ e.getMessage()); |
||||
|
return response; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/availableAgents") |
||||
|
public ResponseEntity<List<Map<String, Object>>> getAvailableAgents() { |
||||
|
// Query 1: Fetch OUTBOUND agents |
||||
|
String outboundAgentsQuery = "SELECT agent_name, agent_id, calling_type " + |
||||
|
"FROM gcc_1913_qaqc.agents_list " + |
||||
|
"WHERE calling_type='OUTBOUND'"; |
||||
|
|
||||
|
List<Map<String, Object>> outboundAgents = jdbcTemplate.queryForList(outboundAgentsQuery); |
||||
|
|
||||
|
//System.out.println("outboundagents" + outboundAgents); |
||||
|
// Query 2: Fetch agents from ongoing campaigns |
||||
|
String ongoingCampaignAgentsQuery = "SELECT ca.agent_id " + |
||||
|
"FROM gcc_1913_campaign.campaign_request cr " + |
||||
|
"JOIN gcc_1913_campaign.agent_assign ca " + |
||||
|
"ON ca.campaign_id = cr.campaign_id " + |
||||
|
"WHERE cr.campaign_status = 'ONGOING'"; |
||||
|
|
||||
|
List<Map<String, Object>> ongoingAgents = jdbcTemplate.queryForList(ongoingCampaignAgentsQuery); |
||||
|
|
||||
|
//System.out.println("ongoingAgents" + ongoingAgents); |
||||
|
// Extract agent IDs from both lists |
||||
|
/* |
||||
|
Set<Integer> ongoingAgentIds = ongoingAgents.stream() |
||||
|
.map(agent -> (Integer) agent.get("agent_id")) |
||||
|
.collect(Collectors.toSet()); |
||||
|
|
||||
|
// Filter OUTBOUND agents who are NOT in ongoing agents |
||||
|
List<Map<String, Object>> availableAgents = outboundAgents.stream() |
||||
|
.filter(agent -> !ongoingAgentIds.contains(agent.get("agent_id"))) |
||||
|
.collect(Collectors.toList()); |
||||
|
|
||||
|
*/ |
||||
|
Set<Integer> ongoingAgentIds = new HashSet<>(); |
||||
|
|
||||
|
for (Map<String, Object> agent : ongoingAgents) { |
||||
|
Object idObj = agent.get("agent_id"); |
||||
|
if (idObj != null) { |
||||
|
ongoingAgentIds.add(Integer.parseInt(idObj.toString())); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Filter OUTBOUND agents who are NOT in ongoing agents |
||||
|
List<Map<String, Object>> availableAgents = new ArrayList<>(); |
||||
|
|
||||
|
for (Map<String, Object> agent : outboundAgents) { |
||||
|
Object idObj = agent.get("agent_id"); |
||||
|
if (idObj != null) { |
||||
|
Integer agentId = Integer.parseInt(idObj.toString()); |
||||
|
if (!ongoingAgentIds.contains(agentId)) { |
||||
|
availableAgents.add(agent); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return ResponseEntity.ok(availableAgents); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
private Object getCellValue(Cell cell) { |
||||
|
switch (cell.getCellType()) { |
||||
|
case STRING: |
||||
|
return cell.getStringCellValue().trim(); |
||||
|
case NUMERIC: |
||||
|
if (DateUtil.isCellDateFormatted(cell)) { |
||||
|
return cell.getDateCellValue(); // Return Date for date-formatted cells |
||||
|
} |
||||
|
double numericValue = cell.getNumericCellValue(); |
||||
|
|
||||
|
// ✅ Convert numeric values that are likely mobile numbers to string |
||||
|
if (String.valueOf((long) numericValue).length() >= 10) { // Assuming mobile numbers are at least 10 digits |
||||
|
return String.valueOf((long) numericValue); |
||||
|
} |
||||
|
|
||||
|
// ✅ Convert to int if no decimal part, else keep as double |
||||
|
return (numericValue % 1 == 0) ? (int) numericValue : numericValue; |
||||
|
case BOOLEAN: |
||||
|
return cell.getBooleanCellValue(); |
||||
|
case FORMULA: |
||||
|
return cell.getCellFormula(); // Return formula as string |
||||
|
case BLANK: |
||||
|
return ""; |
||||
|
default: |
||||
|
return ""; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
//question and answers report page api |
||||
|
@GetMapping("/question-answers") |
||||
|
public ResponseEntity<?> getQuestionAnswers(@RequestParam int campaignId) { |
||||
|
List<Map<String, Object>> response = campaignService.getQuestionAnswers(campaignId); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//dizo campaignlist apicontroller |
||||
|
// Query Parameter Approach |
||||
|
@GetMapping("/statistics") |
||||
|
public ResponseEntity<Map<String, Object>> getCampaignStatisticsByQuery(@RequestParam int campaignId) { |
||||
|
Map<String, Object> statistics = campaignService.getCampaignStatistics(campaignId); |
||||
|
return ResponseEntity.ok(statistics); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/assignagentid") |
||||
|
public ResponseEntity<List<Map<String, Object>>> getAllAgents() { |
||||
|
List<Map<String, Object>> assignAgentId = campaignService.getAllAgents(); |
||||
|
return ResponseEntity.ok(assignAgentId); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/close") |
||||
|
public ResponseEntity<String> closeCampaign(@RequestParam("campaignId") int campaignId) { |
||||
|
if (campaignId <= 0) { |
||||
|
return ResponseEntity.badRequest().body("Invalid Campaign ID"); |
||||
|
} |
||||
|
|
||||
|
System.out.println("Received request to close campaign ID: " + campaignId); // Debugging log |
||||
|
|
||||
|
int rowsUpdated = campaignService.closeCampaign(campaignId); |
||||
|
if (rowsUpdated > 0) { |
||||
|
return ResponseEntity.ok("Campaign closed successfully"); |
||||
|
} else { |
||||
|
return ResponseEntity.status(400).body("Failed to close campaign. Campaign ID " + campaignId + " may not exist."); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/auto-close") |
||||
|
public ResponseEntity<String> autoCloseExpiredCampaigns() { |
||||
|
|
||||
|
int rowsUpdated = campaignService.autoCloseExpiredCampaigns(); |
||||
|
|
||||
|
if (rowsUpdated > 0) { |
||||
|
return ResponseEntity.ok(rowsUpdated + " expired campaigns closed successfully."); |
||||
|
} else { |
||||
|
return ResponseEntity.ok("No expired campaigns found."); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,29 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.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.ResponseBody; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.CampaignDropdownApiService; |
||||
|
|
||||
|
@RequestMapping("gcc/api") |
||||
|
@RestController |
||||
|
public class CampaignDropdownApiController { |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
private CampaignDropdownApiService dropdownApiService; |
||||
|
|
||||
|
@GetMapping("/getAnswerTypes") |
||||
|
@ResponseBody |
||||
|
public List<Map<String, Object>> getAnswerTypes() { |
||||
|
return dropdownApiService.getAnswerTypes(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,100 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.controller; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
import java.io.PrintWriter; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
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 in.gov.chennaicorporation.gccoffice.callcenter.service.CampaignReportService; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("gcc/api/campaignreport") |
||||
|
public class CampaignReportAPIController { |
||||
|
|
||||
|
@Autowired |
||||
|
private CampaignReportService campaignReportService; |
||||
|
|
||||
|
@GetMapping("/getcampaignData") |
||||
|
public List<Map<String, Object>> getCampaignData( |
||||
|
@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate) { |
||||
|
|
||||
|
List<Map<String, Object>> campaignData = campaignReportService.getCampaignData(startDate, endDate); |
||||
|
//System.out.println("Campaign Data: " + campaignData); // Debugging log |
||||
|
return campaignData; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getagentdatacount") |
||||
|
public List<Map<String, Object>> getAgentwiseData(@RequestParam String campaign_id) { |
||||
|
List<Map<String, Object>> agentData = campaignReportService.getAgentwiseData(campaign_id); |
||||
|
//System.out.println("Agent Data: " + agentData); |
||||
|
return agentData; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getReportCampaignid") |
||||
|
public ResponseEntity<?> getAgentReportCampaignId(@RequestParam String campaign_id) { |
||||
|
|
||||
|
List<Map<String, Object>> agentData = campaignReportService.getAgentReportCampaignId(campaign_id); |
||||
|
//System.out.println("Agent Data: " + agentData); |
||||
|
return ResponseEntity.ok(agentData); |
||||
|
} |
||||
|
|
||||
|
//question and answers report page api |
||||
|
@GetMapping("/question-answers") |
||||
|
public ResponseEntity<?> getQuestionAnswers(@RequestParam int campaign_id) { |
||||
|
List<Map<String, Object>> response = campaignReportService.getQuestionAnswers(campaign_id); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
// @GetMapping("/download-excel") |
||||
|
// public void downloadFilteredCSV( |
||||
|
// @RequestParam int categoryId, |
||||
|
// @RequestParam int campaignId, |
||||
|
// |
||||
|
// |
||||
|
// |
||||
|
// HttpServletResponse response) throws IOException { |
||||
|
// |
||||
|
// // Set response headers |
||||
|
// response.setContentType("text/csv"); |
||||
|
// response.setHeader("Content-Disposition", "attachment; filename=filtered_data.csv"); |
||||
|
// |
||||
|
// // Generate CSV and write to response |
||||
|
// PrintWriter writer = response.getWriter(); |
||||
|
// campaignReportService.generateCSV(categoryId, campaignId, writer); |
||||
|
// writer.flush(); |
||||
|
// writer.close(); |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
@GetMapping("/download-excel") |
||||
|
public void downloadFilteredCSV( |
||||
|
@RequestParam int categoryId, |
||||
|
@RequestParam int campaignId, |
||||
|
HttpServletResponse response) throws IOException { |
||||
|
|
||||
|
String filename = campaignReportService.getCampaignName(campaignId); |
||||
|
// Format campaign name for file safety (remove spaces/special characters) |
||||
|
//String safeCampaignName = filename.replaceAll("[^a-zA-Z0-9]", "_"); |
||||
|
|
||||
|
// Set response headers |
||||
|
response.setContentType("text/csv"); |
||||
|
response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".csv"); |
||||
|
|
||||
|
// Generate CSV and write to response |
||||
|
PrintWriter writer = response.getWriter(); |
||||
|
campaignReportService.generateCSV(categoryId, campaignId, writer); |
||||
|
writer.flush(); |
||||
|
writer.close(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,281 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.controller; |
||||
|
|
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
|
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.AddcategoryServices; |
||||
|
|
||||
|
|
||||
|
@RequestMapping("/gcc/api/category") |
||||
|
@RestController |
||||
|
public class CategoryAPIController { |
||||
|
|
||||
|
@Autowired |
||||
|
private AddcategoryServices addCategoryServices; // Injecting the service |
||||
|
|
||||
|
@PostMapping("/save") |
||||
|
public ResponseEntity<String> saveCategoryDetails(@RequestBody Map<String, Object> payload) { |
||||
|
try { |
||||
|
addCategoryServices.saveCategoryDetails(payload); |
||||
|
return ResponseEntity.ok("Category and columns saved successfully."); |
||||
|
} catch (IllegalArgumentException e) { |
||||
|
return ResponseEntity.badRequest().body("Validation Error: " + e.getMessage()); |
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(500).body("Internal Server Error: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// Endpoint to save category details |
||||
|
// @PostMapping("/save") |
||||
|
// public ResponseEntity<String> saveCategoryDetails(@RequestBody Map<String, Object> payload) { |
||||
|
// try { |
||||
|
// addCategoryServices.saveCategoryDetails(payload); // Call the service method to save category details |
||||
|
// return ResponseEntity.ok("Category details saved successfully."); |
||||
|
// } catch (IllegalArgumentException e) { |
||||
|
// return ResponseEntity.badRequest().body("Error: " + e.getMessage()); |
||||
|
// } catch (Exception e) { |
||||
|
// return ResponseEntity.status(500).body("Error saving category details: " + e.getMessage()); |
||||
|
// } |
||||
|
// } |
||||
|
|
||||
|
// Endpoint to get all categories |
||||
|
@GetMapping("/list") |
||||
|
public List<Map<String, Object>> getAllCategories() { |
||||
|
return addCategoryServices.getAllCategories(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/showcategoryId") |
||||
|
public ResponseEntity<?> getCategoryById(@RequestParam("category_id") int categoryId) { |
||||
|
Map<String, Object> category = addCategoryServices.showCategory(categoryId); |
||||
|
if (category.isEmpty()) { |
||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Category not found"); |
||||
|
} |
||||
|
return ResponseEntity.ok(category); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/deleteColumnById") |
||||
|
public ResponseEntity<Map<String, Object>> deleteCategoryColumnById(@RequestParam("columnId") int columnId) { |
||||
|
boolean updated = addCategoryServices.removeColumnById(columnId); |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
response.put("success", updated); |
||||
|
|
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/updateCategoryColumns") |
||||
|
public ResponseEntity<Map<String, Object>> updateCategoryColumnsById(@RequestBody Map<String, Object> requestData) { |
||||
|
try { |
||||
|
int categoryId = (int) requestData.get("categoryId"); |
||||
|
List<Map<String, Object>> columns = (List<Map<String, Object>>) requestData.get("columns"); |
||||
|
|
||||
|
|
||||
|
boolean allUpdated = true; |
||||
|
|
||||
|
for (Map<String, Object> column : columns) { |
||||
|
int columnId = (int) column.get("id"); |
||||
|
String columnName = (String) column.get("name"); |
||||
|
|
||||
|
|
||||
|
boolean updated = addCategoryServices.updateColumnById(categoryId,columnId, columnName); |
||||
|
|
||||
|
if (!updated) { |
||||
|
allUpdated = false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
response.put("success", allUpdated); |
||||
|
return ResponseEntity.ok(response); |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(Map.of("error", "Invalid data format")); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/addNewColumns") |
||||
|
public ResponseEntity<Map<String, Object>> addNewCategoryColumnsById(@RequestBody Map<String, Object> requestData) { |
||||
|
|
||||
|
try { |
||||
|
int categoryId = (int) requestData.get("categoryId"); |
||||
|
List<Map<String, Object>> columns = (List<Map<String, Object>>) requestData.get("columns"); |
||||
|
|
||||
|
|
||||
|
boolean allUpdated = true; |
||||
|
|
||||
|
for (Map<String, Object> column : columns) { |
||||
|
|
||||
|
String columnName = (String) column.get("name"); |
||||
|
|
||||
|
|
||||
|
boolean updated = addCategoryServices.addnewupdateColumn(categoryId, columnName); |
||||
|
|
||||
|
if (!updated) { |
||||
|
allUpdated = false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
response.put("success", allUpdated); |
||||
|
return ResponseEntity.ok(response); |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(Map.of("error", "Invalid data format")); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@PutMapping("/update/{categoryId}") |
||||
|
public ResponseEntity<String> updateCategoryWithColumns( |
||||
|
@PathVariable("categoryId") int categoryId, |
||||
|
@RequestBody Map<String, Object> payload) { |
||||
|
|
||||
|
String categoryName = (String) payload.get("categoryName"); |
||||
|
List<String> columns = (List<String>) payload.get("columns"); |
||||
|
|
||||
|
try { |
||||
|
int rowsAffected = addCategoryServices.updateCategoryWithColumns(categoryId, categoryName, columns); |
||||
|
return rowsAffected > 0 |
||||
|
? ResponseEntity.ok("Category and columns updated successfully") |
||||
|
: ResponseEntity.status(HttpStatus.NOT_FOUND).body("Category not found or update failed"); |
||||
|
|
||||
|
} catch (IllegalArgumentException e) { |
||||
|
return ResponseEntity.badRequest().body("Validation Error: " + e.getMessage()); |
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body("Error updating category: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// // Endpoint to get a category by its ID |
||||
|
// @GetMapping("/showcategoryId") |
||||
|
// public ResponseEntity<?> getCategoryById(@RequestParam("category_id") int categoryId) { |
||||
|
// Map<String, Object> category = addCategoryServices.showCategory(categoryId); |
||||
|
// |
||||
|
// if (category == null) { |
||||
|
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Category not found"); |
||||
|
// } |
||||
|
// |
||||
|
// return ResponseEntity.ok(category); |
||||
|
// } |
||||
|
// |
||||
|
// @PutMapping("/update/{categoryId}") |
||||
|
// public ResponseEntity<String> updateCategoryWithColumns( |
||||
|
// @PathVariable("categoryId") int categoryId, |
||||
|
// @RequestBody Map<String, Object> payload) { |
||||
|
// |
||||
|
// String categoryName = (String) payload.get("categoryName"); |
||||
|
// List<String> columns = (List<String>) payload.get("columns"); |
||||
|
// |
||||
|
// try { |
||||
|
// int rowsAffected = addCategoryServices.updateCategoryWithColumns(categoryId, categoryName, columns); |
||||
|
// if (rowsAffected > 0) { |
||||
|
// return ResponseEntity.ok("Category and columns updated successfully"); |
||||
|
// } else { |
||||
|
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Category not found or update failed"); |
||||
|
// } |
||||
|
// } catch (IllegalArgumentException e) { |
||||
|
// return ResponseEntity.badRequest().body("Validation Error: " + e.getMessage()); |
||||
|
// } catch (Exception e) { |
||||
|
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
// .body("Error updating category: " + e.getMessage()); |
||||
|
// } |
||||
|
// } |
||||
|
|
||||
|
// @GetMapping("/showcategoryId") |
||||
|
// public ResponseEntity<?> showCategoryId(@RequestParam("category_id") int categoryId) { |
||||
|
// try { |
||||
|
// Map<String, Object> category = addCategoryServices.showCategory(categoryId); |
||||
|
// if (category != null && !category.isEmpty()) { |
||||
|
// return ResponseEntity.ok(category); |
||||
|
// } else { |
||||
|
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Category not found"); |
||||
|
// } |
||||
|
// } catch (Exception e) { |
||||
|
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
// .body("Error retrieving category: " + e.getMessage()); |
||||
|
// } |
||||
|
// } |
||||
|
|
||||
|
// @PutMapping("/update/{categoryId}") |
||||
|
// public ResponseEntity<String> updateCategory( |
||||
|
// @PathVariable("categoryId") int categoryId, |
||||
|
// @RequestParam String categoryName) { |
||||
|
// |
||||
|
// // Validate input |
||||
|
// if (categoryName == null || categoryName.trim().isEmpty()) { |
||||
|
// return ResponseEntity.badRequest().body("Category name cannot be empty"); |
||||
|
// } |
||||
|
// |
||||
|
// try { |
||||
|
// // Call the service method to update the category |
||||
|
// int rowsAffected = addCategoryServices.updateCategory(categoryId, categoryName); |
||||
|
// if (rowsAffected > 0) { |
||||
|
// return ResponseEntity.ok("Category updated successfully"); |
||||
|
// } else { |
||||
|
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Category not found or update failed"); |
||||
|
// } |
||||
|
// } catch (Exception e) { |
||||
|
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
// .body("Error updating category: " + e.getMessage()); |
||||
|
// } |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
// Endpoint to delete a category by its ID |
||||
|
@DeleteMapping("/delete/{categoryId}") |
||||
|
public ResponseEntity<String> deleteCategory( |
||||
|
@PathVariable("categoryId") int categoryId) { |
||||
|
|
||||
|
try { |
||||
|
// Call the service method to delete the category |
||||
|
addCategoryServices.deleteCategory(categoryId); |
||||
|
return ResponseEntity.ok("Category deleted successfully"); |
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body("Error deleting category: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//hari category api populate |
||||
|
|
||||
|
@GetMapping("/getcategory") |
||||
|
public List<Map<String, Object>> getcategory(){ |
||||
|
return addCategoryServices.getcategory(); |
||||
|
} |
||||
|
|
||||
|
// Get category-specific columns based on category_id |
||||
|
@GetMapping("/getCategoryColumns") |
||||
|
public List<Map<String, Object>> getCategoryColumns(@RequestParam int category_id) { |
||||
|
return addCategoryServices.getCategoryColumns(category_id); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getcampaignbycategory") |
||||
|
public List<Map<String, Object>> getcampaignbycategory(@RequestParam int id) |
||||
|
{ |
||||
|
return addCategoryServices.getcampaignbycategory(id); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,219 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.controller; |
||||
|
|
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import javax.servlet.http.HttpSession; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
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.client.RestTemplate; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.AddcategoryServices; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.AgentsService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.AttendanceService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.AgentAssignService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.CampaignService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
|
||||
|
@RequestMapping("/gcc/callcenter") |
||||
|
@Controller("callCenterCampaignMainController") |
||||
|
public class MainController { |
||||
|
|
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
private AgentAssignService campaignmaster; |
||||
|
|
||||
|
@Autowired |
||||
|
private CampaignService campaignService; |
||||
|
|
||||
|
@Autowired |
||||
|
private AddcategoryServices addCategoryServices; |
||||
|
|
||||
|
@Autowired |
||||
|
private AgentsService agentsService; |
||||
|
|
||||
|
@Autowired |
||||
|
private AttendanceService attendanceSerivce; |
||||
|
|
||||
|
private AppConfig appConfig; |
||||
|
private RestTemplate restTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public MainController(AgentAssignService campaignmaster,AgentsService agentsService,CampaignService campaignService,AddcategoryServices addCategoryServices,RestTemplate restTemplate, AppConfig appConfig) |
||||
|
{ |
||||
|
this.campaignmaster=campaignmaster; |
||||
|
this.campaignService=campaignService; |
||||
|
this.addCategoryServices=addCategoryServices; |
||||
|
this.agentsService=agentsService; |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/admin/addcategory") |
||||
|
|
||||
|
public String addcategory(Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
List<Map<String, Object>> categories = addCategoryServices.getAllCategories(); |
||||
|
|
||||
|
//System.out.println(categories); |
||||
|
|
||||
|
model.addAttribute("categories", categories); |
||||
|
|
||||
|
return "modules/callcenter/addcategory"; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@GetMapping("/admin/createcampaign") |
||||
|
|
||||
|
public String createcampaign(Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
/* |
||||
|
* List<Map<String, Object>> campaigns = campaignService.getCampaignDetails(); |
||||
|
* |
||||
|
* |
||||
|
* System.out.println("campaignlist:"+campaigns); |
||||
|
* |
||||
|
* model.addAttribute("campaigns", campaigns); |
||||
|
*/ |
||||
|
|
||||
|
return "modules/callcenter/createcampaign"; // Name of the Thymeleaf template (e.g., campaignList.html) |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@GetMapping("/admin/campaignlist") |
||||
|
public String viewCampaignList(Model model) |
||||
|
{ |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
List<Map<String, Object>> campaigns = campaignService.getDetailsForStart(); |
||||
|
|
||||
|
model.addAttribute("campaigns", campaigns); |
||||
|
|
||||
|
List<Map<String, Object>> activeCampaigns =campaignService.getActiveCampaigns(); |
||||
|
model.addAttribute("activeCampaigns", activeCampaigns); |
||||
|
|
||||
|
return "modules/callcenter/campaignlist"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/agentscampaign") |
||||
|
public String targetPage(Model model) |
||||
|
{ |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(LoginUserId); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String agent_name=LoginUserInfo.getCurrentUserDetails().getUsername(); |
||||
|
model.addAttribute("agent_name", agent_name); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
List<Map<String, Object>> agentsCampaigns=agentsService.getAgentsALLCampaigns(userId); |
||||
|
|
||||
|
List<Map<String, Object>> agentsCampaignsList=agentsService.getAgentsALLCampaignsList(userId); |
||||
|
|
||||
|
List<Map<String, Object>> agentsCampaignsList1=agentsService.getAgentsALLCampaignsList1(userId); |
||||
|
|
||||
|
//List<Map<String, Object>> CampActions=agentsService.getCallCategories(); |
||||
|
//model.addAttribute("CampActions", CampActions); |
||||
|
|
||||
|
model.addAttribute("agentsCampaignsList", agentsCampaignsList); |
||||
|
model.addAttribute("agentsCampaigns", agentsCampaigns); |
||||
|
model.addAttribute("agentsCampaignsList1", agentsCampaignsList1); |
||||
|
//System.out.println("Agents Campaigns List: " + agentsCampaignsList); |
||||
|
//System.out.println("Agents Campaigns : " + agentsCampaigns); |
||||
|
|
||||
|
return "modules/callcenter/agentscampaign"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/admin/campaignreport") |
||||
|
public String campaignreport(Model model) |
||||
|
{ |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
return "modules/callcenter/campaignreport"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/attendancereport") |
||||
|
public String AttendanceList( |
||||
|
@RequestParam(required = false) String fromDate, |
||||
|
@RequestParam(required = false) String toDate, |
||||
|
Model model) { |
||||
|
List<Map<String, Object>> attendanceData = Collections.emptyList(); |
||||
|
|
||||
|
if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { |
||||
|
String apiUrl = appConfig.attendanceReport + "/callcenter/api/attendance/getattendancereport?fromDate=" + fromDate + "&toDate=" + toDate; |
||||
|
|
||||
|
try { |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
String responseBody = responseEntity.getBody(); |
||||
|
|
||||
|
if (responseBody != null && !responseBody.isEmpty()) { |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
if (responseBody.trim().startsWith("{")) { |
||||
|
// Single object response |
||||
|
Map<String, Object> singleData = objectMapper.readValue(responseBody, new TypeReference<>() {}); |
||||
|
attendanceData = List.of(singleData); |
||||
|
} else { |
||||
|
// Array response |
||||
|
attendanceData = objectMapper.readValue(responseBody, new TypeReference<>() {}); |
||||
|
} |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
System.err.println("Error fetching attendance data: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
model.addAttribute("attendanceData", attendanceData); |
||||
|
model.addAttribute("fromDate", fromDate); |
||||
|
model.addAttribute("toDate", toDate); |
||||
|
model.addAttribute("LoginUserId", LoginUserInfo.getLoginUserId()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
return "modules/callcenter/attendancereport"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,26 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.controller; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
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.RestController; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenter.service.WhatsappMsgService; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/gcc/api/whatsapp") |
||||
|
public class WhatsappController { |
||||
|
|
||||
|
@Autowired |
||||
|
private WhatsappMsgService whatsappMsgService; |
||||
|
|
||||
|
@PostMapping("/send-whatsapp-message") |
||||
|
public ResponseEntity<String> sendWhatsAppMessage(@RequestParam String msgUrl) { |
||||
|
String response = whatsappMsgService.sendMsg(msgUrl); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
@ -0,0 +1,303 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.service; |
||||
|
|
||||
|
import java.sql.ResultSet; |
||||
|
|
||||
|
import java.sql.SQLException; |
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
import java.util.Locale.Category; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
import javax.transaction.Transactional; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.dao.EmptyResultDataAccessException; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import org.springframework.jdbc.support.GeneratedKeyHolder; |
||||
|
import org.springframework.jdbc.support.KeyHolder; |
||||
|
import java.sql.PreparedStatement; |
||||
|
import java.sql.Statement; |
||||
|
|
||||
|
|
||||
|
@Service |
||||
|
public class AddcategoryServices { |
||||
|
|
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913CampaignDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// public void saveCategoryDetails(Map<String, Object> categoryData) { |
||||
|
// String sql = "INSERT INTO category (category_name, isactive, isdelete, created_date) VALUES (?, 1, 0, CURRENT_TIMESTAMP)"; |
||||
|
// |
||||
|
// // Ensure that the key "categoryname" matches exactly what is being sent from the frontend |
||||
|
// String categoryName = (String) categoryData.get("categoryname"); |
||||
|
// |
||||
|
// // Check if categoryName is null or empty and handle it properly |
||||
|
// if (categoryName == null || categoryName.trim().isEmpty()) { |
||||
|
// throw new IllegalArgumentException("Category name cannot be null or empty"); |
||||
|
// } |
||||
|
// |
||||
|
// jdbcTemplate.update(sql, categoryName); |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public void saveCategoryDetails(Map<String, Object> categoryData) { |
||||
|
String categoryName = (String) categoryData.get("categoryname"); |
||||
|
List<String> columns = (List<String>) categoryData.get("columns"); |
||||
|
|
||||
|
if (categoryName == null || categoryName.trim().isEmpty()) { |
||||
|
throw new IllegalArgumentException("Category name cannot be null or empty"); |
||||
|
} |
||||
|
|
||||
|
if (columns == null || columns.isEmpty() || columns.contains("")) { |
||||
|
throw new IllegalArgumentException("At least one column name is required"); |
||||
|
} |
||||
|
|
||||
|
// Insert into category table and get the generated category_id |
||||
|
String categorySql = "INSERT INTO category (category_name, isactive, isdelete, created_date) VALUES (?, 1, 0, CURRENT_TIMESTAMP)"; |
||||
|
KeyHolder keyHolder = new GeneratedKeyHolder(); |
||||
|
|
||||
|
jdbcTemplate.update(connection -> { |
||||
|
PreparedStatement ps = connection.prepareStatement(categorySql, Statement.RETURN_GENERATED_KEYS); |
||||
|
ps.setString(1, categoryName); |
||||
|
return ps; |
||||
|
}, keyHolder); |
||||
|
|
||||
|
Integer categoryId = keyHolder.getKey().intValue(); // Extract generated category_id |
||||
|
|
||||
|
// Insert columns into category_columns table |
||||
|
String columnSql = "INSERT INTO category_columns (category_id, column_name, isactive, isdelete, created_date) VALUES (?, ?, 1, 0, CURRENT_TIMESTAMP)"; |
||||
|
jdbcTemplate.batchUpdate(columnSql, columns, columns.size(), |
||||
|
(PreparedStatement ps, String column) -> { |
||||
|
ps.setInt(1, categoryId); |
||||
|
ps.setString(2, column); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getAllCategories() { |
||||
|
|
||||
|
String SqlQuery = "SELECT category_id,category_name FROM category where isactive=1 and isdelete=0"; |
||||
|
|
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(SqlQuery); |
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
public Map<String, Object> showCategory(int categoryId) { |
||||
|
String categorySql = "SELECT category_id, category_name FROM category WHERE category_id = ? AND isactive = 1 AND isdelete = 0"; |
||||
|
Map<String, Object> category; |
||||
|
try { |
||||
|
category = jdbcTemplate.queryForMap(categorySql, categoryId); |
||||
|
} catch (EmptyResultDataAccessException e) { |
||||
|
return Collections.emptyMap(); |
||||
|
} |
||||
|
|
||||
|
String columnsSql = "SELECT id,column_name FROM category_columns WHERE category_id = ? AND isactive = 1 AND isdelete = 0"; |
||||
|
List<Map<String,Object>> columns = jdbcTemplate.queryForList(columnsSql,categoryId); |
||||
|
category.put("columns", columns); |
||||
|
return category; |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public int updateCategoryWithColumns(int categoryId, String categoryName, List<String> columns) { |
||||
|
if (categoryName == null || categoryName.trim().isEmpty()) { |
||||
|
throw new IllegalArgumentException("Category name cannot be empty"); |
||||
|
} |
||||
|
if (columns == null || columns.size() < 2 || columns.contains("")) { |
||||
|
throw new IllegalArgumentException("At least two column names are required"); |
||||
|
} |
||||
|
|
||||
|
String updateCategorySql = "UPDATE category SET category_name = ? WHERE category_id = ? AND isactive = 1 AND isdelete = 0"; |
||||
|
int categoryUpdateCount = jdbcTemplate.update(updateCategorySql, categoryName, categoryId); |
||||
|
|
||||
|
if (categoryUpdateCount == 0) { |
||||
|
throw new IllegalArgumentException("Category not found or update failed."); |
||||
|
} |
||||
|
|
||||
|
String deleteColumnsSql = "DELETE FROM category_columns WHERE category_id = ? AND isactive = 1 AND isdelete = 0"; |
||||
|
jdbcTemplate.update(deleteColumnsSql, categoryId); |
||||
|
|
||||
|
String insertColumnsSql = "INSERT INTO category_columns (category_id, column_name, isactive, isdelete, created_date) VALUES (?, ?, 1, 0, CURRENT_TIMESTAMP)"; |
||||
|
jdbcTemplate.batchUpdate(insertColumnsSql, columns, columns.size(), (PreparedStatement ps, String column) -> { |
||||
|
ps.setInt(1, categoryId); |
||||
|
ps.setString(2, column); |
||||
|
}); |
||||
|
|
||||
|
return categoryUpdateCount; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// @Transactional |
||||
|
// public int updateCategoryWithColumns(int categoryId, String categoryName, List<String> columns) { |
||||
|
// if (categoryName == null || categoryName.trim().isEmpty()) { |
||||
|
// throw new IllegalArgumentException("Category name cannot be empty"); |
||||
|
// } |
||||
|
// if (columns == null || columns.isEmpty() || columns.contains("")) { |
||||
|
// throw new IllegalArgumentException("At least one column name is required"); |
||||
|
// } |
||||
|
// |
||||
|
// String updateCategorySql = "UPDATE category SET category_name = ? WHERE category_id = ? AND isactive = 1 AND isdelete = 0"; |
||||
|
// int categoryUpdateCount = jdbcTemplate.update(updateCategorySql, categoryName, categoryId); |
||||
|
// |
||||
|
// if (categoryUpdateCount == 0) { |
||||
|
// throw new IllegalArgumentException("Category not found or update failed."); |
||||
|
// } |
||||
|
// |
||||
|
// String deleteColumnsSql = "DELETE FROM category_columns WHERE category_id = ? AND isactive = 1 AND isdelete = 0"; |
||||
|
// jdbcTemplate.update(deleteColumnsSql, categoryId); |
||||
|
// |
||||
|
// String insertColumnsSql = "INSERT INTO category_columns (category_id, column_name, isactive, isdelete, created_date) VALUES (?, ?, 1, 0, CURRENT_TIMESTAMP)"; |
||||
|
// jdbcTemplate.batchUpdate(insertColumnsSql, columns, columns.size(), (PreparedStatement ps, String column) -> { |
||||
|
// ps.setInt(1, categoryId); |
||||
|
// ps.setString(2, column); |
||||
|
// }); |
||||
|
// |
||||
|
// return categoryUpdateCount; |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
// // Method to show a category by its ID |
||||
|
// public Map<String, Object> showCategory(int categoryId) { |
||||
|
// // Fetch category details |
||||
|
// String categorySql = "SELECT category_id, category_name FROM category WHERE category_id = ? AND isactive = 1 AND isdelete = 0"; |
||||
|
// Map<String, Object> category; |
||||
|
// try { |
||||
|
// category = jdbcTemplate.queryForMap(categorySql, categoryId); |
||||
|
// } catch (EmptyResultDataAccessException e) { |
||||
|
// return null; // If no category found |
||||
|
// } |
||||
|
// |
||||
|
// // Fetch category columns |
||||
|
// String columnsSql = "SELECT column_name FROM category_columns WHERE category_id = ? AND isactive = 1 AND isdelete = 0"; |
||||
|
// List<String> columns = jdbcTemplate.queryForList(columnsSql, String.class, categoryId); |
||||
|
// |
||||
|
// // Add columns to response |
||||
|
// category.put("columns", columns); |
||||
|
// return category; |
||||
|
// } |
||||
|
// |
||||
|
// |
||||
|
|
||||
|
// @Transactional |
||||
|
// public int updateCategoryWithColumns(int categoryId, String categoryName, List<String> columns) { |
||||
|
// // Validate input |
||||
|
// if (categoryName == null || categoryName.trim().isEmpty()) { |
||||
|
// throw new IllegalArgumentException("Category name cannot be empty"); |
||||
|
// } |
||||
|
// if (columns == null || columns.isEmpty() || columns.contains("")) { |
||||
|
// throw new IllegalArgumentException("At least one column name is required"); |
||||
|
// } |
||||
|
// |
||||
|
// // Update category name |
||||
|
// String updateCategorySql = "UPDATE category SET category_name = ? WHERE category_id = ? AND isactive = 1 AND isdelete = 0"; |
||||
|
// int categoryUpdateCount = jdbcTemplate.update(updateCategorySql, categoryName, categoryId); |
||||
|
// |
||||
|
// if (categoryUpdateCount == 0) { |
||||
|
// throw new IllegalArgumentException("Category not found or update failed."); |
||||
|
// } |
||||
|
// |
||||
|
// // Remove existing category columns before inserting new ones |
||||
|
// String deleteColumnsSql = "DELETE FROM category_columns WHERE category_id = ?"; |
||||
|
// jdbcTemplate.update(deleteColumnsSql, categoryId); |
||||
|
// |
||||
|
// // Insert updated columns |
||||
|
// String insertColumnsSql = "INSERT INTO category_columns (category_id, column_name, isactive, isdelete, created_date) VALUES (?, ?, 1, 0, CURRENT_TIMESTAMP)"; |
||||
|
// jdbcTemplate.batchUpdate(insertColumnsSql, columns, columns.size(), |
||||
|
// (PreparedStatement ps, String column) -> { |
||||
|
// ps.setInt(1, categoryId); |
||||
|
// ps.setString(2, column); |
||||
|
// }); |
||||
|
// |
||||
|
// return categoryUpdateCount; |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
// // Method to update a category's name by its ID |
||||
|
// public int updateCategory(int categoryId, String categoryName) { |
||||
|
// String sql = "UPDATE category SET category_name = ? WHERE category_id = ? AND isactive = 1 AND isdelete = 0"; |
||||
|
// return jdbcTemplate.update(sql, categoryName, categoryId); |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
// Method to delete a category by its name |
||||
|
public void deleteCategory(int categoryId) { |
||||
|
// String sql = "DELETE FROM category WHERE category_id = ?"; |
||||
|
|
||||
|
String sql = "UPDATE category SET isactive=0 , isdelete=1 WHERE category_id = ?"; |
||||
|
jdbcTemplate.update(sql, categoryId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//hari populate category services |
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getcategory() { |
||||
|
String sqlQuery = "SELECT category_id,category_name FROM category where isactive='1' and isdelete='0'"; |
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getCategoryColumns(int categoryId) { |
||||
|
String sqlQuery = "SELECT column_name FROM category_columns WHERE category_id = ? AND isactive = 1"; |
||||
|
return jdbcTemplate.queryForList(sqlQuery, categoryId); |
||||
|
} |
||||
|
|
||||
|
// Fetch category with columns |
||||
|
public List<Map<String, Object>> getCategoriesWithColumns() { |
||||
|
String sqlQuery = "SELECT c.category_id, c.category_name, cc.column " + |
||||
|
"FROM gcc_1913_campaign.category c " + |
||||
|
"INNER JOIN gcc_1913_campaign.category_columns cc ON c.category_id = cc.category_id " + |
||||
|
"WHERE c.isactive = 1 AND c.isdelete = 0 " + |
||||
|
"AND cc.isactive = 1 AND cc.isdelete = 0"; |
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
|
||||
|
public List<Map<String, Object>> getcampaignbycategory(int id) { |
||||
|
|
||||
|
String sqlQuery = "SELECT cr.campaign_id,cr.campaign_name FROM campaign_request cr JOIN category c ON cr.category_id=c.category_id where cr.category_id=? and cr.isactive='1'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery,id); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
public boolean removeColumnById(int columnId) { |
||||
|
String sql = "UPDATE category_columns SET isactive = 0, isdelete = 1 WHERE id = ?"; |
||||
|
|
||||
|
int rowsAffected = jdbcTemplate.update(sql, columnId); |
||||
|
|
||||
|
return rowsAffected > 0; // Returns true if at least one row was updated, otherwise false |
||||
|
} |
||||
|
|
||||
|
public boolean updateColumnById(int categoryId,int columnId, String columnName) { |
||||
|
String sql = "UPDATE category_columns SET column_name = ? WHERE id = ? and category_id=?"; |
||||
|
int rowsAffected = jdbcTemplate.update(sql, columnName, columnId,categoryId); |
||||
|
return rowsAffected > 0; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public boolean addnewupdateColumn(int categoryId, String columnName) { |
||||
|
|
||||
|
//String sql = "UPDATE category_columns SET column_name = ? WHERE id = ? and category_id=?"; |
||||
|
String sql = "INSERT INTO category_columns (category_id, column_name) VALUES (?, ?)"; |
||||
|
|
||||
|
int rowsAffected = jdbcTemplate.update(sql, categoryId,columnName); |
||||
|
return rowsAffected > 0; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,214 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.service; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
|
||||
|
import java.util.LinkedHashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
import javax.transaction.Transactional; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.dao.DataAccessException; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
|
||||
|
@Service |
||||
|
public class AgentAssignService |
||||
|
{ |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913CampaignDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource2(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate2; |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getcategory() { |
||||
|
String sqlQuery = "SELECT category_id,category_name FROM gcc_1913_campaign.category where isactive='1' and isdelete='0'"; |
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getcampaignbycategory(int id) { |
||||
|
String sqlQuery = "SELECT cr.campaign_id, cr.campaign_name " + |
||||
|
"FROM gcc_1913_campaign.campaign_request cr " + |
||||
|
"JOIN gcc_1913_campaign.category c ON cr.category_id = c.category_id " + |
||||
|
"WHERE cr.category_id = ? AND campaign_status='PENDING' " + |
||||
|
"AND cr.isactive = '1' "; |
||||
|
return jdbcTemplate.queryForList(sqlQuery,id); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getcampaignbyid(int id) { |
||||
|
String sqlQuery = "SELECT * FROM gcc_1913_campaign.campaign_request where isactive='1' and campaign_id=?"; |
||||
|
return jdbcTemplate.queryForList(sqlQuery,id); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getagentsfortask(int id) { |
||||
|
String sqlQuery = "SELECT al.agent_id,al.agent_name\r\n" |
||||
|
+ "FROM gcc_1913_qaqc.agents_list al\r\n" |
||||
|
+ "LEFT JOIN gcc_1913_campaign.agent_assign aa ON al.agent_id = aa.agent_id AND aa.isactive = '1' AND aa.campaign_id = ?\r\n" |
||||
|
+ "WHERE aa.agent_id IS NULL AND al.calling_type='OUTBOUND'AND al.isactive='1' AND al.isdelete='0'"; |
||||
|
return jdbcTemplate.queryForList(sqlQuery,id); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public int addagentsfortask(int agent_id, int category_id, int campaign_id) { |
||||
|
String insertSql = "INSERT INTO gcc_1913_campaign.agent_assign (agent_id, category_id, campaign_id) VALUES (?, ?, ?)"; |
||||
|
int rowsInserted = jdbcTemplate.update(insertSql, agent_id, category_id, campaign_id); |
||||
|
|
||||
|
return rowsInserted; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public void addAgentsForCampaign(int selectedAgentId, int categoryId, int campaignId) { |
||||
|
String insertSql = "INSERT INTO gcc_1913_campaign.agent_assign (agent_id, category_id, campaign_id) VALUES (?, ?, ?)"; |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
int rowsInserted = jdbcTemplate.update(insertSql, selectedAgentId, categoryId, campaignId); |
||||
|
|
||||
|
if (rowsInserted > 0) { |
||||
|
System.out.println("Successfully inserted agent ID in agent_assign== " + selectedAgentId + " into campaign ID " + campaignId); |
||||
|
} else { |
||||
|
System.out.println("No rows inserted for agent ID " + selectedAgentId); |
||||
|
} |
||||
|
|
||||
|
} catch (DataAccessException | NumberFormatException ex) { |
||||
|
System.err.println("Error inserting data: " + ex.getMessage()); |
||||
|
throw new RuntimeException("Failed to insert agents for campaign. Please try again.", ex); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public void updateAgentForCampaign(int selectedAgentId, int categoryId, int campaignId,int DataId) { |
||||
|
String updateSql = "UPDATE gcc_1913_campaign.upload_data SET agent_id = ? WHERE campaign_id = ? AND category_id = ? AND data_id=?"; |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
int rowsUpdated = jdbcTemplate.update(updateSql, selectedAgentId,campaignId,categoryId,DataId); |
||||
|
|
||||
|
/* if (rowsUpdated > 0) { |
||||
|
System.out.println("Successfully updated agent ID in upload_data== " + selectedAgentId + " for campaign ID " + campaignId); |
||||
|
} else { |
||||
|
System.out.println("No rows updated for agent ID " + selectedAgentId); |
||||
|
}*/ |
||||
|
|
||||
|
} catch (DataAccessException | NumberFormatException ex) { |
||||
|
System.err.println("Error updating data: " + ex.getMessage()); |
||||
|
throw new RuntimeException("Failed to update agents for campaign. Please try again.", ex); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Integer> getDataIdForInitialAssign(int categoryId, int campaignId) { |
||||
|
|
||||
|
String sql = "SELECT data_id FROM gcc_1913_campaign.upload_data " |
||||
|
+ "WHERE category_id = ? AND campaign_id = ? " |
||||
|
+ "AND agent_id IS NULL AND is_processed = 0 ORDER BY data_id"; |
||||
|
|
||||
|
// Correctly specify the return type for jdbcTemplate.queryForList |
||||
|
return jdbcTemplate.queryForList(sql, Integer.class, categoryId, campaignId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> checkcampaigninassignedtable(int id) |
||||
|
{ |
||||
|
String sqlQuery = "SELECT al.agent_id,al.agent_name,aa.assigned_id\r\n" |
||||
|
+ "FROM gcc_1913_qaqc.agents_list al\r\n" |
||||
|
+ "JOIN gcc_1913_campaign.agent_assign aa ON al.agent_id = aa.agent_id\r\n" |
||||
|
+ "JOIN gcc_1913_campaign.campaign_request c ON aa.campaign_id=c.campaign_id\r\n" |
||||
|
+ "WHERE aa.campaign_id = ? AND aa.isactive = '1' AND al.calling_type='OUTBOUND'AND al.isactive='1' AND al.isdelete='0'"; |
||||
|
return jdbcTemplate.queryForList(sqlQuery,id); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public int editagentsfortask(int assigned_id) { |
||||
|
String updateSql = "UPDATE gcc_1913_campaign.agent_assign SET isactive='0', isdelete='1',status='NOT_ASSIGNED' WHERE assigned_id=?"; |
||||
|
int rowsInserted = jdbcTemplate.update(updateSql,assigned_id); |
||||
|
|
||||
|
return rowsInserted; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getcampaignquestionbyid(int id) { |
||||
|
String sqlQuery = " SELECT " + |
||||
|
" cr.campaign_id, " + |
||||
|
" cr.campaign_name, " + |
||||
|
" cr.category_id, " + |
||||
|
" cr.start_date, " + |
||||
|
" cr.end_date, " + |
||||
|
" cr.no_of_agents, " + |
||||
|
" cr.calls_per_agent, " + |
||||
|
" cr.description, " + |
||||
|
" cr.created_date, " + |
||||
|
" cr.excel_url, " + |
||||
|
" cr.isactive, " + |
||||
|
" cr.campaign_status, " + |
||||
|
" cq.questions, " + |
||||
|
" cq.question_id, " + |
||||
|
" cq.answer_type_id, " + |
||||
|
" cat.type_name, " + |
||||
|
" ca.campaign_answer " + // Campaign Answer can be NULL |
||||
|
"FROM gcc_1913_campaign.campaign_request cr " + |
||||
|
"JOIN gcc_1913_campaign.campaign_questions cq " + |
||||
|
" ON cr.campaign_id = cq.campaign_id " + |
||||
|
"LEFT JOIN gcc_1913_campaign.campaign_answers ca " + // LEFT JOIN to include questions with no answers |
||||
|
" ON cq.question_id = ca.question_id " + |
||||
|
"JOIN gcc_1913_campaign.answer_type cat " + |
||||
|
" ON cat.answer_type_id = cq.answer_type_id " + |
||||
|
"WHERE cr.isactive = 1 AND cr.campaign_id = ?"; |
||||
|
|
||||
|
List<Map<String, Object>> queryResult = jdbcTemplate.queryForList(sqlQuery, id); |
||||
|
|
||||
|
// Map to group answers by question_id |
||||
|
Map<Integer, Map<String, Object>> groupedData = new LinkedHashMap(); |
||||
|
|
||||
|
for (Map<String, Object> row : queryResult) { |
||||
|
Integer questionId = (Integer) row.get("question_id"); |
||||
|
String campaignAnswer = (String) row.get("campaign_answer"); // Can be null |
||||
|
|
||||
|
// Check if this question_id already exists in the map |
||||
|
if (!groupedData.containsKey(questionId)) { |
||||
|
// Copy the row data (excluding campaign_answer) and initialize answers list |
||||
|
Map<String, Object> newRow = new LinkedHashMap<>(row); |
||||
|
newRow.remove("campaign_answer"); // Remove individual answer |
||||
|
newRow.put("campaign_answers", new ArrayList<String>()); // Initialize answer list |
||||
|
|
||||
|
groupedData.put(questionId, newRow); |
||||
|
} |
||||
|
|
||||
|
// Only add answers if they are not null |
||||
|
if (campaignAnswer != null) { |
||||
|
((List<String>) groupedData.get(questionId).get("campaign_answers")).add(campaignAnswer); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Convert grouped data to a list |
||||
|
return new ArrayList<>(groupedData.values()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,665 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.service; |
||||
|
|
||||
|
import java.io.File; |
||||
|
import java.io.FileInputStream; |
||||
|
import java.io.IOException; |
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
import javax.transaction.Transactional; |
||||
|
|
||||
|
import org.apache.poi.ss.usermodel.Cell; |
||||
|
import org.apache.poi.ss.usermodel.DateUtil; |
||||
|
import org.apache.poi.ss.usermodel.Row; |
||||
|
import org.apache.poi.ss.usermodel.Sheet; |
||||
|
import org.apache.poi.ss.usermodel.Workbook; |
||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.dao.DataAccessException; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
public class AgentsService { |
||||
|
|
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913CampaignDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource2(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate2; |
||||
|
|
||||
|
|
||||
|
// Utility method to get cell value based on type |
||||
|
private String getCellValue(Cell cell) { |
||||
|
if (cell == null) { |
||||
|
return ""; |
||||
|
} |
||||
|
switch (cell.getCellType()) { |
||||
|
case STRING: |
||||
|
return cell.getStringCellValue(); |
||||
|
case NUMERIC: |
||||
|
// Check if the numeric cell contains a date |
||||
|
if (DateUtil.isCellDateFormatted(cell)) { |
||||
|
return new SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue()); |
||||
|
} |
||||
|
return String.valueOf((long) cell.getNumericCellValue()); // Cast to long to avoid scientific notation |
||||
|
case BOOLEAN: |
||||
|
return String.valueOf(cell.getBooleanCellValue()); |
||||
|
case FORMULA: |
||||
|
return cell.getCellFormula(); |
||||
|
default: |
||||
|
return ""; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Parse integer values (for ID) |
||||
|
private Integer parseInteger(String value) { |
||||
|
try { |
||||
|
return Integer.parseInt(value); |
||||
|
} catch (NumberFormatException e) { |
||||
|
return null; // return null if parsing fails |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Parse long values (for Mobile number) |
||||
|
private Long parseLong(String value) { |
||||
|
try { |
||||
|
return Long.parseLong(value); |
||||
|
} catch (NumberFormatException e) { |
||||
|
return null; // return null if parsing fails |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Example fetch method |
||||
|
public List<Map<String, Object>> fetchDataFromExcel(int categoryId,Long campaignId) throws IOException { |
||||
|
String excelUrl = getExcelUrlByCampaignId(campaignId); |
||||
|
List<Map<String, Object>>data=getExcelData(categoryId,campaignId, excelUrl); |
||||
|
return saveExcelData(data); |
||||
|
} |
||||
|
|
||||
|
public String getExcelUrlByCampaignId(Long campaignId) { |
||||
|
String sql = "SELECT excel_url\r\n" |
||||
|
+ "FROM gcc_1913_campaign.campaign_request\r\n" |
||||
|
+ "WHERE campaign_id = ?"; |
||||
|
return jdbcTemplate.queryForObject(sql, String.class, campaignId); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getExcelData(int categoryId,Long campaignId,String filePath) throws IOException { |
||||
|
List<Map<String, Object>> data = new ArrayList<>(); |
||||
|
File file = new File(filePath); |
||||
|
|
||||
|
try (FileInputStream fis = new FileInputStream(file); |
||||
|
Workbook workbook = new XSSFWorkbook(fis)) { |
||||
|
|
||||
|
Sheet sheet = workbook.getSheetAt(0); |
||||
|
for (Row row : sheet) { |
||||
|
if (row.getRowNum() == 0) continue; // skip header row |
||||
|
|
||||
|
Map<String, Object> rowData = new HashMap<>(); |
||||
|
|
||||
|
// Add the campaign_id and category_id to each row |
||||
|
|
||||
|
rowData.put("category_id", categoryId); |
||||
|
|
||||
|
rowData.put("campaign_id", campaignId); |
||||
|
|
||||
|
// Convert ID to Integer |
||||
|
rowData.put("ID", getCellValue(row.getCell(0))); |
||||
|
|
||||
|
// Name remains String |
||||
|
rowData.put("Name", getCellValue(row.getCell(1))); |
||||
|
|
||||
|
// Address remains String |
||||
|
rowData.put("Address", getCellValue(row.getCell(2))); |
||||
|
|
||||
|
// Dues remains String (you can convert if necessary) |
||||
|
rowData.put("Balance amount", parseLong(getCellValue(row.getCell(3)))); |
||||
|
|
||||
|
// Convert Mobile number to Long |
||||
|
rowData.put("Mobile number", parseLong(getCellValue(row.getCell(4)))); |
||||
|
|
||||
|
rowData.put("Tiny url", getCellValue(row.getCell(5))); |
||||
|
|
||||
|
data.add(rowData); |
||||
|
} |
||||
|
} |
||||
|
return data; |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> saveExcelData(List<Map<String, Object>> data) { |
||||
|
|
||||
|
// Prepare SQL query for inserting the specified columns |
||||
|
String sql = "INSERT INTO gcc_1913_campaign.upload_data (category_id, campaign_id, field_1, field_2, field_3, field_4, field_5,field_6) " + |
||||
|
"VALUES (?, ?, ?, ?, ?, ?, ?,?)"; |
||||
|
|
||||
|
// Loop through the data list and insert each row into the database |
||||
|
for (Map<String, Object> row : data) { |
||||
|
jdbcTemplate.update(sql, |
||||
|
row.get("category_id"), // Category ID |
||||
|
row.get("campaign_id"), // Campaign ID |
||||
|
row.get("ID"), // ID (String) |
||||
|
row.get("Name"), // Name (String) |
||||
|
row.get("Address"), // Address (String) |
||||
|
row.get("Balance amount"), // Dues if any (String) |
||||
|
row.get("Mobile number"), // Mobile number (Long) |
||||
|
row.get("Tiny url") |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
// Return the inserted data (if needed) |
||||
|
return data; // Optionally return the inserted data or change the return type as per your use case |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
//For Assigned tasks |
||||
|
// @Transactional |
||||
|
// public List<Map<String, Object>> getAgentsALLCampaigns(int agent_id) { |
||||
|
// String SqlQuery = "SELECT \r\n" |
||||
|
// + " c.category_name,\r\n" |
||||
|
// + " cr.campaign_name,\r\n" |
||||
|
// + " cr.calls_per_agent,\r\n" |
||||
|
// + " aa.campaign_id,\r\n" |
||||
|
// + " aa.agent_id,\r\n" |
||||
|
// + " (SELECT COUNT(data_id) \r\n" |
||||
|
// + " FROM gcc_1913_campaign.upload_data up \r\n" |
||||
|
// + " WHERE up.agent_id = aa.agent_id \r\n" |
||||
|
// + " AND up.campaign_id = cr.campaign_id\r\n" |
||||
|
// + " ) AS calls_assigned,\r\n" |
||||
|
// + " (SELECT COUNT(CASE WHEN up.field_14 IS NULL THEN 1 END) \r\n" |
||||
|
// + " FROM gcc_1913_campaign.upload_data up \r\n" |
||||
|
// + " WHERE up.agent_id = aa.agent_id \r\n" |
||||
|
// + " AND up.campaign_id = cr.campaign_id\r\n" |
||||
|
// + " ) AS pending_count,\r\n" |
||||
|
// + " (SELECT COUNT(CASE WHEN up.field_14 IS NOT NULL THEN 1 END) \r\n" |
||||
|
// + " FROM gcc_1913_campaign.upload_data up \r\n" |
||||
|
// + " WHERE up.agent_id = aa.agent_id \r\n" |
||||
|
// + " AND up.campaign_id = cr.campaign_id\r\n" |
||||
|
// + " ) AS complete_count,\r\n" |
||||
|
// + " (SELECT COUNT(CASE WHEN up.field_14 ='CALL_BACK_LATER' OR up.field_14 = 'UNATTENDED' THEN 1 END) \r\n" |
||||
|
// + " FROM gcc_1913_campaign.upload_data up \r\n" |
||||
|
// + " WHERE up.agent_id = aa.agent_id \r\n" |
||||
|
// + " AND up.campaign_id = cr.campaign_id\r\n" |
||||
|
// + " ) AS followup_count\r\n" |
||||
|
// + " \r\n" |
||||
|
// + "FROM \r\n" |
||||
|
// + " gcc_1913_campaign.agent_assign aa\r\n" |
||||
|
// + "JOIN \r\n" |
||||
|
// + " gcc_1913_qaqc.agents_list al ON aa.agent_id = al.agent_id\r\n" |
||||
|
// + "JOIN \r\n" |
||||
|
// + " gcc_1913_campaign.campaign_request cr ON cr.campaign_id = aa.campaign_id\r\n" |
||||
|
// + "JOIN \r\n" |
||||
|
// + " gcc_1913_campaign.category c ON cr.category_id = c.category_id\r\n" |
||||
|
// + "WHERE \r\n" |
||||
|
// + " aa.agent_id = ? \r\n" |
||||
|
// + " AND aa.isactive = '1'\r\n" |
||||
|
// + " AND cr.isactive = '0'"; |
||||
|
// |
||||
|
// return jdbcTemplate.queryForList(SqlQuery,agent_id); |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getdataByIds(List<Integer> ids) { |
||||
|
// Construct the SQL query with placeholders for the number of IDs |
||||
|
String inSql = String.join(",", Collections.nCopies(ids.size(), "?")); |
||||
|
String SqlQuery = "SELECT data_id, field_1 as id, field_2 as name, field_3 as address, field_4 as dues, field_5 as cellnumber,field_6 as viewdetails,field_14 as call_status,field_15 as remarks " + |
||||
|
"FROM gcc_1913_campaign.upload_data " + |
||||
|
"WHERE data_id IN (" + inSql + ")"; |
||||
|
|
||||
|
// Convert the list of ids to an Object array |
||||
|
return jdbcTemplate.queryForList(SqlQuery, ids.toArray()); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public void saveCallLogs(String call_status,String remarks ,int data_id,int agent_id) |
||||
|
{ |
||||
|
String SqlQuery = "UPDATE gcc_1913_campaign.upload_data SET call_status = ?, remarks=?, updated_date = NOW() ,updated_agent_id=?, is_processed=1 WHERE (data_id = ? )"; |
||||
|
|
||||
|
jdbcTemplate.update(SqlQuery,call_status, remarks,agent_id,data_id); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public int saveInLogsTable(int campaignId, int agentId, int dataId, String call_status,String remarks) { |
||||
|
String sqlQuery = "INSERT INTO gcc_1913_campaign.call_logs (campaign_id,agent_id,data_id,call_status,remarks) VALUES (?, ?, ?,?,?)"; |
||||
|
int rowsAffected = 0; |
||||
|
try { |
||||
|
rowsAffected = jdbcTemplate.update(sqlQuery, campaignId, agentId, dataId,call_status,remarks); |
||||
|
//System.out.println("Inserted into call_logs successfully. Rows affected: " + rowsAffected); |
||||
|
} catch (Exception e) { |
||||
|
System.err.println("Error inserting into call_logs: " + e.getMessage()); |
||||
|
// Log the exception or rethrow it based on your error-handling strategy |
||||
|
} |
||||
|
return rowsAffected; |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getPendingDataByIds(List<Integer> ids) { |
||||
|
// Construct the SQL query with placeholders for the number of IDs |
||||
|
String inSql = String.join(",", Collections.nCopies(ids.size(), "?")); |
||||
|
String SqlQuery = "SELECT data_id, field_1 as id, field_2 as name, field_3 as address, field_4 as dues, field_5 as cellnumber,field_6 as viewdetails,field_14 as call_status,field_15 as remarks " + |
||||
|
"FROM gcc_1913_campaign.upload_data " + |
||||
|
"WHERE data_id IN (" + inSql + ") " + |
||||
|
"AND field_14 IN ('UNATTENDED', 'CALL_BACK_LATER')"; |
||||
|
|
||||
|
// Convert the list of ids to an Object array |
||||
|
return jdbcTemplate.queryForList(SqlQuery, ids.toArray()); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getAgentsNameById(List<Integer> agentIds) |
||||
|
{ |
||||
|
String inSql = String.join(",", Collections.nCopies(agentIds.size(), "?")); |
||||
|
String SqlQuery ="select agent_name,agent_id from gcc_1913_qaqc.agents_list where agent_id IN (" + inSql + ")"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(SqlQuery, agentIds.toArray()); |
||||
|
|
||||
|
} |
||||
|
//agents performance |
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getDataDetailsById(List<Integer> dataIds) |
||||
|
{ |
||||
|
if (dataIds.isEmpty()) { |
||||
|
// Handle the case where dataIds is empty to avoid SQL syntax error. |
||||
|
throw new IllegalArgumentException("The dataIds list is empty, cannot execute query."); |
||||
|
} |
||||
|
|
||||
|
String inSql = String.join(",", Collections.nCopies(dataIds.size(), "?")); |
||||
|
String SqlQuery ="SELECT\r\n" |
||||
|
+ " COUNT(*) AS Assigned_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 IS NOT NULL THEN 1 END) AS Complete_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 IS NULL THEN 1 END) AS Pending_count ,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 = 'INFORMATION_GIVEN' THEN 1 END) AS Information_Given_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 = 'UNATTENDED' THEN 1 END) AS Unattended_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 = 'CALL_BACK_LATER' THEN 1 END) AS Call_back_later_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 = 'SWITCH_OFF' THEN 1 END) AS Switch_off_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 = 'WRONG_NUMBER' THEN 1 END) AS Wrong_number_count,\r\n" |
||||
|
+ " CASE WHEN COUNT(*) = 0 THEN 0 ELSE ROUND((COUNT(CASE WHEN field_14 IS NOT NULL THEN 1 END) * 100.0 / COUNT(*)), 0)END AS Percentage\r\n" |
||||
|
+ "FROM gcc_1913_campaign.upload_data\r\n" |
||||
|
+ "WHERE data_id IN (" + inSql + ")"; |
||||
|
|
||||
|
|
||||
|
|
||||
|
List<Map<String, Object>> results = jdbcTemplate.queryForList(SqlQuery, dataIds.toArray()); |
||||
|
return results; |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getCompletedDataDetailsById(List<Integer> CdataIds) |
||||
|
{ |
||||
|
if (CdataIds.isEmpty()) { |
||||
|
// Handle the case where dataIds is empty to avoid SQL syntax error. |
||||
|
throw new IllegalArgumentException("The CdataIds list is empty, cannot execute query."); |
||||
|
} |
||||
|
|
||||
|
String inSql = String.join(",", Collections.nCopies(CdataIds.size(), "?")); |
||||
|
String SqlQuery ="SELECT\r\n" |
||||
|
+ " data_id,\r\n" // Add data_id to the result |
||||
|
+ " COUNT(*) AS Assigned_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 IS NOT NULL THEN 1 END) AS Complete_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 IS NULL THEN 1 END) AS Pending_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 = 'INFORMATION_GIVEN' THEN 1 END) AS Information_Given_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 = 'UNATTENDED' THEN 1 END) AS Unattended_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 = 'CALL_BACK_LATER' THEN 1 END) AS Call_back_later_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 = 'SWITCH_OFF' THEN 1 END) AS Switch_off_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN field_14 = 'WRONG_NUMBER' THEN 1 END) AS Wrong_number_count,\r\n" |
||||
|
+ " CASE WHEN COUNT(*) = 0 THEN 0 ELSE ROUND((COUNT(CASE WHEN field_14 IS NOT NULL THEN 1 END) * 100.0 / COUNT(*)), 0) END AS Percentage\r\n" |
||||
|
+ "FROM gcc_1913_campaign.upload_data\r\n" |
||||
|
+ "WHERE data_id IN (" + inSql + ")\r\n" |
||||
|
+ "GROUP BY data_id"; // Group by data_id |
||||
|
|
||||
|
return jdbcTemplate.queryForList(SqlQuery, CdataIds.toArray()); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String,Object>> getCompletedDataById(List<Integer> completedDataIds) |
||||
|
{ |
||||
|
if (completedDataIds.isEmpty()) { |
||||
|
// Handle the case where dataIds is empty to avoid SQL syntax error. |
||||
|
throw new IllegalArgumentException("The completedDataIds list is empty, cannot execute query."); |
||||
|
} |
||||
|
|
||||
|
String inSql = String.join(",", Collections.nCopies(completedDataIds.size(), "?")); |
||||
|
String SqlQuery = "SELECT field_1 as id, field_2 as name, field_3 as address, " + |
||||
|
"field_5 as cellnumber, field_14 as call_status, updated_date as updated_date,field_15 as remarks, " + |
||||
|
"(SELECT COUNT(data_id) FROM call_logs WHERE data_id = upload_data.data_id) as call_count " + |
||||
|
"FROM gcc_1913_campaign.upload_data " + |
||||
|
"WHERE data_id IN (" + inSql + ")"; |
||||
|
|
||||
|
|
||||
|
return jdbcTemplate.queryForList(SqlQuery, completedDataIds.toArray()); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public void addAgentsForCampaign(int selectedAgentId, int categoryId, int campaignId) { |
||||
|
String checkSql = "SELECT COUNT(*) FROM gcc_1913_campaign.agent_assign " |
||||
|
+ "WHERE agent_id = ? AND category_id = ? AND campaign_id = ?"; |
||||
|
|
||||
|
String insertSql = "INSERT INTO gcc_1913_campaign.agent_assign (agent_id, category_id, campaign_id) VALUES (?, ?, ?)"; |
||||
|
|
||||
|
try { |
||||
|
// Check if the record already exists |
||||
|
int count = jdbcTemplate.queryForObject(checkSql, Integer.class, selectedAgentId, categoryId, campaignId); |
||||
|
|
||||
|
if (count == 0) { |
||||
|
// Insert only if no existing record found |
||||
|
int rowsInserted = jdbcTemplate.update(insertSql, selectedAgentId, categoryId, campaignId); |
||||
|
|
||||
|
if (rowsInserted > 0) { |
||||
|
System.out.println("Successfully inserted agent ID " + selectedAgentId + " into campaign ID " + campaignId); |
||||
|
} else { |
||||
|
System.out.println("No rows inserted for agent ID " + selectedAgentId); |
||||
|
} |
||||
|
} else { |
||||
|
System.out.println("Agent ID " + selectedAgentId + " is already assigned to campaign ID " + campaignId); |
||||
|
} |
||||
|
|
||||
|
} catch (DataAccessException | NumberFormatException ex) { |
||||
|
System.err.println("Error inserting data: " + ex.getMessage()); |
||||
|
throw new RuntimeException("Failed to insert agents for campaign. Please try again.", ex); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public void updateAgentForCampaign(int selectedAgentId, int categoryId, int campaignId,int DataId) { |
||||
|
String updateSql = "UPDATE gcc_1913_campaign.upload_data SET agent_id = ? WHERE campaign_id = ? AND category_id = ? AND data_id=?"; |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
int rowsUpdated = jdbcTemplate.update(updateSql, selectedAgentId,campaignId,categoryId,DataId); |
||||
|
|
||||
|
/* if (rowsUpdated > 0) { |
||||
|
System.out.println("Successfully updated agent ID in upload_data== " + selectedAgentId + " for campaign ID " + campaignId); |
||||
|
} else { |
||||
|
System.out.println("No rows updated for agent ID " + selectedAgentId); |
||||
|
}*/ |
||||
|
|
||||
|
} catch (DataAccessException | NumberFormatException ex) { |
||||
|
System.err.println("Error updating data: " + ex.getMessage()); |
||||
|
throw new RuntimeException("Failed to update agents for campaign. Please try again.", ex); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Integer> getDataIdForFurtherAssign(int categoryId, int campaignId) { |
||||
|
|
||||
|
String sql = "SELECT data_id FROM gcc_1913_campaign.upload_data " |
||||
|
+ "WHERE category_id = ? " |
||||
|
+ "AND campaign_id = ? " |
||||
|
+ "AND is_processed = 0 " |
||||
|
+ "ORDER BY data_id"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sql, Integer.class, categoryId, campaignId); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public void resetAgentAssignmentForNextDay(int categoryId, int campaignId) { |
||||
|
String sql = "UPDATE gcc_1913_campaign.upload_data " |
||||
|
+ "SET agent_id = NULL, " |
||||
|
+ " call_status = NULL, " |
||||
|
+ " remarks = NULL, " |
||||
|
+ " updated_agent_id = NULL, " |
||||
|
+ " updated_date = NULL, " |
||||
|
+ " is_processed = 0 " |
||||
|
+ "WHERE category_id = ? " |
||||
|
+ " AND campaign_id = ? " |
||||
|
+ " AND call_status IN ('CALL BACK LATER', 'UNATTENDED')"; |
||||
|
|
||||
|
jdbcTemplate.update(sql, categoryId, campaignId); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
//////////////////////Ajith code/////////////////// |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getFilteredFields(int categoryId, int agentId, int dataId) { |
||||
|
List<Map<String, Object>> resultList = new ArrayList<>(); |
||||
|
|
||||
|
// Fetch ordered field column names |
||||
|
String fetchColumnsSQL = "SELECT COLUMN_NAME " + |
||||
|
"FROM INFORMATION_SCHEMA.COLUMNS " + |
||||
|
"WHERE TABLE_SCHEMA = 'gcc_1913_campaign' " + |
||||
|
"AND TABLE_NAME = 'upload_data' " + |
||||
|
"AND COLUMN_NAME LIKE 'field_%' " + |
||||
|
"ORDER BY CAST(SUBSTRING(COLUMN_NAME, 7) AS UNSIGNED)"; |
||||
|
|
||||
|
List<String> fieldColumns = jdbcTemplate.queryForList(fetchColumnsSQL, String.class); |
||||
|
|
||||
|
if (fieldColumns.isEmpty()) { |
||||
|
throw new RuntimeException("No matching columns found"); |
||||
|
} |
||||
|
|
||||
|
// Fetch ordered fields data |
||||
|
String query1 = "SELECT " + String.join(", ", fieldColumns) + " FROM gcc_1913_campaign.upload_data WHERE data_id = ?"; |
||||
|
List<Map<String, Object>> orderedFieldsList = jdbcTemplate.queryForList(query1, dataId); |
||||
|
|
||||
|
if (orderedFieldsList.isEmpty()) { |
||||
|
throw new RuntimeException("No data found for data_id: " + dataId); |
||||
|
} |
||||
|
|
||||
|
Map<String, Object> orderedFields = orderedFieldsList.get(0); |
||||
|
|
||||
|
// Fetch category columns |
||||
|
String query2 = "SELECT column_name FROM gcc_1913_campaign.category_columns WHERE category_id = ? and isactive=1 "; |
||||
|
List<String> categoryColumns = new ArrayList<>(jdbcTemplate.queryForList(query2, String.class, categoryId)); |
||||
|
//System.out.println("service===="+categoryColumns); |
||||
|
|
||||
|
if (categoryColumns.isEmpty()) { |
||||
|
throw new RuntimeException("No category columns found for category_id: " + categoryId); |
||||
|
} |
||||
|
|
||||
|
int categoryCount = categoryColumns.size(); |
||||
|
|
||||
|
// Collect first 'categoryCount' non-null values from orderedFields |
||||
|
List<Object> nonNullValues = new ArrayList<>(); |
||||
|
for (String field : fieldColumns) { |
||||
|
Object value = orderedFields.get(field); |
||||
|
if (value != null) { |
||||
|
nonNullValues.add(value); |
||||
|
if (nonNullValues.size() == categoryCount) { |
||||
|
break; // Stop after collecting required count |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (nonNullValues.size() < categoryCount) { |
||||
|
throw new RuntimeException("Not enough non-null values to match category columns"); |
||||
|
} |
||||
|
|
||||
|
// Map category columns to non-null ordered field values |
||||
|
Map<String, Object> finalMapping = new HashMap<>(); |
||||
|
for (int i = 0; i < categoryCount; i++) { |
||||
|
finalMapping.put(categoryColumns.get(i), nonNullValues.get(i)); |
||||
|
} |
||||
|
|
||||
|
resultList.add(finalMapping); |
||||
|
return resultList; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getCampaignQuestions(int categoryId, int campaignId) { |
||||
|
// Fetch questions along with answer type |
||||
|
// String questionQuery = "SELECT cq.*, at.type_name " + |
||||
|
// "FROM gcc_1913_campaign.campaign_questions cq " + |
||||
|
// "JOIN gcc_1913_campaign.answer_type at " + |
||||
|
// "ON cq.answer_type_id = at.answer_type_id " + |
||||
|
// |
||||
|
// "WHERE cq.category_id = ? AND cq.campaign_id = ? "; |
||||
|
|
||||
|
String questionQuery="SELECT cq.questions AS questions, \r\n" |
||||
|
+ " MIN(cq.question_id) AS question_id, \r\n" |
||||
|
+ " MIN(cq.category_id) AS category_id, \r\n" |
||||
|
+ " MIN(cq.campaign_id) AS campaign_id, \r\n" |
||||
|
+ " MIN(cq.answer_type_id) AS answer_type_id, \r\n" |
||||
|
+ " MIN(cat.type_name) AS type_name \r\n" |
||||
|
+ "FROM gcc_1913_campaign.campaign_questions cq \r\n" |
||||
|
+ "JOIN gcc_1913_campaign.answer_type cat \r\n" |
||||
|
+ " ON cq.answer_type_id = cat.answer_type_id \r\n" |
||||
|
+ "WHERE cq.category_id = ? \r\n" |
||||
|
+ "AND cq.campaign_id = ? \r\n" |
||||
|
+ "AND cq.isactive = 1\r\n" |
||||
|
+ "GROUP BY cq.questions\r\n" |
||||
|
+ "ORDER BY MIN(cq.question_id)"; |
||||
|
|
||||
|
List<Map<String, Object>> questions = jdbcTemplate.queryForList(questionQuery, categoryId, campaignId); |
||||
|
|
||||
|
// Iterate over each question and fetch answers |
||||
|
for (Map<String, Object> question : questions) { |
||||
|
int questionId = (int) question.get("question_id"); |
||||
|
|
||||
|
// String answerQuery = "SELECT campaign_answer FROM gcc_1913_campaign.campaign_answers " + |
||||
|
// "WHERE question_id = ?"; |
||||
|
|
||||
|
String answerQuery="SELECT distinct(question_id) as qid, campaign_answer, created_date FROM gcc_1913_campaign.campaign_answers\r\n" |
||||
|
+ "WHERE question_id = ?"; |
||||
|
|
||||
|
List<Map<String, Object>> answers = jdbcTemplate.queryForList(answerQuery, questionId); |
||||
|
/* |
||||
|
// Extract answer values and add to the question map |
||||
|
List<String> answerList = answers.stream() |
||||
|
.map(a -> (String) a.get("campaign_answer")) |
||||
|
.collect(Collectors.toList()); |
||||
|
*/ |
||||
|
List<String> answerList = new ArrayList<String>(); |
||||
|
|
||||
|
for (Map<String, Object> a : answers) { |
||||
|
Object ansObj = a.get("campaign_answer"); |
||||
|
if (ansObj != null) { |
||||
|
answerList.add(ansObj.toString()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
question.put("answers", answerList); |
||||
|
} |
||||
|
|
||||
|
return questions; |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> FetchAnswer(int campaignId,int agentId,int questionId,int dataId) { |
||||
|
String sqlQuery = "SELECT distinct(campaign_answer) FROM gcc_1913_campaign.questions_answers where campaign_id=? and agent_id=? and question_id=? and data_id=?; "; |
||||
|
//System.out.println("dropdown l"); |
||||
|
return jdbcTemplate.queryForList(sqlQuery,campaignId,agentId,questionId,dataId); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public void saveAnswers(List<Map<String, Object>> answers) { |
||||
|
String sql = "INSERT INTO gcc_1913_campaign.questions_answers " + |
||||
|
"(campaign_id, data_id, agent_id, question_id, campaign_answer, created_date) " + |
||||
|
"VALUES (?, ?, ?, ?, ?, NOW())"; |
||||
|
|
||||
|
for (Map<String, Object> answer : answers) { |
||||
|
jdbcTemplate.update(sql, |
||||
|
answer.get("campaign_id"), |
||||
|
answer.get("data_id"), |
||||
|
answer.get("agent_id"), |
||||
|
answer.get("question_id"), |
||||
|
answer.get("campaign_answer") |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getCallStatus() { |
||||
|
String sqlQuery = "SELECT * FROM gcc_1913_campaign.calls_status "; |
||||
|
//System.out.println("dropdown l"); |
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> checkCounts(int campaignId, int dataId) { |
||||
|
// Query to get the count of answered questions for a given dataId |
||||
|
String answersCountQuery = "SELECT COUNT(distinct(question_id)) AS answersCount FROM gcc_1913_campaign.questions_answers WHERE data_id = ?"; |
||||
|
|
||||
|
// Query to get the count of required questions for a given campaignId |
||||
|
String questionsCountQuery = "SELECT COUNT(distinct(questions)) AS questionsCount FROM gcc_1913_campaign.campaign_questions WHERE campaign_id = ?"; |
||||
|
|
||||
|
// Execute queries |
||||
|
int answersCount = jdbcTemplate.queryForObject(answersCountQuery, Integer.class, dataId); |
||||
|
int questionsCount = jdbcTemplate.queryForObject(questionsCountQuery, Integer.class, campaignId); |
||||
|
|
||||
|
// Construct response as a list of maps |
||||
|
return List.of(Map.of( |
||||
|
"answersCount", answersCount, |
||||
|
"questionsCount", questionsCount |
||||
|
)); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getAgentsALLCampaignsList(int agent_id) { |
||||
|
String SqlQuery = "SELECT * FROM gcc_1913_campaign.upload_data ud inner join gcc_1913_campaign.campaign_request cr on ud.campaign_id=cr.campaign_id where cr.campaign_status='ONGOING'"+ |
||||
|
" and ud.agent_id = ? and ud.is_processed=0 "; |
||||
|
//System.out.println("text"); |
||||
|
return jdbcTemplate.queryForList(SqlQuery,agent_id); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getAgentsALLCampaignsList1(int agent_id) { |
||||
|
String SqlQuery = "SELECT * FROM gcc_1913_campaign.upload_data ud inner join gcc_1913_campaign.campaign_request cr on ud.campaign_id=cr.campaign_id where cr.campaign_status='ONGOING'"+ |
||||
|
" and ud.agent_id = ? and ud.is_processed=1"; |
||||
|
// System.out.println("text"); |
||||
|
return jdbcTemplate.queryForList(SqlQuery,agent_id); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getAgentsALLCampaigns(int agent_id) { |
||||
|
String SqlQuery = "SELECT c.category_name,cr.*,\r\n" |
||||
|
+ "(SELECT COUNT(data_id)\r\n" |
||||
|
+ "FROM gcc_1913_campaign.upload_data up\r\n" |
||||
|
+ "WHERE up.agent_id = aa.agent_id \r\n" |
||||
|
+ "AND up.campaign_id = cr.campaign_id\r\n" |
||||
|
+ ") AS calls_assigned,\r\n" |
||||
|
+ "(SELECT COUNT(CASE WHEN up.call_status IS NOT NULL THEN 1 END) \r\n" |
||||
|
+ "FROM gcc_1913_campaign.upload_data up \r\n" |
||||
|
+ "WHERE up.agent_id = aa.agent_id \r\n" |
||||
|
+ "AND up.campaign_id = cr.campaign_id\r\n" |
||||
|
+ ") AS complete_count,\r\n" |
||||
|
+ "(SELECT COUNT(CASE WHEN up.call_status IS NULL THEN 1 END) \r\n" |
||||
|
+ "FROM gcc_1913_campaign.upload_data up \r\n" |
||||
|
+ "WHERE up.agent_id = aa.agent_id \r\n" |
||||
|
+ "AND up.campaign_id = cr.campaign_id\r\n" |
||||
|
+ ") AS pending_count\r\n" |
||||
|
+ "FROM gcc_1913_campaign.agent_assign aa\r\n" |
||||
|
+ "JOIN gcc_1913_campaign.campaign_request cr ON cr.campaign_id=aa.campaign_id\r\n" |
||||
|
+ "JOIN gcc_1913_campaign.category c ON c.category_id=cr.category_id\r\n" |
||||
|
+ "WHERE cr.campaign_status='ONGOING' AND aa.isactive=1 AND cr.isactive=1 AND aa.agent_id=?"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(SqlQuery,agent_id); |
||||
|
} |
||||
|
|
||||
|
// public List<Map<String, Object>> getCallCategories() |
||||
|
// { |
||||
|
// String query = "SELECT id,call_status FROM gcc_1913_campaign.calls_status WHERE isactive=1 AND isdelete=0"; |
||||
|
// return jdbcTemplate.queryForList(query); |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,116 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.service; |
||||
|
|
||||
|
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.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
public class AttendanceService { |
||||
|
|
||||
|
|
||||
|
// private JdbcTemplate jdbcTemplate; |
||||
|
// |
||||
|
// |
||||
|
// @Autowired |
||||
|
// public void setDataSource(@Qualifier("BiometricDataSource") DataSource dataSource) { |
||||
|
// this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
// } |
||||
|
// |
||||
|
// |
||||
|
// public List<Map<String, Object>> getAttendanceReport(String fromDate, String toDate) { |
||||
|
// String reportQuery; |
||||
|
// |
||||
|
// if (fromDate != null && toDate != null) { |
||||
|
// // Query with date filter if dates are provided |
||||
|
// reportQuery = "SELECT d.zone, d.division, b.user_id, b.user_name, f.departmentname, e.designation, " + |
||||
|
// "c.device_name, CAST(a.officepunch AS DATE) AS punch_date, MIN(a.OFFICEPUNCH) AS PUNCHIN, " + |
||||
|
// "CASE WHEN MAX(a.OFFICEPUNCH) = MIN(a.OFFICEPUNCH) THEN NULL ELSE MAX(a.OFFICEPUNCH) END AS PUNCHOUT " + |
||||
|
// "FROM machinerawpunch a, tbl_realtime_userinfo b, tbl_fkdevice_status c, zone_div_mast d, " + |
||||
|
// "tblemployee e, tbldepartment f " + |
||||
|
// "WHERE a.paycode = b.user_id AND a.deviceid = c.device_id AND c.device_name = d.devname " + |
||||
|
// "AND a.paycode = e.paycode AND e.departmentcode = f.departmentcode " + |
||||
|
// "AND CAST(a.officepunch AS DATE) BETWEEN ? AND ? " + |
||||
|
// "AND a.paycode LIKE '%19130%' " + |
||||
|
// "GROUP BY d.zone, d.division, b.user_id, b.user_name, f.departmentname, e.designation, " + |
||||
|
// "c.device_name, CAST(a.officepunch AS DATE) " + |
||||
|
// "ORDER BY d.zone, d.division, b.user_id, CAST(a.officepunch AS DATE)"; |
||||
|
// |
||||
|
// // Execute query with date parameters |
||||
|
// return jdbcTemplate.queryForList(reportQuery, fromDate, toDate); |
||||
|
// |
||||
|
// } else { |
||||
|
// // Query without date filter |
||||
|
// reportQuery = "SELECT d.zone, d.division, b.user_id, b.user_name, f.departmentname, e.designation, " + |
||||
|
// "c.device_name, CAST(a.officepunch AS DATE) AS punch_date, MIN(a.OFFICEPUNCH) AS PUNCHIN, " + |
||||
|
// "CASE WHEN MAX(a.OFFICEPUNCH) = MIN(a.OFFICEPUNCH) THEN NULL ELSE MAX(a.OFFICEPUNCH) END AS PUNCHOUT " + |
||||
|
// "FROM machinerawpunch a, tbl_realtime_userinfo b, tbl_fkdevice_status c, zone_div_mast d, " + |
||||
|
// "tblemployee e, tbldepartment f " + |
||||
|
// "WHERE a.paycode = b.user_id AND a.deviceid = c.device_id AND c.device_name = d.devname " + |
||||
|
// "AND a.paycode = e.paycode AND e.departmentcode = f.departmentcode " + |
||||
|
// "AND a.paycode LIKE '%19130%' " + |
||||
|
// "GROUP BY d.zone, d.division, b.user_id, b.user_name, f.departmentname, e.designation, " + |
||||
|
// "c.device_name, CAST(a.officepunch AS DATE) " + |
||||
|
// "ORDER BY d.zone, d.division, b.user_id, CAST(a.officepunch AS DATE)"; |
||||
|
// |
||||
|
// // Execute query without date parameters |
||||
|
// return jdbcTemplate.queryForList(reportQuery); |
||||
|
// } |
||||
|
// } |
||||
|
// |
||||
|
// |
||||
|
// |
||||
|
//// public List<Map<String, Object>> getAttendanceReport(String fromDate, String toDate) { |
||||
|
//// System.out.println("Service Layer: Generating attendance report"); |
||||
|
//// |
||||
|
//// String reportQuery = "SELECT d.zone, d.division, b.user_id, b.user_name, f.departmentname, e.designation, c.device_name, " + |
||||
|
//// "CAST(a.officepunch AS DATE) AS punch_date, MIN(a.OFFICEPUNCH) AS PUNCHIN, " + |
||||
|
//// "CASE WHEN MAX(a.OFFICEPUNCH) = MIN(a.OFFICEPUNCH) THEN NULL ELSE MAX(a.OFFICEPUNCH) END AS PUNCHOUT " + |
||||
|
//// "FROM machinerawpunch a, tbl_realtime_userinfo b, tbl_fkdevice_status c, zone_div_mast d, " + |
||||
|
//// "tblemployee e, tbldepartment f " + |
||||
|
//// "WHERE a.paycode = b.user_id AND a.deviceid = c.device_id AND c.device_name = d.devname " + |
||||
|
//// "AND a.paycode = e.paycode AND e.departmentcode = f.departmentcode "; |
||||
|
//// |
||||
|
//// // Dynamic date filter |
||||
|
//// if (fromDate != null && toDate != null) { |
||||
|
//// reportQuery += "AND CAST(a.officepunch AS DATE) BETWEEN ? AND ? "; |
||||
|
//// } else if (fromDate != null) { |
||||
|
//// reportQuery += "AND CAST(a.officepunch AS DATE) = ? "; |
||||
|
//// } else { |
||||
|
//// throw new IllegalArgumentException("fromDate or toDate must be provided"); |
||||
|
//// } |
||||
|
//// |
||||
|
//// reportQuery += "AND a.paycode LIKE '%19130%' " + |
||||
|
//// "GROUP BY d.zone, d.division, b.user_id, b.user_name, f.departmentname, e.designation, c.device_name, " + |
||||
|
//// "CAST(a.officepunch AS DATE) " + |
||||
|
//// "ORDER BY d.zone, d.division, b.user_id, CAST(a.officepunch AS DATE)"; |
||||
|
//// |
||||
|
//// // Execute query based on dates |
||||
|
//// if (fromDate != null && toDate != null) { |
||||
|
//// return jdbcTemplate.queryForList(reportQuery, fromDate, toDate); |
||||
|
//// } else { |
||||
|
//// return jdbcTemplate.queryForList(reportQuery, fromDate); |
||||
|
//// } |
||||
|
//// } |
||||
|
// |
||||
|
//// public List<Map<String, Object>> getAttendanceReport() { |
||||
|
//// System.out.println("check 2"); |
||||
|
//// String reportQuery ="SELECT d.zone,d.division,b.user_id,b.user_name,f.departmentname,e.designation,c.device_name,CAST(a.officepunch AS DATE) as punch_date,MIN(a.OFFICEPUNCH) AS PUNCHIN,\r\n" |
||||
|
//// + "CASE WHEN MAX(a.OFFICEPUNCH) = MIN(a.OFFICEPUNCH) THEN NULL ELSE MAX(a.OFFICEPUNCH) END AS PUNCHOUT FROM machinerawpunch a,tbl_realtime_userinfo b,tbl_fkdevice_status c,\r\n" |
||||
|
//// + "zone_div_mast d,tblemployee e,tbldepartment f WHERE a.paycode = b.user_id AND a.deviceid = c.device_id AND c.device_name = d.devname AND a.paycode = e.paycode AND \r\n" |
||||
|
//// + "e.departmentcode = f.departmentcode AND CAST(officepunch AS DATE) BETWEEN '2024-10-01' AND '2024-10-10'\r\n" |
||||
|
//// + "AND a.paycode LIKE '%19130%' \r\n" |
||||
|
//// + "GROUP BY d.zone,d.division,b.user_id,b.user_name,f.departmentname,e.designation,c.device_name,CAST(a.officepunch AS DATE)\r\n" |
||||
|
//// + "ORDER BY d.zone,d.division,b.user_id,CAST(a.officepunch AS DATE)"; |
||||
|
//// System.out.println("check 3"); |
||||
|
//// List<Map<String,Object>> reports = jdbcTemplate.queryForList(reportQuery); |
||||
|
//// System.out.println("check 4"); |
||||
|
//// return reports; |
||||
|
//// } |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,29 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.service; |
||||
|
|
||||
|
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.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
public class CampaignDropdownApiService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913CampaignDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String,Object>> getAnswerTypes(){ |
||||
|
String sql = "SELECT answer_type_id,type_name FROM answer_type"; |
||||
|
return jdbcTemplate.queryForList(sql); |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,533 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.service; |
||||
|
|
||||
|
import java.io.PrintWriter; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.LinkedHashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
public class CampaignReportService { |
||||
|
|
||||
|
|
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSourcemysql(@Qualifier("mysql1913CampaignDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource2(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getCampaignData(String startDate, String endDate) { |
||||
|
StringBuilder query = new StringBuilder( |
||||
|
"SELECT " + |
||||
|
" cr.campaign_id, " + |
||||
|
" cr.category_id, " + |
||||
|
" cr.campaign_name, " + |
||||
|
" cc.category_name, " + |
||||
|
" cr.start_date, " + |
||||
|
" cr.end_date, " + |
||||
|
" COUNT(ud.campaign_id) AS total_count, " + |
||||
|
" COUNT(ud.agent_id) AS assigned_count, " + |
||||
|
" COUNT(ud.campaign_id) - COUNT(ud.agent_id) AS not_assigned_count, " + |
||||
|
" COUNT(CASE WHEN ud.call_status = 'INFORMATION GIVEN' THEN 1 ELSE NULL END) AS informationgiven_count, " + |
||||
|
" COUNT(CASE WHEN ud.call_status = 'CALL BACK LATER' THEN 1 ELSE NULL END) AS callback_count, " + |
||||
|
" COUNT(CASE WHEN ud.call_status = 'UNATTENDED' THEN 1 ELSE NULL END) AS unattended_count, " + |
||||
|
" COUNT(CASE WHEN ud.call_status = 'SWITCH OFF' THEN 1 ELSE NULL END) AS switchoff_count, " + |
||||
|
" COUNT(CASE WHEN ud.call_status = 'WRONG NUMBER' THEN 1 ELSE NULL END) AS wrongnumber_count " + |
||||
|
"FROM gcc_1913_campaign.campaign_request cr " + |
||||
|
"JOIN gcc_1913_campaign.upload_data ud ON cr.campaign_id = ud.campaign_id " + |
||||
|
"JOIN gcc_1913_campaign.category cc ON cr.category_id = cc.category_id " + |
||||
|
"WHERE cr.campaign_status IN ('ONGOING', 'CLOSED') " + |
||||
|
"AND ud.agent_id IS NOT NULL " |
||||
|
); |
||||
|
|
||||
|
// Apply date filter dynamically if dates are provided |
||||
|
if (startDate != null && endDate != null) { |
||||
|
query.append("AND DATE(cr.created_date) BETWEEN ? AND ? "); |
||||
|
} |
||||
|
|
||||
|
query.append("GROUP BY cr.campaign_id "); |
||||
|
query.append("ORDER BY cr.campaign_id DESC"); |
||||
|
|
||||
|
// Execute query with or without parameters |
||||
|
if (startDate != null && endDate != null) { |
||||
|
return jdbcTemplate.queryForList(query.toString(), startDate, endDate); |
||||
|
} else { |
||||
|
return jdbcTemplate.queryForList(query.toString()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getAgentwiseData(String campaignId) { |
||||
|
String query = "SELECT aa.agent_id, al.agent_name, \r\n" |
||||
|
+ " COUNT(ud.agent_id) AS assigned_count, \r\n" |
||||
|
+ " COUNT(CASE WHEN ud.is_processed = 1 THEN 1 ELSE NULL END) AS completed_count, \r\n" |
||||
|
+ " COUNT(ud.agent_id) - COUNT(CASE WHEN ud.is_processed = 1 THEN 1 ELSE NULL END) AS pending_count, \r\n" |
||||
|
+ " COUNT(CASE WHEN ud.call_status = 'INFORMATION GIVEN' THEN 1 ELSE NULL END) AS informationgiven_count, \r\n" |
||||
|
+ " COUNT(CASE WHEN ud.call_status = 'CALL BACK LATER' THEN 1 ELSE NULL END) AS callback_count, \r\n" |
||||
|
+ " COUNT(CASE WHEN ud.call_status = 'UNATTENDED' THEN 1 ELSE NULL END) AS unattended_count, \r\n" |
||||
|
+ " COUNT(CASE WHEN ud.call_status = 'SWITCH OFF' THEN 1 ELSE NULL END) AS switchoff_count, \r\n" |
||||
|
+ " COUNT(CASE WHEN ud.call_status = 'WRONG NUMBER' THEN 1 ELSE NULL END) AS wrongnumber_count, \r\n" |
||||
|
+ " CASE \r\n" |
||||
|
+ " WHEN COUNT(ud.agent_id) = 0 THEN 0 \r\n" |
||||
|
+ " ELSE FLOOR((COUNT(CASE WHEN ud.is_processed = 1 THEN 1 ELSE NULL END) * 100) / COUNT(ud.agent_id))\r\n" |
||||
|
+ " END AS completed_percentage\r\n" |
||||
|
+ "FROM gcc_1913_campaign.agent_assign aa \r\n" |
||||
|
+ "JOIN gcc_1913_qaqc.agents_list al ON al.agent_id = aa.agent_id \r\n" |
||||
|
+ "JOIN gcc_1913_campaign.upload_data ud ON ud.agent_id = aa.agent_id AND ud.campaign_id = aa.campaign_id\r\n" |
||||
|
+ "WHERE aa.campaign_id = ? AND aa.isactive = 1 AND aa.isdelete = 0 AND ud.agent_id IS NOT NULL \r\n" |
||||
|
+ "GROUP BY aa.agent_id, al.agent_name \r\n" |
||||
|
+ "ORDER BY aa.agent_id"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query, campaignId); |
||||
|
} |
||||
|
|
||||
|
//report for campaign details |
||||
|
public List<Map<String, Object>> getAgentReportCampaignId(String campaignId) { |
||||
|
String query = "SELECT cr.category_id,cr.campaign_id, cc.category_name, \r\n" |
||||
|
+ " cr.start_date, cr.end_date, \r\n" |
||||
|
+ " cr.description, date (cr.created_date) as created_date \r\n" |
||||
|
+ " FROM gcc_1913_campaign.category cc \r\n" |
||||
|
+ " join gcc_1913_campaign.campaign_request cr on cr.category_id = cc.category_id \r\n" |
||||
|
+ " where cr.campaign_id = ?;"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query, campaignId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
//get campaignname |
||||
|
public String getCampaignName(int campaignId) { |
||||
|
String query = "SELECT campaign_name FROM gcc_1913_campaign.campaign_request WHERE campaign_id = ?"; |
||||
|
|
||||
|
return jdbcTemplate.queryForObject(query, String.class, campaignId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
//question and answers counts with percentage in report page method |
||||
|
|
||||
|
public List<Map<String, Object>> getQuestionAnswers(int campaignId) { |
||||
|
String sql = "SELECT cq.question_id, cq.questions, ca.campaign_answer," |
||||
|
+ " COUNT(qa.campaign_answer) AS answer_count," |
||||
|
+ " FLOOR(" |
||||
|
+ " IFNULL((COUNT(qa.campaign_answer) / NULLIF(total_info.total_information_given, 0)) * 100, 0)" |
||||
|
+ " ) AS answer_percentage" |
||||
|
+ " FROM " |
||||
|
+ " gcc_1913_campaign.campaign_questions cq" |
||||
|
+ " JOIN " |
||||
|
+ " gcc_1913_campaign.campaign_answers ca " |
||||
|
+ " ON cq.question_id = ca.question_id AND cq.campaign_id = ca.campaign_id" |
||||
|
+ " LEFT JOIN " |
||||
|
+ " gcc_1913_campaign.questions_answers qa " |
||||
|
+ " ON cq.question_id = qa.question_id " |
||||
|
+ " AND ca.campaign_answer = qa.campaign_answer " |
||||
|
+ " AND cq.campaign_id = qa.campaign_id" |
||||
|
+ " LEFT JOIN (" |
||||
|
+ " SELECT campaign_id, COUNT(*) AS total_information_given" |
||||
|
+ " FROM gcc_1913_campaign.upload_data " |
||||
|
+ " WHERE call_status = 'INFORMATION GIVEN'" |
||||
|
+ " GROUP BY campaign_id" |
||||
|
+ " ) AS total_info ON total_info.campaign_id = cq.campaign_id" |
||||
|
+ " WHERE " |
||||
|
+ " cq.campaign_id = ? " |
||||
|
+ " AND cq.isactive = 1 " |
||||
|
+ " AND cq.isdelete = 0" |
||||
|
+ " GROUP BY " |
||||
|
+ " cq.question_id, cq.questions, ca.campaign_answer, total_info.total_information_given" |
||||
|
+ " ORDER BY " |
||||
|
+ " cq.question_id"; |
||||
|
|
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, campaignId); |
||||
|
Map<Integer, Map<String, Object>> responseMap = new LinkedHashMap<>(); |
||||
|
|
||||
|
for (Map<String, Object> row : result) { |
||||
|
int questionId = (int) row.get("question_id"); |
||||
|
if (!responseMap.containsKey(questionId)) { |
||||
|
Map<String, Object> questionData = new HashMap<>(); |
||||
|
questionData.put("question_id", questionId); |
||||
|
questionData.put("questions", row.get("questions")); |
||||
|
questionData.put("answers", new ArrayList<>()); |
||||
|
responseMap.put(questionId, questionData); |
||||
|
} |
||||
|
|
||||
|
Map<String, Object> answerData = new HashMap<>(); |
||||
|
answerData.put("campaign_answer", row.get("campaign_answer")); |
||||
|
answerData.put("answer_count", row.get("answer_count")); |
||||
|
answerData.put("answer_percentage", row.get("answer_percentage")); |
||||
|
|
||||
|
((List<Map<String, Object>>) responseMap.get(questionId).get("answers")).add(answerData); |
||||
|
} |
||||
|
|
||||
|
return new ArrayList<>(responseMap.values()); |
||||
|
} |
||||
|
|
||||
|
// |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
// public void generateCSV(int categoryId, int campaignId, PrintWriter writer) { |
||||
|
// List<Map<String, Object>> resultList = new ArrayList<>(); |
||||
|
// |
||||
|
// // Fetch ordered field column names |
||||
|
// String fetchColumnsSQL = "SELECT COLUMN_NAME " + |
||||
|
// "FROM INFORMATION_SCHEMA.COLUMNS " + |
||||
|
// "WHERE TABLE_SCHEMA = 'gcc_1913_campaign' " + |
||||
|
// "AND TABLE_NAME = 'upload_data' " + |
||||
|
// "AND COLUMN_NAME LIKE 'field_%' " + |
||||
|
// "ORDER BY CAST(SUBSTRING(COLUMN_NAME, 7) AS UNSIGNED)"; |
||||
|
// |
||||
|
// List<String> fieldColumns = jdbcTemplate.queryForList(fetchColumnsSQL, String.class); |
||||
|
// |
||||
|
// if (fieldColumns.isEmpty()) { |
||||
|
// writer.println("No matching columns found"); |
||||
|
// return; |
||||
|
// } |
||||
|
// |
||||
|
// // Fetch ordered fields data based on campaign_id, including data_id, agent_id, and call_status |
||||
|
// String query1 = "SELECT data_id, " + String.join(", ", fieldColumns) + ", agent_id, call_status,remarks " + |
||||
|
// "FROM gcc_1913_campaign.upload_data WHERE campaign_id = ?"; |
||||
|
// |
||||
|
// List<Map<String, Object>> orderedFieldsList = jdbcTemplate.queryForList(query1, campaignId); |
||||
|
// |
||||
|
// if (orderedFieldsList.isEmpty()) { |
||||
|
// writer.println("No data found for campaign_id: " + campaignId); |
||||
|
// return; |
||||
|
// } |
||||
|
// |
||||
|
// // Fetch category columns |
||||
|
// String query2 = "SELECT column_name FROM gcc_1913_campaign.category_columns WHERE category_id = ? AND isactive=1"; |
||||
|
// List<String> categoryColumns = jdbcTemplate.queryForList(query2, String.class, categoryId); |
||||
|
// |
||||
|
// if (categoryColumns.isEmpty()) { |
||||
|
// writer.println("No category columns found for category_id: " + categoryId); |
||||
|
// return; |
||||
|
// } |
||||
|
// |
||||
|
// int categoryCount = categoryColumns.size(); |
||||
|
// |
||||
|
// // Fetch Agent Names from agent_id |
||||
|
// String fetchAgentSQL = "SELECT agent_id, agent_name FROM gcc_1913_qaqc.agents_list"; |
||||
|
// Map<Integer, String> agentMap = jdbcTemplate.query(fetchAgentSQL, rs -> { |
||||
|
// Map<Integer, String> map = new HashMap<>(); |
||||
|
// while (rs.next()) { |
||||
|
// map.put(rs.getInt("agent_id"), rs.getString("agent_name")); |
||||
|
// } |
||||
|
// return map; |
||||
|
// }); |
||||
|
// |
||||
|
// // Fetch Questions for given campaign_id |
||||
|
// String fetchQuestionsQuery = "SELECT question_id, questions FROM gcc_1913_campaign.campaign_questions WHERE campaign_id = ?"; |
||||
|
// Map<Integer, String> questionsMap = jdbcTemplate.query(fetchQuestionsQuery, rs -> { |
||||
|
// Map<Integer, String> map = new LinkedHashMap<>(); |
||||
|
// while (rs.next()) { |
||||
|
// map.put(rs.getInt("question_id"), rs.getString("questions")); |
||||
|
// } |
||||
|
// return map; |
||||
|
// }, campaignId); |
||||
|
// |
||||
|
// // Fetch Answers mapped to questions and grouped by data_id |
||||
|
// String fetchAnswersQuery = "SELECT data_id, question_id, campaign_answer FROM gcc_1913_campaign.questions_answers " + |
||||
|
// "WHERE campaign_id = ?"; |
||||
|
// Map<Integer, Map<Integer, String>> answersMap = jdbcTemplate.query(fetchAnswersQuery, rs -> { |
||||
|
// Map<Integer, Map<Integer, String>> map = new HashMap<>(); |
||||
|
// while (rs.next()) { |
||||
|
// int dataId = rs.getInt("data_id"); |
||||
|
// int questionId = rs.getInt("question_id"); |
||||
|
// String answer = rs.getString("campaign_answer"); |
||||
|
// |
||||
|
// map.computeIfAbsent(dataId, k -> new HashMap<>()).put(questionId, answer); |
||||
|
// } |
||||
|
// return map; |
||||
|
// }, campaignId); |
||||
|
// |
||||
|
// // Process each row and collect data |
||||
|
// for (Map<String, Object> orderedFields : orderedFieldsList) { |
||||
|
// List<Object> nonNullValues = new ArrayList<>(); |
||||
|
// for (String field : fieldColumns) { |
||||
|
// Object value = orderedFields.get(field); |
||||
|
// if (value != null) { |
||||
|
// nonNullValues.add(value); |
||||
|
// if (nonNullValues.size() == categoryCount) { |
||||
|
// break; // Stop after collecting required count |
||||
|
// } |
||||
|
// } |
||||
|
// } |
||||
|
// |
||||
|
// if (nonNullValues.size() < categoryCount) { |
||||
|
// continue; // Skip if not enough non-null values |
||||
|
// } |
||||
|
// |
||||
|
// Integer dataId = orderedFields.get("data_id") != null ? ((Number) orderedFields.get("data_id")).intValue() : null; |
||||
|
// |
||||
|
// // Map category columns to non-null ordered field values |
||||
|
// Map<String, Object> finalMapping = new LinkedHashMap<>(); |
||||
|
// |
||||
|
// // Add category columns |
||||
|
// for (int i = 0; i < categoryCount; i++) { |
||||
|
// finalMapping.put(categoryColumns.get(i), nonNullValues.get(i)); |
||||
|
// } |
||||
|
// |
||||
|
// // Add Questions and Corresponding Answers for this specific data_id |
||||
|
// Map<Integer, String> currentAnswers = answersMap.getOrDefault(dataId, new HashMap<>()); |
||||
|
// for (Map.Entry<Integer, String> entry : questionsMap.entrySet()) { |
||||
|
// Integer questionId = entry.getKey(); |
||||
|
// String questionText = entry.getValue(); |
||||
|
// String answer = currentAnswers.getOrDefault(questionId, "-"); // Default to "-" |
||||
|
// |
||||
|
// finalMapping.put(questionText, answer); |
||||
|
// } |
||||
|
// |
||||
|
// //Integer agentId = ((Number) orderedFields.get("agent_id")).intValue(); |
||||
|
// |
||||
|
// Integer agentId = orderedFields.get("agent_id") != null ? ((Number) orderedFields.get("agent_id")).intValue() : null; |
||||
|
// String agentName = agentMap.getOrDefault(agentId, "Not Assigned"); |
||||
|
// finalMapping.put("Agent Name", agentName); |
||||
|
// |
||||
|
// String callstatus = orderedFields.get("call_status") != null ? orderedFields.get("call_status").toString() : "-"; |
||||
|
// finalMapping.put("Call Status", callstatus); |
||||
|
// |
||||
|
// // Add Remarks |
||||
|
// String remarks = orderedFields.get("remarks") != null ? orderedFields.get("remarks").toString() : "-"; |
||||
|
// |
||||
|
// finalMapping.put("Remarks", remarks); |
||||
|
// |
||||
|
// resultList.add(finalMapping); |
||||
|
// } |
||||
|
// |
||||
|
// // Write CSV data |
||||
|
// if (resultList.isEmpty()) { |
||||
|
// writer.println("No Data Available"); |
||||
|
// return; |
||||
|
// } |
||||
|
// |
||||
|
// // Extract headers from the first row |
||||
|
// String headers = String.join(",", resultList.get(0).keySet()); |
||||
|
// writer.println(headers); |
||||
|
// |
||||
|
// // Write data rows |
||||
|
// for (Map<String, Object> rowData : resultList) { |
||||
|
// List<String> values = rowData.values().stream() |
||||
|
// .map(value -> value != null ? value.toString() : "") |
||||
|
// .collect(Collectors.toList()); |
||||
|
// writer.println(String.join(",", values)); |
||||
|
// } |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
// Method to escape CSV values |
||||
|
private String escapeCsvValue(String value) { |
||||
|
if (value == null) return ""; |
||||
|
|
||||
|
// If the value contains commas, double quotes, or newlines, wrap it in quotes and escape inner quotes |
||||
|
if (value.contains(",") || value.contains("\"") || value.contains("\n")) { |
||||
|
value = "\"" + value.replace("\"", "\"\"") + "\""; |
||||
|
} |
||||
|
return value; |
||||
|
} |
||||
|
|
||||
|
public void generateCSV(int categoryId, int campaignId, PrintWriter writer) { |
||||
|
List<Map<String, Object>> resultList = new ArrayList<>(); |
||||
|
|
||||
|
// Fetch ordered field column names |
||||
|
String fetchColumnsSQL = "SELECT COLUMN_NAME " + |
||||
|
"FROM INFORMATION_SCHEMA.COLUMNS " + |
||||
|
"WHERE TABLE_SCHEMA = 'gcc_1913_campaign' " + |
||||
|
"AND TABLE_NAME = 'upload_data' " + |
||||
|
"AND COLUMN_NAME LIKE 'field_%' " + |
||||
|
"ORDER BY CAST(SUBSTRING(COLUMN_NAME, 7) AS UNSIGNED)"; |
||||
|
|
||||
|
List<String> fieldColumns = jdbcTemplate.queryForList(fetchColumnsSQL, String.class); |
||||
|
|
||||
|
if (fieldColumns.isEmpty()) { |
||||
|
writer.println("No matching columns found"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// Fetch ordered fields data based on campaign_id, including data_id, agent_id, and call_status |
||||
|
String query1 = "SELECT data_id, " + String.join(", ", fieldColumns) + ", agent_id, call_status,remarks,DATE(updated_date) as updated_date " + |
||||
|
"FROM gcc_1913_campaign.upload_data WHERE campaign_id = ?"; |
||||
|
|
||||
|
List<Map<String, Object>> orderedFieldsList = jdbcTemplate.queryForList(query1, campaignId); |
||||
|
|
||||
|
if (orderedFieldsList.isEmpty()) { |
||||
|
writer.println("No data found for campaign_id: " + campaignId); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// Fetch category columns |
||||
|
String query2 = "SELECT column_name FROM gcc_1913_campaign.category_columns WHERE category_id = ? AND isactive=1"; |
||||
|
List<String> categoryColumns = jdbcTemplate.queryForList(query2, String.class, categoryId); |
||||
|
|
||||
|
if (categoryColumns.isEmpty()) { |
||||
|
writer.println("No category columns found for category_id: " + categoryId); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
int categoryCount = categoryColumns.size(); |
||||
|
|
||||
|
// Fetch Agent Names from agent_id |
||||
|
String fetchAgentSQL = "SELECT agent_id, agent_name FROM gcc_1913_qaqc.agents_list"; |
||||
|
Map<Integer, String> agentMap = jdbcTemplate.query(fetchAgentSQL, rs -> { |
||||
|
Map<Integer, String> map = new HashMap<>(); |
||||
|
while (rs.next()) { |
||||
|
map.put(rs.getInt("agent_id"), rs.getString("agent_name")); |
||||
|
} |
||||
|
return map; |
||||
|
}); |
||||
|
|
||||
|
// Fetch Questions for given campaign_id |
||||
|
String fetchQuestionsQuery = "SELECT question_id, questions FROM gcc_1913_campaign.campaign_questions WHERE campaign_id = ?"; |
||||
|
Map<Integer, String> questionsMap = jdbcTemplate.query(fetchQuestionsQuery, rs -> { |
||||
|
Map<Integer, String> map = new LinkedHashMap<>(); |
||||
|
while (rs.next()) { |
||||
|
map.put(rs.getInt("question_id"), rs.getString("questions")); |
||||
|
} |
||||
|
return map; |
||||
|
}, campaignId); |
||||
|
|
||||
|
// Fetch Answers mapped to questions and grouped by data_id |
||||
|
String fetchAnswersQuery = "SELECT data_id, question_id, campaign_answer FROM gcc_1913_campaign.questions_answers " + |
||||
|
"WHERE campaign_id = ?"; |
||||
|
Map<Integer, Map<Integer, String>> answersMap = jdbcTemplate.query(fetchAnswersQuery, rs -> { |
||||
|
Map<Integer, Map<Integer, String>> map = new HashMap<>(); |
||||
|
while (rs.next()) { |
||||
|
int dataId = rs.getInt("data_id"); |
||||
|
int questionId = rs.getInt("question_id"); |
||||
|
String answer = rs.getString("campaign_answer"); |
||||
|
|
||||
|
map.computeIfAbsent(dataId, k -> new HashMap<>()).put(questionId, answer); |
||||
|
} |
||||
|
return map; |
||||
|
}, campaignId); |
||||
|
|
||||
|
// Process each row and collect data |
||||
|
for (Map<String, Object> orderedFields : orderedFieldsList) { |
||||
|
List<Object> nonNullValues = new ArrayList<>(); |
||||
|
for (String field : fieldColumns) { |
||||
|
Object value = orderedFields.get(field); |
||||
|
if (value != null) { |
||||
|
nonNullValues.add(value); |
||||
|
if (nonNullValues.size() == categoryCount) { |
||||
|
break; // Stop after collecting required count |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (nonNullValues.size() < categoryCount) { |
||||
|
continue; // Skip if not enough non-null values |
||||
|
} |
||||
|
|
||||
|
Integer dataId = orderedFields.get("data_id") != null ? ((Number) orderedFields.get("data_id")).intValue() : null; |
||||
|
|
||||
|
// Map category columns to non-null ordered field values |
||||
|
Map<String, Object> finalMapping = new LinkedHashMap<>(); |
||||
|
|
||||
|
// Add category columns |
||||
|
for (int i = 0; i < categoryCount; i++) { |
||||
|
finalMapping.put(categoryColumns.get(i), nonNullValues.get(i)); |
||||
|
} |
||||
|
|
||||
|
// Add Questions and Corresponding Answers for this specific data_id |
||||
|
Map<Integer, String> currentAnswers = answersMap.getOrDefault(dataId, new HashMap<>()); |
||||
|
for (Map.Entry<Integer, String> entry : questionsMap.entrySet()) { |
||||
|
Integer questionId = entry.getKey(); |
||||
|
String questionText = entry.getValue(); |
||||
|
String answer = currentAnswers.getOrDefault(questionId, "-"); // Default to "-" |
||||
|
|
||||
|
finalMapping.put(questionText, answer); |
||||
|
} |
||||
|
|
||||
|
Integer agentId = orderedFields.get("agent_id") != null ? ((Number) orderedFields.get("agent_id")).intValue() : null; |
||||
|
String agentName = agentMap.getOrDefault(agentId, "Not Assigned"); |
||||
|
finalMapping.put("Agent Name", agentName); |
||||
|
|
||||
|
String callstatus = orderedFields.get("call_status") != null ? orderedFields.get("call_status").toString() : "-"; |
||||
|
finalMapping.put("Call Status", callstatus); |
||||
|
|
||||
|
// Add Remarks |
||||
|
String remarks = orderedFields.get("remarks") != null ? orderedFields.get("remarks").toString() : "-"; |
||||
|
finalMapping.put("Remarks", remarks); |
||||
|
|
||||
|
String up_date = orderedFields.get("updated_date") != null ? orderedFields.get("updated_date").toString() : "-"; |
||||
|
finalMapping.put("Updated_Date", up_date); |
||||
|
|
||||
|
resultList.add(finalMapping); |
||||
|
} |
||||
|
|
||||
|
// Write CSV data |
||||
|
if (resultList.isEmpty()) { |
||||
|
writer.println("No Data Available"); |
||||
|
return; |
||||
|
} |
||||
|
/* |
||||
|
// Extract headers from the first row and escape them |
||||
|
String headers = resultList.get(0).keySet().stream() |
||||
|
.map(this::escapeCsvValue) // Escape each header value |
||||
|
.collect(Collectors.joining(",")); |
||||
|
writer.println(headers); |
||||
|
|
||||
|
// Write data rows |
||||
|
for (Map<String, Object> rowData : resultList) { |
||||
|
List<String> values = rowData.values().stream() |
||||
|
.map(value -> escapeCsvValue(value != null ? value.toString() : "")) |
||||
|
.collect(Collectors.toList()); |
||||
|
writer.println(String.join(",", values)); |
||||
|
} |
||||
|
*/ |
||||
|
// Extract headers from the first row and escape them |
||||
|
Map<String, Object> firstRow = resultList.get(0); |
||||
|
|
||||
|
StringBuilder headerBuilder = new StringBuilder(); |
||||
|
int headerIndex = 0; |
||||
|
|
||||
|
for (String key : firstRow.keySet()) { |
||||
|
if (headerIndex > 0) { |
||||
|
headerBuilder.append(","); |
||||
|
} |
||||
|
headerBuilder.append(escapeCsvValue(key)); |
||||
|
headerIndex++; |
||||
|
} |
||||
|
|
||||
|
writer.println(headerBuilder.toString()); |
||||
|
|
||||
|
// Write data rows |
||||
|
for (Map<String, Object> rowData : resultList) { |
||||
|
|
||||
|
StringBuilder rowBuilder = new StringBuilder(); |
||||
|
int valueIndex = 0; |
||||
|
|
||||
|
for (Object value : rowData.values()) { |
||||
|
if (valueIndex > 0) { |
||||
|
rowBuilder.append(","); |
||||
|
} |
||||
|
rowBuilder.append( |
||||
|
escapeCsvValue(value != null ? value.toString() : "") |
||||
|
); |
||||
|
valueIndex++; |
||||
|
} |
||||
|
|
||||
|
writer.println(rowBuilder.toString()); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,715 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.service; |
||||
|
|
||||
|
import java.io.File; |
||||
|
import java.io.IOException; |
||||
|
import java.sql.Date; |
||||
|
import java.sql.PreparedStatement; |
||||
|
import java.sql.Statement; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.LinkedHashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.Set; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
import javax.transaction.Transactional; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; |
||||
|
import org.springframework.jdbc.core.simple.SimpleJdbcInsert; |
||||
|
import org.springframework.jdbc.support.GeneratedKeyHolder; |
||||
|
import org.springframework.jdbc.support.KeyHolder; |
||||
|
import org.springframework.scheduling.annotation.Scheduled; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
|
||||
|
@Service |
||||
|
public class CampaignService { |
||||
|
|
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSourcemysql(@Qualifier("mysql1913CampaignDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource2(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate2; |
||||
|
|
||||
|
|
||||
|
//Method to save file and return its URL |
||||
|
public String saveFile(MultipartFile file) { |
||||
|
String fileName = file.getOriginalFilename(); |
||||
|
String filePath = "/uploads/" + fileName; // Path to save the file |
||||
|
try { |
||||
|
File destinationFile = new File(filePath); |
||||
|
file.transferTo(destinationFile); // Save the file locally |
||||
|
} catch (IOException e) { |
||||
|
throw new RuntimeException("Failed to store file " + fileName, e); |
||||
|
} |
||||
|
return filePath; // Return the file path (URL) for saving to the database |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//Method to save campaign details into the database |
||||
|
public void saveCampaignDetails(Map<String, Object> campaignDetails) { |
||||
|
String sql = "UPDATE gcc_1913_campaign.campaign_request " + |
||||
|
"SET start_date = :start_date, " + |
||||
|
"end_date = :end_date, " + |
||||
|
"calls_per_agent = :calls_per_agent, " + |
||||
|
"description = :description " + |
||||
|
"WHERE campaign_id = :campaign_id"; |
||||
|
|
||||
|
// Using NamedParameterJdbcTemplate for mapping campaignDetails into query |
||||
|
NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate); |
||||
|
namedJdbcTemplate.update(sql, campaignDetails); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// Method to save campaign details into the database |
||||
|
public String saveCampaignDetailsExcel(Map<String, Object> campaignDetailsExcel) { |
||||
|
|
||||
|
campaignDetailsExcel.putIfAbsent("campaign_status", "PENDING"); |
||||
|
|
||||
|
String sql = "INSERT INTO gcc_1913_campaign.campaign_request (campaign_name, category_id, excel_url,campaign_status) " + |
||||
|
"VALUES (:campaign_name, :category_id, :excel_url ,:campaign_status)"; |
||||
|
|
||||
|
// Using NamedParameterJdbcTemplate for mapping campaignDetails into query |
||||
|
NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate); |
||||
|
namedJdbcTemplate.update(sql, campaignDetailsExcel); |
||||
|
|
||||
|
// Return the category to use in the next step |
||||
|
return campaignDetailsExcel.get("category_id").toString(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
// campaign_status change as ongoing in campaign_request table |
||||
|
@Transactional |
||||
|
public void updateCampaignStatus(int campaignId, int categoryId) { |
||||
|
String checkSql = "SELECT COUNT(*) FROM gcc_1913_campaign.agent_assign " |
||||
|
+ "WHERE campaign_id = ? AND category_id = ? AND status = 'ASSIGNED'"; |
||||
|
|
||||
|
int assignedCount = jdbcTemplate.queryForObject(checkSql, Integer.class, campaignId, categoryId); |
||||
|
|
||||
|
if (assignedCount > 0) { |
||||
|
String updateSql = "UPDATE gcc_1913_campaign.campaign_request " |
||||
|
+ "SET campaign_status = 'ONGOING' WHERE campaign_id = ? AND category_id = ?"; |
||||
|
jdbcTemplate.update(updateSql, campaignId, categoryId); |
||||
|
|
||||
|
System.out.println("Campaign status updated to ONGOING for campaign ID: " + campaignId); |
||||
|
} else { |
||||
|
System.out.println("No agents assigned yet. Campaign status remains PENDING."); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//Validated uploaded excel column count with field column in our DB |
||||
|
public List<String> getUploadDataFieldColumns() { |
||||
|
String query = "SELECT column_name FROM information_schema.columns " |
||||
|
+ "WHERE table_schema = 'gcc_1913_campaign' " |
||||
|
+ "AND table_name = 'upload_data' " |
||||
|
+ "AND column_name LIKE 'field_%'"; |
||||
|
return jdbcTemplate.queryForList(query, String.class); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
public String saveQuestionsAnswers(List<Map<String, Object>> questionsData) { |
||||
|
for (Map<String, Object> question : questionsData) { |
||||
|
String questionText = (String) question.get("question"); |
||||
|
String answerType = (String) question.get("answerType"); |
||||
|
|
||||
|
// Validate and parse categoryId and campaignId |
||||
|
Integer categoryId = Integer.parseInt(question.get("categoryId").toString()); |
||||
|
Integer campaignId = Integer.parseInt(question.get("campaignId").toString()); |
||||
|
|
||||
|
List<String> answers = (List<String>) question.get("answers"); |
||||
|
|
||||
|
// Insert question and get generated question_id |
||||
|
String questionInsertQuery = "INSERT INTO gcc_1913_campaign.campaign_questions (category_id, campaign_id, questions, answer_type_id) VALUES (?, ?, ?, ?)"; |
||||
|
|
||||
|
KeyHolder keyHolder = new GeneratedKeyHolder(); |
||||
|
jdbcTemplate.update(connection -> { |
||||
|
PreparedStatement ps = connection.prepareStatement(questionInsertQuery, Statement.RETURN_GENERATED_KEYS); |
||||
|
ps.setInt(1, categoryId); |
||||
|
ps.setInt(2, campaignId); |
||||
|
ps.setString(3, questionText); |
||||
|
ps.setString(4, answerType); |
||||
|
return ps; |
||||
|
}, keyHolder); |
||||
|
|
||||
|
Integer questionId = keyHolder.getKey().intValue(); |
||||
|
|
||||
|
// Insert answers if available |
||||
|
if (answers != null && !answers.isEmpty()) { |
||||
|
String answerInsertQuery = "INSERT INTO gcc_1913_campaign.campaign_answers (category_id, campaign_id, question_id, campaign_answer) VALUES (?, ?, ?, ?)"; |
||||
|
for (String answer : answers) { |
||||
|
jdbcTemplate.update(answerInsertQuery, categoryId, campaignId, questionId, answer); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return "Questions and Answers saved successfully!"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
public void saveQuestionsAndAnswers(String category, String campaignId, String question, String answerType, List<String> answers) { |
||||
|
// Convert category and answerType to integers once to avoid redundant parsing |
||||
|
int categoryId = Integer.parseInt(category); |
||||
|
int answerTypeId = Integer.parseInt(answerType); |
||||
|
int campaignIdd = Integer.parseInt(campaignId); |
||||
|
|
||||
|
// Query to insert question into campaign_questions and retrieve generated question_id |
||||
|
String query1 = "INSERT INTO gcc_1913_campaign.campaign_questions (category_id, campaign_id, questions, answer_type_id) VALUES (?, ?, ?, ?)"; |
||||
|
|
||||
|
KeyHolder keyHolder = new GeneratedKeyHolder(); |
||||
|
|
||||
|
jdbcTemplate.update(connection -> { |
||||
|
PreparedStatement ps = connection.prepareStatement(query1, Statement.RETURN_GENERATED_KEYS); |
||||
|
ps.setInt(1, categoryId); |
||||
|
ps.setInt(2, campaignIdd); |
||||
|
ps.setString(3, question); |
||||
|
ps.setInt(4, answerTypeId); |
||||
|
return ps; |
||||
|
}, keyHolder); |
||||
|
|
||||
|
int questionId = keyHolder.getKey().intValue(); |
||||
|
|
||||
|
// If answerType is NOT "Text" (ID = 1), save answers |
||||
|
if (answerTypeId != 1 && answers != null && !answers.isEmpty()) { |
||||
|
String query2 = "INSERT INTO gcc_1913_campaign.campaign_answers (category_id, campaign_id, question_id, campaign_answer) VALUES (?, ?, ?, ?)"; |
||||
|
|
||||
|
for (String answer : answers) { |
||||
|
jdbcTemplate.update(query2, categoryId, campaignId, questionId, answer); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
System.out.println("Inserted Question ID: " + questionId + " with Answers: " + (answers != null ? answers : "None")); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
// |
||||
|
// public Map<String, Object> getCampaignDetailsById(Long campaign_id) { |
||||
|
// String sql = "SELECT * FROM gcc_1913_campaign.campaign_request WHERE campaign_id = ?"; |
||||
|
// return jdbcTemplate.queryForMap(sql, campaign_id); |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
public void updateCampaign(Long campaign_id, String end_date) { |
||||
|
String sql = "UPDATE gcc_1913_campaign.campaign_request SET end_date = ? WHERE campaign_id = ?"; |
||||
|
jdbcTemplate.update(sql, end_date,campaign_id); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getCampaignDetails() { |
||||
|
String sql = "SELECT campaign_id, " + |
||||
|
" campaign_name, " + |
||||
|
" CONCAT(" + |
||||
|
" DATE_FORMAT(start_date, '%d/%m/%Y'), " + |
||||
|
" ' to ', " + |
||||
|
" DATE_FORMAT(end_date, '%d/%m/%Y')" + |
||||
|
" ) AS event_dates, " + |
||||
|
" no_of_agents, " + |
||||
|
" calls_per_agent, " + |
||||
|
" (no_of_agents)*(calls_per_agent) as total_calls, " + |
||||
|
" description " + |
||||
|
"FROM gcc_1913_campaign.campaign_request;"; |
||||
|
|
||||
|
List<Map<String, Object>> campaigns = jdbcTemplate.queryForList(sql); |
||||
|
|
||||
|
|
||||
|
return campaigns; |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getLastRow() |
||||
|
{ |
||||
|
String sqlQuery ="SELECT campaign_id\r\n" |
||||
|
+ "FROM gcc_1913_campaign.campaign_request\r\n" |
||||
|
+ "ORDER BY campaign_id DESC\r\n" |
||||
|
+ "LIMIT 1"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
public String getLastInsertedCategoryId() { |
||||
|
String sqlQuery = "SELECT category_id " + |
||||
|
"FROM gcc_1913_campaign.campaign_request " + |
||||
|
"ORDER BY campaign_id DESC " + |
||||
|
"LIMIT 1"; |
||||
|
|
||||
|
return jdbcTemplate.queryForObject(sqlQuery, String.class); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public Integer getLastInsertedCampaignId() |
||||
|
{ |
||||
|
String sqlQuery ="SELECT campaign_id\r\n" |
||||
|
+ "FROM gcc_1913_campaign.campaign_request\r\n" |
||||
|
+ "ORDER BY campaign_id DESC\r\n" |
||||
|
+ "LIMIT 1"; |
||||
|
|
||||
|
return jdbcTemplate.queryForObject(sqlQuery,Integer.class); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getDetailsForStart() |
||||
|
{ |
||||
|
String sqlQuery ="SELECT cr.campaign_id,cr.category_id,ca.category_name,cr.campaign_name,start_date\r\n" |
||||
|
+ "FROM gcc_1913_campaign.campaign_request cr \r\n" |
||||
|
+ "join gcc_1913_campaign.category ca ON cr.category_id = ca.category_id \r\n" |
||||
|
+ "where cr.campaign_status='ONGOING' AND cr.isactive='1' and cr.isdelete='0' \r\n" |
||||
|
+ "order by cr.campaign_id desc"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getDataforAgents(int campaign_id, int calls_per_agent) |
||||
|
{ |
||||
|
List<Map<String, Object>> assignedAgent_list =getAssignedAgentId(campaign_id); |
||||
|
List<Map<String, Object>> data_list =getDataId(campaign_id); |
||||
|
|
||||
|
List<Map<String, Object>> task = getTask(assignedAgent_list,data_list,calls_per_agent,campaign_id); |
||||
|
|
||||
|
// Perform the update query here |
||||
|
if (task != null && !task.isEmpty()) { |
||||
|
assignAgentIds(task); |
||||
|
updateAgentStatus(campaign_id); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
return task; |
||||
|
} |
||||
|
|
||||
|
//Method to update agent_id for each data_id in upload_data table |
||||
|
public void assignAgentIds(List<Map<String, Object>> taskList) { |
||||
|
String updateQuery = "UPDATE gcc_1913_campaign.upload_data SET agent_id = ? WHERE data_id = ? AND campaign_id = ?"; |
||||
|
|
||||
|
// Loop through each agent's task list |
||||
|
for (Map<String, Object> task : taskList) { |
||||
|
Integer agentId = (Integer) task.get("agent_id"); |
||||
|
Integer campaignId = (Integer) task.get("campaign_id"); |
||||
|
List<Integer> dataIds = (List<Integer>) task.get("data_ids"); |
||||
|
|
||||
|
// Update each data_id with the respective agent_id |
||||
|
for (Integer dataId : dataIds) { |
||||
|
jdbcTemplate.update(updateQuery, agentId, dataId, campaignId); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//Example update method |
||||
|
private void updateAgentStatus(int campaign_id) { |
||||
|
String updateQuery = "UPDATE gcc_1913_campaign.campaign_request SET isactive = '0', isdelete='1' WHERE campaign_id = ?"; |
||||
|
jdbcTemplate.update(updateQuery, campaign_id); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private List<Map<String, Object>> getTask(List<Map<String, Object>> assignedAgent_list, List<Map<String, Object>> data_list, |
||||
|
int calls_per_agent,int campaign_id) { |
||||
|
|
||||
|
List<Map<String, Object>> result = new ArrayList<>(); |
||||
|
int dataIndex = 0; |
||||
|
|
||||
|
// Loop through each assigned ID |
||||
|
for (Map<String, Object> assigned : assignedAgent_list) { |
||||
|
// Create a map to store the assigned_id and corresponding data_ids |
||||
|
Map<String, Object> assignedTaskMap = new HashMap<>(); |
||||
|
List<Integer> assignedDataIds = new ArrayList<>(); |
||||
|
|
||||
|
// Get assigned_id |
||||
|
Integer agent_id = (Integer) assigned.get("agent_id"); |
||||
|
|
||||
|
// Loop to assign the appropriate number of data IDs (calls_per_agent) |
||||
|
for (int i = 0; i < calls_per_agent; i++) { |
||||
|
if (dataIndex >= data_list.size()) { |
||||
|
// Exit if we run out of data IDs |
||||
|
break; |
||||
|
} |
||||
|
Map<String, Object> data = data_list.get(dataIndex); |
||||
|
Integer data_id = (Integer) data.get("data_id"); |
||||
|
assignedDataIds.add(data_id); |
||||
|
dataIndex++; |
||||
|
} |
||||
|
|
||||
|
// Put the agent_id and the corresponding data_ids in the map |
||||
|
assignedTaskMap.put("agent_id", agent_id); |
||||
|
assignedTaskMap.put("data_ids", assignedDataIds); |
||||
|
assignedTaskMap.put("campaign_id", campaign_id); |
||||
|
|
||||
|
// Add the map to the result list |
||||
|
result.add(assignedTaskMap); |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private List<Map<String, Object>> getDataId(int campaign_id) { |
||||
|
|
||||
|
String sqlQuery ="SELECT data_id\r\n" |
||||
|
+ "from gcc_1913_campaign.upload_data\r\n" |
||||
|
+ "where campaign_id=?"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery, new Object[]{campaign_id}); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private List<Map<String, Object>> getAssignedAgentId(int campaign_id) { |
||||
|
|
||||
|
String sqlQuery ="SELECT agent_id\r\n" |
||||
|
+ "FROM gcc_1913_campaign.agent_assign \r\n" |
||||
|
+ "where campaign_id=? and isactive='1'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery, new Object[]{campaign_id}); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getActiveCampaigns() |
||||
|
{ |
||||
|
String sqlQuery ="SELECT cr.campaign_id,cr.calls_per_agent,cr.category_id,cr.campaign_name,c.category_name,cr.start_date,cr.end_date,cr.description,cr.campaign_status\r\n" |
||||
|
+ "FROM gcc_1913_campaign.campaign_request cr\r\n" |
||||
|
+ "JOIN gcc_1913_campaign.category c ON cr.category_id=c.category_id\r\n" |
||||
|
+ "where cr.isactive='1' and cr.campaign_status IN ('ONGOING', 'CLOSED') Order by cr.campaign_id desc"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> viewcampaignstatus(int campaign_id) { |
||||
|
|
||||
|
String sqlQuery ="SELECT \r\n" |
||||
|
+ "aa.campaign_id as campaign_id,\r\n" |
||||
|
+ " al.agent_id as agent_id,\r\n" |
||||
|
+ " al.agent_name as agent_name,\r\n" |
||||
|
+ " COUNT(up.agent_id) AS Assigned_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN up.field_14 IS NOT NULL THEN 1 END) AS Complete_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN up.field_14 IS NULL THEN 1 END) AS Pending_count,\r\n" |
||||
|
+ " ROUND(\r\n" |
||||
|
+ " (COUNT(CASE WHEN up.field_14 IS NOT NULL THEN 1 END) * 100) / \r\n" |
||||
|
+ " COUNT(up.agent_id)\r\n" |
||||
|
+ " ) as Percentage,\r\n" |
||||
|
+ " COUNT(CASE WHEN up.field_14 = 'INFORMATION_GIVEN' THEN 1 END) AS Information_Given_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN up.field_14 = 'UNATTENDED' THEN 1 END) AS Unattended_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN up.field_14 = 'CALL_BACK_LATER' THEN 1 END) AS Call_back_later_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN up.field_14 = 'SWITCH_OFF' THEN 1 END) AS Switch_off_count,\r\n" |
||||
|
+ " COUNT(CASE WHEN up.field_14 = 'WRONG_NUMBER' THEN 1 END) AS Wrong_number_count\r\n" |
||||
|
+ "FROM gcc_1913_campaign.agent_assign aa\r\n" |
||||
|
+ "JOIN gcc_1913_qaqc.agents_list al ON al.agent_id = aa.agent_id\r\n" |
||||
|
+ "JOIN gcc_1913_campaign.upload_data up ON up.agent_id = al.agent_id AND up.campaign_id = ?\r\n" |
||||
|
+ "WHERE aa.campaign_id = ? AND aa.isactive = '1'\r\n" |
||||
|
+ "GROUP BY aa.campaign_id,al.agent_id, al.agent_name"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery,campaign_id,campaign_id); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> viewcompletedby(int campaign_id, int agent_id) { |
||||
|
|
||||
|
String sqlQuery ="SELECT \r\n" |
||||
|
+ "up.data_id as data_id,up.field_1 as id, up.field_2 as name, up.field_3 as address,field_5 as cellnumber, field_14 as call_status, \r\n" |
||||
|
+ "count(cl.data_id) as call_count,updated_date as updated_date,field_15 as remarks\r\n" |
||||
|
+ "FROM gcc_1913_campaign.agent_assign aa\r\n" |
||||
|
+ "JOIN gcc_1913_campaign.upload_data up ON up.agent_id = aa.agent_id AND up.campaign_id = ?\r\n" |
||||
|
+ "JOIN gcc_1913_campaign.call_logs cl ON cl.data_id=up.data_id\r\n" |
||||
|
+ "WHERE aa.campaign_id = ? AND aa.isactive = '1' AND aa.agent_id=? AND up.field_14 IS NOT NULL\r\n" |
||||
|
+ "group by up.data_id,up.field_1, up.field_2"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery,campaign_id,campaign_id,agent_id); |
||||
|
} |
||||
|
|
||||
|
public String getExcelUrlByCampaignId(int lastId) { |
||||
|
String sqlQuery = "SELECT excel_url FROM gcc_1913_campaign.campaign_request WHERE campaign_id = ?"; |
||||
|
return jdbcTemplate.queryForObject(sqlQuery, String.class, lastId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public void saveUploadData(String category, int campaignId, Map<String, Object> rowData, List<String> expectedHeaders) { |
||||
|
int fieldCount = rowData.size(); |
||||
|
|
||||
|
List<String> columnNames = new ArrayList<>(); |
||||
|
for (int i = 1; i <= fieldCount; i++) { |
||||
|
columnNames.add("field_" + i); |
||||
|
} |
||||
|
|
||||
|
String columnNamesString = String.join(", ", columnNames); |
||||
|
//String placeholders = columnNames.stream().map(col -> "?").collect(Collectors.joining(", ")); |
||||
|
|
||||
|
StringBuilder placeholdersBuilder = new StringBuilder(); |
||||
|
|
||||
|
for (int i = 0; i < columnNames.size(); i++) { |
||||
|
if (i > 0) { |
||||
|
placeholdersBuilder.append(", "); |
||||
|
} |
||||
|
placeholdersBuilder.append("?"); |
||||
|
} |
||||
|
|
||||
|
String placeholders = placeholdersBuilder.toString(); |
||||
|
|
||||
|
String sql = "INSERT INTO gcc_1913_campaign.upload_data (category_id, campaign_id, " + columnNamesString + ") VALUES (?, ?, " + placeholders + ")"; |
||||
|
|
||||
|
//System.out.println("SQL Query========= " + sql); |
||||
|
|
||||
|
List<Object> values = new ArrayList<>(); |
||||
|
values.add(category); |
||||
|
values.add(campaignId); |
||||
|
|
||||
|
// Ensure rowData values are ordered based on expected headers |
||||
|
for (String header : expectedHeaders) { |
||||
|
values.add(rowData.getOrDefault(header, "")); // Ensures the correct mapping |
||||
|
} |
||||
|
|
||||
|
final Logger logger = LoggerFactory.getLogger(CampaignService.class); |
||||
|
try { |
||||
|
jdbcTemplate.update(sql, values.toArray()); |
||||
|
} catch (Exception e) { |
||||
|
logger.error("Error inserting upload data for campaign {}: {}", campaignId, e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// public void saveUploadData(String category, int campaignId, Map<String, Object> rowData) { |
||||
|
// // Get total number of fields in the row |
||||
|
// int fieldCount = rowData.size(); |
||||
|
// |
||||
|
// // Generate dynamic column names as field_1, field_2, ..., field_N |
||||
|
// List<String> columnNames = new ArrayList<>(); |
||||
|
// for (int i = 1; i <= fieldCount; i++) { |
||||
|
// columnNames.add("field_" + i); |
||||
|
// } |
||||
|
// |
||||
|
// // Build dynamic SQL query |
||||
|
// String columnNamesString = String.join(", ", columnNames); |
||||
|
// String placeholders = columnNames.stream().map(col -> "?").collect(Collectors.joining(", ")); |
||||
|
// |
||||
|
// String sql = "INSERT INTO upload_data (category_id, campaign_id, " + columnNamesString + ") VALUES (?, ?, " + placeholders + ")"; |
||||
|
// |
||||
|
// System.out.println("SQL Query========= " + sql); |
||||
|
// |
||||
|
// // Prepare values list |
||||
|
// List<Object> values = new ArrayList<>(); |
||||
|
// values.add(category); |
||||
|
// values.add(campaignId); |
||||
|
// values.addAll(rowData.values()); // Add row data values dynamically |
||||
|
// |
||||
|
// |
||||
|
// |
||||
|
// final Logger logger = LoggerFactory.getLogger(CampaignService.class); |
||||
|
// try { |
||||
|
// jdbcTemplate.update(sql, values.toArray()); |
||||
|
// } catch (Exception e) { |
||||
|
// logger.error("Error inserting upload data for campaign {}: {}", campaignId, e.getMessage()); |
||||
|
// } |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
//Agent List |
||||
|
public List<Map<String, Object>> getAllAgents() { |
||||
|
String sql = "SELECT agent_id, agent_name FROM gcc_1913_qaqc.agents_list WHERE calling_type = 'OUTBOUND' AND isactive = '1'"; |
||||
|
return jdbcTemplate.queryForList(sql); |
||||
|
} |
||||
|
|
||||
|
//count based on total, completed and pending |
||||
|
public Map<String, Object> getCampaignStatistics(int campaignId) { |
||||
|
Map<String, Object> result = new HashMap<>(); |
||||
|
|
||||
|
// Total Count |
||||
|
String totalQuery = "SELECT COUNT(*) AS total FROM gcc_1913_campaign.upload_data WHERE campaign_id = ?"; |
||||
|
int totalCount = jdbcTemplate.queryForObject(totalQuery, Integer.class, campaignId); |
||||
|
result.put("totalCount", totalCount); |
||||
|
|
||||
|
// Completed Count (agent_id is not null and call_status is null) |
||||
|
String completedQuery = "SELECT COUNT(*) AS completed FROM gcc_1913_campaign.upload_data ud\r\n" |
||||
|
+ "JOIN gcc_1913_campaign.campaign_request cr ON ud.campaign_id = cr.campaign_id\r\n" |
||||
|
+ "WHERE ud.campaign_id = ? AND cr.campaign_status = 'ONGOING' AND ud.agent_id IS NOT NULL AND\r\n" |
||||
|
+ "( ud.call_status NOT IN ('CALL BACK LATER','UNATTENDED'))"; |
||||
|
int completedCount = jdbcTemplate.queryForObject(completedQuery, Integer.class, campaignId); |
||||
|
result.put("completedCount", completedCount); |
||||
|
|
||||
|
// Pending Count (agent_id is not null and call_status is not null) |
||||
|
String pendingQuery = "SELECT COUNT(*) AS pending FROM gcc_1913_campaign.upload_data ud\r\n" |
||||
|
+ "JOIN gcc_1913_campaign.campaign_request cr ON ud.campaign_id = cr.campaign_id\r\n" |
||||
|
+ "WHERE ud.campaign_id = ? AND ud.agent_id IS NOT NULL \r\n" |
||||
|
+ "AND (ud.call_status IS NULL OR ud.call_status IN ('CALL BACK LATER','UNATTENDED'))"; |
||||
|
int pendingCount = jdbcTemplate.queryForObject(pendingQuery, Integer.class, campaignId); |
||||
|
result.put("pendingCount", pendingCount); |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getCampaignDetailsById(Long campaign_id) { |
||||
|
String sql = "SELECT \r\n" |
||||
|
+ " cr.campaign_id, \r\n" |
||||
|
+ " cr.campaign_name, \r\n" |
||||
|
+ " cr.category_id, \r\n" |
||||
|
+ " cr.start_date, \r\n" |
||||
|
+ " cr.end_date, \r\n" |
||||
|
+ " cr.calls_per_agent, \r\n" |
||||
|
+ " cr.description, \r\n" |
||||
|
+ " cr.created_date, \r\n" |
||||
|
+ " cr.excel_url, \r\n" |
||||
|
+ " cr.isactive, \r\n" |
||||
|
+ " cr.isdelete, \r\n" |
||||
|
+ " cr.campaign_status, \r\n" |
||||
|
+ " cq.question_id, \r\n" |
||||
|
+ " cq.questions, \r\n" |
||||
|
+ " cq.answer_type_id, \r\n" |
||||
|
+ " at.type_name, \r\n" |
||||
|
+ " ca.id AS answer_id, \r\n" |
||||
|
+ " ca.campaign_answer\r\n" |
||||
|
+ "FROM gcc_1913_campaign.campaign_request cr\r\n" |
||||
|
+ "JOIN gcc_1913_campaign.campaign_questions cq \r\n" |
||||
|
+ " ON cr.campaign_id = cq.campaign_id\r\n" |
||||
|
+ "LEFT JOIN gcc_1913_campaign.answer_type at\r\n" |
||||
|
+ " ON cq.answer_type_id = at.answer_type_id \r\n" |
||||
|
+ "LEFT JOIN gcc_1913_campaign.campaign_answers ca\r\n" |
||||
|
+ " ON cq.question_id = ca.question_id\r\n" |
||||
|
+ "WHERE cr.campaign_id = ?"; |
||||
|
|
||||
|
List<Map<String, Object>> results = jdbcTemplate.queryForList(sql, campaign_id); |
||||
|
|
||||
|
// Group answers by question_id |
||||
|
Map<Long, Map<String, Object>> groupedData = new LinkedHashMap(); |
||||
|
|
||||
|
for (Map<String, Object> row : results) { |
||||
|
Object questionIdObj = row.get("question_id"); |
||||
|
Long questionId = null; |
||||
|
|
||||
|
// Convert Integer to Long if needed |
||||
|
if (questionIdObj instanceof Integer) { |
||||
|
questionId = ((Integer) questionIdObj).longValue(); |
||||
|
} else if (questionIdObj instanceof Long) { |
||||
|
questionId = (Long) questionIdObj; |
||||
|
} |
||||
|
|
||||
|
if (questionId == null) continue; |
||||
|
|
||||
|
if (!groupedData.containsKey(questionId)) { |
||||
|
// Ensure `campaign_answer` is initialized correctly |
||||
|
List<String> answers = new ArrayList<>(); |
||||
|
if (row.get("campaign_answer") != null) { |
||||
|
answers.add(row.get("campaign_answer").toString()); |
||||
|
} |
||||
|
row.put("campaign_answer", answers); |
||||
|
groupedData.put(questionId, row); |
||||
|
} else { |
||||
|
// Append the answer to the existing question |
||||
|
List<String> answers = (List<String>) groupedData.get(questionId).get("campaign_answer"); |
||||
|
if (row.get("campaign_answer") != null) { |
||||
|
answers.add(row.get("campaign_answer").toString()); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return new ArrayList<>(groupedData.values()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
//question and answers counts with percentage in report page method |
||||
|
public List<Map<String, Object>> getQuestionAnswers(int campaignId) { |
||||
|
String sql = "SELECT cq.question_id, cq.questions, ca.campaign_answer, " + |
||||
|
"COUNT(qa.campaign_answer) AS answer_count, " + |
||||
|
"FLOOR(IFNULL((COUNT(qa.campaign_answer) / " + |
||||
|
"(SELECT COUNT(*) FROM gcc_1913_campaign.upload_data " + |
||||
|
"WHERE campaign_id = cq.campaign_id AND call_status = 'INFORMATION GIVEN') * 100), 0)) AS answer_percentage " + |
||||
|
"FROM campaign_questions cq " + |
||||
|
"JOIN campaign_answers ca ON cq.question_id = ca.question_id AND cq.campaign_id = ca.campaign_id " + |
||||
|
"LEFT JOIN questions_answers qa ON cq.question_id = qa.question_id AND ca.campaign_answer = qa.campaign_answer AND cq.campaign_id = qa.campaign_id " + |
||||
|
"WHERE cq.campaign_id = ? AND cq.isactive = 1 AND cq.isdelete = 0 " + |
||||
|
"GROUP BY cq.question_id, cq.questions, ca.campaign_answer " + |
||||
|
"ORDER BY cq.question_id;"; |
||||
|
|
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, campaignId); |
||||
|
Map<Integer, Map<String, Object>> responseMap = new LinkedHashMap<>(); |
||||
|
|
||||
|
for (Map<String, Object> row : result) { |
||||
|
int questionId = (int) row.get("question_id"); |
||||
|
if (!responseMap.containsKey(questionId)) { |
||||
|
Map<String, Object> questionData = new HashMap<>(); |
||||
|
questionData.put("question_id", questionId); |
||||
|
questionData.put("questions", row.get("questions")); |
||||
|
questionData.put("answers", new ArrayList<>()); |
||||
|
responseMap.put(questionId, questionData); |
||||
|
} |
||||
|
|
||||
|
Map<String, Object> answerData = new HashMap<>(); |
||||
|
answerData.put("campaign_answer", row.get("campaign_answer")); |
||||
|
answerData.put("answer_count", row.get("answer_count")); |
||||
|
answerData.put("answer_percentage", row.get("answer_percentage")); |
||||
|
|
||||
|
((List<Map<String, Object>>) responseMap.get(questionId).get("answers")).add(answerData); |
||||
|
} |
||||
|
|
||||
|
return new ArrayList<>(responseMap.values()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//////////////dizo////////////// |
||||
|
|
||||
|
public int closeCampaign(int campaignId) { |
||||
|
String sql = "UPDATE gcc_1913_campaign.campaign_request SET campaign_status = 'CLOSED' WHERE campaign_id = ?"; |
||||
|
int rowsAffected = jdbcTemplate.update(sql, campaignId); |
||||
|
|
||||
|
if (rowsAffected == 0) { |
||||
|
System.out.println("Failed to update. Check if campaignId exists: " + campaignId); |
||||
|
} else { |
||||
|
System.out.println("Campaign ID " + campaignId + " successfully updated to CLOSED."); |
||||
|
} |
||||
|
|
||||
|
return rowsAffected; |
||||
|
} |
||||
|
|
||||
|
public int autoCloseExpiredCampaigns() { |
||||
|
String sql = "UPDATE gcc_1913_campaign.campaign_request " + |
||||
|
"SET campaign_status = 'CLOSED' " + |
||||
|
"WHERE campaign_status = 'ONGOING' AND end_date < CURRENT_DATE"; |
||||
|
|
||||
|
int rowsAffected = jdbcTemplate.update(sql); |
||||
|
|
||||
|
if (rowsAffected == 0) { |
||||
|
System.out.println("No expired campaigns found to close."); |
||||
|
} else { |
||||
|
System.out.println(rowsAffected + " campaigns successfully updated to CLOSED."); |
||||
|
} |
||||
|
|
||||
|
return rowsAffected; |
||||
|
} |
||||
|
|
||||
|
// Scheduled job to run daily at midnight |
||||
|
/* |
||||
|
* @Scheduled(cron = "0 0 0 * * ?") public void scheduledAutoClose() { |
||||
|
* System.out.println("Running scheduled auto-close for expired campaigns..."); |
||||
|
* autoCloseExpiredCampaigns(); } |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,40 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenter.service; |
||||
|
|
||||
|
import java.net.HttpURLConnection; |
||||
|
import java.net.URL; |
||||
|
|
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
@Service |
||||
|
public class WhatsappMsgService { |
||||
|
|
||||
|
|
||||
|
public String sendMsg(String msgUrl) { |
||||
|
|
||||
|
String response =""; |
||||
|
try{ |
||||
|
HttpURLConnection connection =null; |
||||
|
|
||||
|
URL url = new URL(msgUrl); |
||||
|
connection = (HttpURLConnection) url.openConnection(); |
||||
|
connection.setRequestMethod("GET"); |
||||
|
|
||||
|
int responseCode = connection.getResponseCode(); |
||||
|
response=responseCode+""; |
||||
|
System.out.println("Response Code: " + responseCode); |
||||
|
|
||||
|
}catch (Exception e){ |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public String sendSMS(String SMS_Url) { |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
String response =restTemplate.getForObject(SMS_Url,String.class); |
||||
|
return response; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
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 org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
|
||||
|
|
||||
|
@RequestMapping("/gcc/api/callenter/attendance") |
||||
|
@RestController |
||||
|
public class AttendanceApiController { |
||||
|
|
||||
|
private AppConfig appConfig; |
||||
|
private final RestTemplate restTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public AttendanceApiController(RestTemplate restTemplate, AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/getAttendancedetails") |
||||
|
public String getAttendancedetails(@RequestParam String fromDate,@RequestParam String toDate){ |
||||
|
String apiUrl = appConfig.attendanceReport + "/callcenter/api/attendance/getattendancereport"+"?fromDate="+ fromDate + "&toDate="+ toDate; |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
return responseEntity.getBody(); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,71 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
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.client.RestTemplate; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("/gcc/callcenterattendance") |
||||
|
@Controller("callCenterAttendanceController") |
||||
|
public class AttendanceMainController { |
||||
|
|
||||
|
@Autowired |
||||
|
private AppConfig appConfig; |
||||
|
|
||||
|
@Autowired |
||||
|
private RestTemplate restTemplate; |
||||
|
|
||||
|
@GetMapping("/attendancereport") |
||||
|
public String AttendanceList( |
||||
|
@RequestParam(required = false) String fromDate, |
||||
|
@RequestParam(required = false) String toDate, |
||||
|
Model model) { |
||||
|
List<Map<String, Object>> attendanceData = Collections.emptyList(); |
||||
|
|
||||
|
if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { |
||||
|
String apiUrl = appConfig.attendanceReport + "/callcenter/api/attendance/getattendancereport?fromDate=" + fromDate + "&toDate=" + toDate; |
||||
|
|
||||
|
try { |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
String responseBody = responseEntity.getBody(); |
||||
|
|
||||
|
if (responseBody != null && !responseBody.isEmpty()) { |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
if (responseBody.trim().startsWith("{")) { |
||||
|
// Single object response |
||||
|
Map<String, Object> singleData = objectMapper.readValue(responseBody, new TypeReference<>() {}); |
||||
|
attendanceData = List.of(singleData); |
||||
|
} else { |
||||
|
// Array response |
||||
|
attendanceData = objectMapper.readValue(responseBody, new TypeReference<>() {}); |
||||
|
} |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
System.err.println("Error fetching attendance data: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
model.addAttribute("attendanceData", attendanceData); |
||||
|
model.addAttribute("fromDate", fromDate); |
||||
|
model.addAttribute("toDate", toDate); |
||||
|
model.addAttribute("LoginUserId", LoginUserInfo.getLoginUserId()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
return "modules/callcenter/attendancereport"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,672 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
|
||||
|
import org.springframework.web.bind.annotation.CrossOrigin; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
|
||||
|
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; |
||||
|
|
||||
|
import com.fasterxml.jackson.databind.JsonNode; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.ComplaintService; |
||||
|
|
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.util.LinkedMultiValueMap; |
||||
|
import org.springframework.util.MultiValueMap; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
import java.io.BufferedReader; |
||||
|
import java.io.IOException; |
||||
|
import java.io.InputStreamReader; |
||||
|
import java.io.OutputStream; |
||||
|
import java.net.HttpURLConnection; |
||||
|
import java.net.URL; |
||||
|
import java.net.URLEncoder; |
||||
|
import java.time.LocalDate; |
||||
|
import java.time.format.DateTimeFormatter; |
||||
|
|
||||
|
import org.springframework.http.*; |
||||
|
|
||||
|
import java.util.Base64; |
||||
|
import java.util.Collections; |
||||
|
import java.util.HashMap; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
import java.awt.Graphics2D; |
||||
|
import java.awt.image.BufferedImage; |
||||
|
import java.io.ByteArrayOutputStream; |
||||
|
import java.io.IOException; |
||||
|
import javax.imageio.ImageIO; |
||||
|
import java.util.Base64; |
||||
|
|
||||
|
@CrossOrigin |
||||
|
@RestController |
||||
|
@RequestMapping("gcc/api/callcenterqaqc/pgrcomplaint") |
||||
|
public class ComplaintController { |
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
|
||||
|
public ComplaintController(RestTemplate restTemplate) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private ComplaintService complaintService; |
||||
|
|
||||
|
@GetMapping("/getComplaintCategories") |
||||
|
public @ResponseBody String getComplaintCategories() { |
||||
|
return complaintService.fetchComplaintCategories(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getComplaintSubTypes") |
||||
|
public @ResponseBody String getComplaintSubTypes(@RequestParam String groupId) { |
||||
|
return complaintService.fetchComplaintSubTypes(groupId); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getComplaintDetailsbyId") |
||||
|
public List<Map<String, Object>> getComplaintDetailsById(@RequestParam String complaintid) { |
||||
|
return complaintService.fetchComplaintDetailsById(complaintid); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getComplaintDetailsByMobile") |
||||
|
public List<Map<String, Object>> getComplaintDetailsByMobile(@RequestParam String mobileNo) { |
||||
|
return complaintService.fetchComplaintDetailsByMobile(mobileNo); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/register") |
||||
|
public ResponseEntity<?> registerComplaint( |
||||
|
@RequestParam(value = "ComplainantName", required = false) String complainantName, |
||||
|
@RequestParam(value = "ComplainantAddr", required = false) String complainantAddr, |
||||
|
@RequestParam(value = "MobileNo", required = false) String mobileNo, |
||||
|
@RequestParam(value = "Email", required = false) String email, |
||||
|
@RequestParam(value = "ComplaintType", required = false) String complaintType, |
||||
|
@RequestParam(value = "ComplaintTitle", required = false) String complaintTitle, |
||||
|
@RequestParam(value = "ComplaintDetails", required = false) String complaintDetails, |
||||
|
@RequestParam(value = "StreetId", required = false) String streetId, |
||||
|
@RequestParam(value = "Comp_Image", required = false) String compImage, |
||||
|
@RequestParam(value = "latitude", required = false) String latitude, |
||||
|
@RequestParam(value = "longtitude", required = false) String longtitude, |
||||
|
@RequestParam(value = "Landmark", required = false) String landmark, |
||||
|
@RequestParam(value = "gender", required = false) String gender) { |
||||
|
|
||||
|
String externalUrl = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice"; |
||||
|
|
||||
|
try { |
||||
|
// Create the URL object |
||||
|
URL url = new URL(externalUrl); |
||||
|
|
||||
|
// Create the HttpURLConnection object |
||||
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
||||
|
conn.setRequestMethod("POST"); |
||||
|
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); |
||||
|
conn.setDoOutput(true); |
||||
|
|
||||
|
// Create the parameters string, handling null values |
||||
|
String params = "serviceId=RegComplaint" + "&ComplainantName=" |
||||
|
+ URLEncoder.encode(complainantName != null ? complainantName : "", "UTF-8") + "&ComplainantAddr=" |
||||
|
+ URLEncoder.encode(complainantAddr != null ? complainantAddr : "", "UTF-8") + "&MobileNo=" |
||||
|
+ URLEncoder.encode(mobileNo != null ? mobileNo : "", "UTF-8") + "&Email=" |
||||
|
+ URLEncoder.encode(email != null ? email : "", "UTF-8") + "&ComplaintType=" |
||||
|
+ URLEncoder.encode(complaintType != null ? complaintType : "", "UTF-8") + "&ComplaintTitle=" |
||||
|
+ URLEncoder.encode(complaintTitle != null ? complaintTitle : "", "UTF-8") + "&ComplaintDetails=" |
||||
|
+ URLEncoder.encode(complaintDetails != null ? complaintDetails : "", "UTF-8") + "&StreetId=" |
||||
|
+ URLEncoder.encode(streetId != null ? streetId : "", "UTF-8") + "&Comp_Image=" |
||||
|
+ URLEncoder.encode(compImage != null ? compImage : "", "UTF-8") + "&latitude=" |
||||
|
+ URLEncoder.encode(latitude != null ? latitude : "", "UTF-8") + "&longtitude=" |
||||
|
+ URLEncoder.encode(longtitude != null ? longtitude : "", "UTF-8") + "&Landmark=" |
||||
|
+ URLEncoder.encode(landmark != null ? landmark : "", "UTF-8") + "&gender=" |
||||
|
+ URLEncoder.encode(gender != null ? gender : "", "UTF-8") + "&compmode=2"; |
||||
|
// Write parameters to request body |
||||
|
try (OutputStream os = conn.getOutputStream()) { |
||||
|
byte[] input = params.getBytes("UTF-8"); |
||||
|
os.write(input, 0, input.length); |
||||
|
} |
||||
|
|
||||
|
// Read the response |
||||
|
int responseCode = conn.getResponseCode(); |
||||
|
BufferedReader reader; |
||||
|
if (responseCode == HttpURLConnection.HTTP_OK) { |
||||
|
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(); |
||||
|
|
||||
|
// Return the response from the external API |
||||
|
//return ResponseEntity.status(responseCode).body(response.toString()); |
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
Map<String, String> responseMap = mapper.readValue(response.toString(), Map.class); |
||||
|
|
||||
|
String complaintNo = responseMap.getOrDefault("Complaint Number", "N/A"); |
||||
|
//System.out.println("complaintNo===="+complaintNo); |
||||
|
|
||||
|
return ResponseEntity.ok() |
||||
|
.contentType(MediaType.APPLICATION_JSON) |
||||
|
.body(Map.of("complaintNumber", complaintNo)); |
||||
|
|
||||
|
} catch (IOException e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body("An error occurred while processing the request."); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/updateComplaint") |
||||
|
public ResponseEntity<String> updateComplaint(@RequestParam("ComplaintId") String complaintId, |
||||
|
@RequestParam(value = "Message", required = false) String message, |
||||
|
@RequestParam(value = "Status") String status, |
||||
|
@RequestPart(value = "Comp_Image", required = false) MultipartFile compImage) { |
||||
|
|
||||
|
String userType = "Public"; |
||||
|
|
||||
|
//System.out.println("message:-" + message + "\n UserType:-" + userType + "\n Status:-" + status); |
||||
|
//System.out.println(compImage == null); |
||||
|
String externalUrl = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice"; |
||||
|
|
||||
|
try { |
||||
|
// Convert and compress the image to base64 if provided |
||||
|
String base64Image = null; |
||||
|
if (compImage != null && !compImage.isEmpty()) { |
||||
|
base64Image = compressAndEncodeToBase64(compImage); |
||||
|
//System.out.println("imageee" + base64Image); |
||||
|
} |
||||
|
|
||||
|
// Construct the POST body with parameters |
||||
|
String params = "serviceId=UpdateComplaint" + "&ComplaintId=" |
||||
|
+ URLEncoder.encode(complaintId != null ? complaintId : "", "UTF-8") + "&Message=" |
||||
|
+ URLEncoder.encode(message != null ? message : "", "UTF-8") + "&UserType=" |
||||
|
+ URLEncoder.encode(userType, "UTF-8") + "&Status=" |
||||
|
+ URLEncoder.encode(status != null ? status : "", "UTF-8") + "&Comp_Image=" |
||||
|
+ URLEncoder.encode(compImage != null ? base64Image : "", "UTF-8") |
||||
|
+ "&Token=718333469976265947044293"; |
||||
|
// Open connection and send POST request |
||||
|
URL url = new URL(externalUrl); |
||||
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
||||
|
conn.setRequestMethod("POST"); |
||||
|
conn.setDoOutput(true); |
||||
|
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); |
||||
|
|
||||
|
// Send parameters |
||||
|
OutputStream os = conn.getOutputStream(); |
||||
|
os.write(params.getBytes()); |
||||
|
os.flush(); |
||||
|
os.close(); |
||||
|
|
||||
|
// Handle the response |
||||
|
int responseCode = conn.getResponseCode(); |
||||
|
BufferedReader reader; |
||||
|
if (responseCode == HttpURLConnection.HTTP_OK) { |
||||
|
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(); |
||||
|
|
||||
|
return ResponseEntity.status(responseCode).body(response.toString()); |
||||
|
|
||||
|
} catch (IOException e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body("An error occurred while processing the request."); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private String compressAndEncodeToBase64(MultipartFile file) throws IOException { |
||||
|
// Convert MultipartFile to BufferedImage |
||||
|
BufferedImage originalImage = ImageIO.read(file.getInputStream()); |
||||
|
|
||||
|
// Resize/Compress the image |
||||
|
int targetWidth = 800; // You can adjust the width as needed |
||||
|
int targetHeight = (int) (originalImage.getHeight() * (800.0 / originalImage.getWidth())); // Preserve aspect |
||||
|
// ratio |
||||
|
|
||||
|
BufferedImage resizedImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB); |
||||
|
Graphics2D g = resizedImage.createGraphics(); |
||||
|
g.drawImage(originalImage, 0, 0, targetWidth, targetHeight, null); |
||||
|
g.dispose(); |
||||
|
|
||||
|
// Compress the image by writing it to a ByteArrayOutputStream in JPEG format |
||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
||||
|
ImageIO.write(resizedImage, "jpg", baos); // You can change the format to "png" or "jpg" |
||||
|
byte[] compressedBytes = baos.toByteArray(); |
||||
|
|
||||
|
// Convert the compressed image to base64 |
||||
|
return Base64.getEncoder().encodeToString(compressedBytes); |
||||
|
} |
||||
|
|
||||
|
////////////////////////////////////// PGR Check ////////////////////////////////////////// |
||||
|
|
||||
|
|
||||
|
@GetMapping("/checktypeforduplicate") |
||||
|
public ResponseEntity<?> getComplaintMatch( |
||||
|
@RequestParam("mobileNo") String mobileNo, |
||||
|
@RequestParam("complaintId") String complaintId, |
||||
|
@RequestParam("streetName") String streetName |
||||
|
) { |
||||
|
try { |
||||
|
// 1. Map complaintId to complaint title |
||||
|
Map<String, String> complaintIdToTitle = new HashMap<>(); |
||||
|
complaintIdToTitle.put("97", "Removal of Garbage"); |
||||
|
complaintIdToTitle.put("98", "Overflowing of Garbage Bin"); |
||||
|
complaintIdToTitle.put("99", "Removal of Debris"); |
||||
|
complaintIdToTitle.put("100", "Absenteeism of Sweepers"); |
||||
|
complaintIdToTitle.put("101", "Absenteeism of Door to door garbage Collector"); |
||||
|
complaintIdToTitle.put("102", "Improper Sweeping"); |
||||
|
complaintIdToTitle.put("103", "Provison of Garbage Bin"); |
||||
|
complaintIdToTitle.put("104", "Broken Bin"); |
||||
|
complaintIdToTitle.put("105", "Shifting of Garbage Bin"); |
||||
|
complaintIdToTitle.put("106", "Cleaning of Water Table"); |
||||
|
complaintIdToTitle.put("107", "Nuisance by Garbage Tractor/Truck"); |
||||
|
complaintIdToTitle.put("108", "Burning of Garbage"); |
||||
|
complaintIdToTitle.put("109", "Garbage Lorry without Net"); |
||||
|
complaintIdToTitle.put("110", "Spilling of Garbage from Lorry"); |
||||
|
complaintIdToTitle.put("111", "Burning of Garbage at Dumping Ground"); |
||||
|
complaintIdToTitle.put("112", "Pot hole fill up / Repairs to the damaged surface"); |
||||
|
complaintIdToTitle.put("113", "Relaying of Road"); |
||||
|
complaintIdToTitle.put("114", "Formation of New Road"); |
||||
|
complaintIdToTitle.put("115", "Repairs to existing Footpath"); |
||||
|
complaintIdToTitle.put("116", "Request to provide Footpath"); |
||||
|
complaintIdToTitle.put("117", "Removal of Shops in the Footpath"); |
||||
|
complaintIdToTitle.put("118", "Mosquito Menace"); |
||||
|
complaintIdToTitle.put("119", "Street Dogs"); |
||||
|
complaintIdToTitle.put("120", "Stray Cattle"); |
||||
|
complaintIdToTitle.put("121", "Stray Pigs"); |
||||
|
complaintIdToTitle.put("122", "Death of Stray Animals"); |
||||
|
complaintIdToTitle.put("123", "Public Health / Dengue / Malaria / Gastro Enteritis"); |
||||
|
complaintIdToTitle.put("124", "Transfer Station Smell"); |
||||
|
complaintIdToTitle.put("125", "Flies Menace from Dumping Ground"); |
||||
|
complaintIdToTitle.put("126", "Open Defecation"); |
||||
|
complaintIdToTitle.put("127", "Illegal Draining of Sewage to SWD / Open Site"); |
||||
|
complaintIdToTitle.put("128", "Complaints regarding unhygenic Restaurants"); |
||||
|
complaintIdToTitle.put("129", "Complaints regarding quality of food in hotels"); |
||||
|
complaintIdToTitle.put("130", "Road Side Eateries"); |
||||
|
complaintIdToTitle.put("131", "Slaughter House related complaints"); |
||||
|
complaintIdToTitle.put("132", "Unauthorized Sale of Meat and Meat products"); |
||||
|
complaintIdToTitle.put("133", "Illegal Slaughtering"); |
||||
|
complaintIdToTitle.put("134", "Unhygenic and Improper Transport of Meat and Livestock"); |
||||
|
complaintIdToTitle.put("135", "Biomedical waste / Health hazard waste removal"); |
||||
|
complaintIdToTitle.put("136", "Complaints regarding Corporation Hospitals"); |
||||
|
complaintIdToTitle.put("137", "Complaints regarding CDH"); |
||||
|
complaintIdToTitle.put("138", "Stagnation of Water"); |
||||
|
complaintIdToTitle.put("139", "Obstruction of Water Flow"); |
||||
|
complaintIdToTitle.put("140", "Desilting of Drain"); |
||||
|
complaintIdToTitle.put("141", "Desilting of Canal"); |
||||
|
complaintIdToTitle.put("142", "Repairs to Storm Water Drain"); |
||||
|
complaintIdToTitle.put("143", "Covering Manholes of Storm Water Drain"); |
||||
|
complaintIdToTitle.put("144", "New Drain Construction"); |
||||
|
complaintIdToTitle.put("145", "Disposal of Removed Silt on the Road"); |
||||
|
complaintIdToTitle.put("146", "Non burning of Street lights"); |
||||
|
complaintIdToTitle.put("147", "Electric shock due to street light"); |
||||
|
complaintIdToTitle.put("148", "Damage to the Electric pole"); |
||||
|
complaintIdToTitle.put("149", "New Street lights"); |
||||
|
complaintIdToTitle.put("150", "Shifting of Street light pole"); |
||||
|
complaintIdToTitle.put("151", "Overhead cable wires running in a haphazard manner"); |
||||
|
complaintIdToTitle.put("152", "Removal of Fallen Trees"); |
||||
|
complaintIdToTitle.put("153", "Complaints regarding Park"); |
||||
|
complaintIdToTitle.put("154", "Complaints regarding Playground"); |
||||
|
complaintIdToTitle.put("155", "Complaints regarding Centre Median"); |
||||
|
complaintIdToTitle.put("156", "Complaints regarding Traffic Island"); |
||||
|
complaintIdToTitle.put("157", "Unauthorized Tree Cutting"); |
||||
|
complaintIdToTitle.put("158", "Obstruction of Trees"); |
||||
|
complaintIdToTitle.put("159", "Complaints regarding Public Toilets"); |
||||
|
complaintIdToTitle.put("160", "Complaints regarding Free Usage of Public Toilets"); |
||||
|
complaintIdToTitle.put("161", "Complaints regarding Cleanliness of Toilets in Theatre"); |
||||
|
complaintIdToTitle.put("162", "Complaints regarding Cleanliness of Toilets in Shopping Complex"); |
||||
|
complaintIdToTitle.put("163", "Building Plan Sanction"); |
||||
|
complaintIdToTitle.put("164", "Violation of DCR/Building By laws"); |
||||
|
complaintIdToTitle.put("165", "Unauthorized / Illegal Construction"); |
||||
|
complaintIdToTitle.put("166", "Complaints related to Property Tax"); |
||||
|
complaintIdToTitle.put("167", "Complaints related to Professional Tax"); |
||||
|
complaintIdToTitle.put("168", "Complaints related to Trade Licence"); |
||||
|
complaintIdToTitle.put("174", "Name Error (Spelling Related)"); |
||||
|
complaintIdToTitle.put("175", "Change of Address in Electoral Roll"); |
||||
|
complaintIdToTitle.put("176", "Issue of Voter ID"); |
||||
|
complaintIdToTitle.put("177", "Inclusion, Deletion, Correction in Voter List"); |
||||
|
complaintIdToTitle.put("178", "Complaints regarding Voter List"); |
||||
|
complaintIdToTitle.put("179", "Name not found in the Electoral Roll"); |
||||
|
complaintIdToTitle.put("180", "Issue of Birth and Death Certificate"); |
||||
|
complaintIdToTitle.put("181", "Encroachment on the Public Property"); |
||||
|
complaintIdToTitle.put("182", " Complaints related to Schools"); |
||||
|
complaintIdToTitle.put("183", "Sanction of Financial Assistance under Moovalaur Thirumana Thittam"); |
||||
|
complaintIdToTitle.put("184", "Complaints related to issue of all types of Registration Certificate"); |
||||
|
complaintIdToTitle.put("185", "Slow Progress of Work"); |
||||
|
complaintIdToTitle.put("186", "Poor Quality of Work"); |
||||
|
complaintIdToTitle.put("187", "Unauthorized Advertisement Boards"); |
||||
|
complaintIdToTitle.put("188", "Complaints regarding Bridges / Flyovers / Subways"); |
||||
|
complaintIdToTitle.put("189", "Complaints related Shopping Complex"); |
||||
|
complaintIdToTitle.put("190", "Complaints regarding Community Hall"); |
||||
|
complaintIdToTitle.put("191", "Complaints regarding Burial Ground"); |
||||
|
complaintIdToTitle.put("192", "Complaints regarding any other CoC building"); |
||||
|
complaintIdToTitle.put("193", "Parking Issue"); |
||||
|
complaintIdToTitle.put("195", "Complaints Regarding Plastics"); |
||||
|
complaintIdToTitle.put("196", "No electricity in public toilet"); |
||||
|
complaintIdToTitle.put("197", "No water supply in public toilet"); |
||||
|
complaintIdToTitle.put("198", "Public toilet blockage"); |
||||
|
complaintIdToTitle.put("199", "Public toilet cleaning"); |
||||
|
complaintIdToTitle.put("200", "Burning of street light in daytime"); |
||||
|
complaintIdToTitle.put("201", "Illegal Parking on foot path"); |
||||
|
complaintIdToTitle.put("202", "Complaints regarding non availability of Doctors"); |
||||
|
complaintIdToTitle.put("203", "Complaints regarding non availability of medicines"); |
||||
|
complaintIdToTitle.put("204", "Complaints regarding laboratory issues"); |
||||
|
complaintIdToTitle.put("205", "Issues regarding amma baby care kits (After Delivery)"); |
||||
|
complaintIdToTitle.put("206", "Issues regarding Amma nutrition kit for pregnant woman"); |
||||
|
complaintIdToTitle.put("207", "Issues regarding Muthulakshmi Reddy Maternity Benefit Scheme (MRMBS)"); |
||||
|
complaintIdToTitle.put("208", "Issues regarding janani suraksha yojana scheme (JSY)"); |
||||
|
complaintIdToTitle.put("209", "Travel pass related complaints"); |
||||
|
complaintIdToTitle.put("210", "Food related complaints"); |
||||
|
complaintIdToTitle.put("212", "Covid Health Related Queries"); |
||||
|
complaintIdToTitle.put("213", "Hospital and Covid care centre(CCC) Related Queries"); |
||||
|
complaintIdToTitle.put("214", "Medical Emergencies"); |
||||
|
complaintIdToTitle.put("215", "Essentials and Medicines"); |
||||
|
complaintIdToTitle.put("216", "PSYCHO-SOCIO support"); |
||||
|
complaintIdToTitle.put("218", "Quarantine and isolation Related Queries"); |
||||
|
complaintIdToTitle.put("219", "General Health Queries"); |
||||
|
complaintIdToTitle.put("220", "Disinfection request"); |
||||
|
complaintIdToTitle.put("221", "Non Covid Health Related Queries"); |
||||
|
complaintIdToTitle.put("222", "Milling/Scraping of Road before Relaying of Road"); |
||||
|
complaintIdToTitle.put("226", "Food Requirement"); |
||||
|
complaintIdToTitle.put("227", "Relief Center Requirement"); |
||||
|
complaintIdToTitle.put("228", "Covid19 Ambulance Service"); |
||||
|
complaintIdToTitle.put("229", "Air Quality"); |
||||
|
complaintIdToTitle.put("230", "Online Payment Issue"); |
||||
|
complaintIdToTitle.put("231", "General Revision Objection"); |
||||
|
complaintIdToTitle.put("232", "Water Mixed with Sewarage"); |
||||
|
complaintIdToTitle.put("233", "Sewerage Overflow"); |
||||
|
complaintIdToTitle.put("234", "Drinking water supply"); |
||||
|
complaintIdToTitle.put("235", "Electricity Shock"); |
||||
|
complaintIdToTitle.put("236", "Electricity Unavailability"); |
||||
|
complaintIdToTitle.put("237", "Insufficient Barricading"); |
||||
|
complaintIdToTitle.put("238", "Fallen poles/towers/hoardings/other infra"); |
||||
|
complaintIdToTitle.put("239", "Fallen EB cables"); |
||||
|
complaintIdToTitle.put("240", "Project information not provided (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("241", "Project information not provided (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("242", "Project information not provided (MC Road)"); |
||||
|
complaintIdToTitle.put("243", "Project information not provided (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("244", "Project information not provided (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("245", "Project information not provided (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("246", "Advance information on consultation not provided (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("247", "Advance information on consultation not provided (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("248", "Advance information on consultation not provided (MC Road)"); |
||||
|
complaintIdToTitle.put("249", "Advance information on consultation not provided (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("250", "Advance information on consultation not provided (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("251", "Advance information on consultation not provided (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("252", "Location and area of consultation not provided (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("253", "Location and area of consultation not provided (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("254", "Location and area of consultation not provided (MC Road)"); |
||||
|
complaintIdToTitle.put("255", "Location and area of consultation not provided (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("256", "Location and area of consultation not provided (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("257", "Location and area of consultation not provided (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("258", "Information on detailed work plan not provided (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("259", "Information on detailed work plan not provided (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("260", "Information on detailed work plan not provided (MC Road)"); |
||||
|
complaintIdToTitle.put("261", "Information on detailed work plan not provided (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("262", "Information on detailed work plan not provided (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("263", "Information on detailed work plan not provided (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("264", "Others (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("265", "Others (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("266", "Others (MC Road)"); |
||||
|
complaintIdToTitle.put("267", "Others (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("268", "Others (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("269", "Others (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("270", "No information in advance provided on the date and time of civil works (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("271", "No information in advance provided on the date and time of civil works (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("272", "No information in advance provided on the date and time of civil works (MC Road)"); |
||||
|
complaintIdToTitle.put("273", "No information in advance provided on the date and time of civil works (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("274", "No information in advance provided on the date and time of civil works (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("275", "No information in advance provided on the date and time of civil works (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("276", "No information provided on the nature and schedule of civil work (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("277", "No information provided on the nature and schedule of civil work (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("278", "No information provided on the nature and schedule of civil work (MC Road)"); |
||||
|
complaintIdToTitle.put("279", "No information provided on the nature and schedule of civil work (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("280", "No information provided on the nature and schedule of civil work (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("281", "No information provided on the nature and schedule of civil work (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("282", "No consultation carried out with the people affected by the civil works (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("283", "No consultation carried out with the people affected by the civil works (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("284", "No consultation carried out with the people affected by the civil works (MC Road)"); |
||||
|
complaintIdToTitle.put("285", "No consultation carried out with the people affected by the civil works (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("286", "No consultation carried out with the people affected by the civil works (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("287", "No consultation carried out with the people affected by the civil works (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("288", "No arrangement made for temporary displacement (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("289", "No arrangement made for temporary displacement (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("290", "No arrangement made for temporary displacement (MC Road)"); |
||||
|
complaintIdToTitle.put("291", "No arrangement made for temporary displacement (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("292", "No arrangement made for temporary displacement (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("293", "No arrangement made for temporary displacement (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("294", "No display board on the project installed at work site (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("295", "No display board on the project installed at work site (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("296", "No display board on the project installed at work site (MC Road)"); |
||||
|
complaintIdToTitle.put("297", "No display board on the project installed at work site (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("298", "No display board on the project installed at work site (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("299", "No display board on the project installed at work site (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("300", "Temporary access to structures not provided and or not adequate (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("301", "Temporary access to structures not provided and or not adequate (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("302", "Temporary access to structures not provided and or not adequate (MC Road)"); |
||||
|
complaintIdToTitle.put("303", "Temporary access to structures not provided and or not adequate (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("304", "Temporary access to structures not provided and or not adequate (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("305", "Temporary access to structures not provided and or not adequate (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("306", "No safety measures taken at worksite (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("307", "No safety measures taken at worksite (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("308", "No safety measures taken at worksite (MC Road)"); |
||||
|
complaintIdToTitle.put("309", "No safety measures taken at worksite (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("310", "No safety measures taken at worksite (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("311", "No safety measures taken at worksite (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("312", "Water supply disrupted and alternate arrangement not provided (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("313", "Water supply disrupted and alternate arrangement not provided (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("314", "Water supply disrupted and alternate arrangement not provided (MC Road)"); |
||||
|
complaintIdToTitle.put("315", "Water supply disrupted and alternate arrangement not provided (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("316", "Water supply disrupted and alternate arrangement not provided (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("317", "Water supply disrupted and alternate arrangement not provided (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("318", "Electricity supply disrupted and alternate arrangement not provided (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("319", "Electricity supply disrupted and alternate arrangement not provided (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("320", "Electricity supply disrupted and alternate arrangement not provided (MC Road)"); |
||||
|
complaintIdToTitle.put("321", "Electricity supply disrupted and alternate arrangement not provided (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("322", "Electricity supply disrupted and alternate arrangement not provided (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("323", "Electricity supply disrupted and alternate arrangement not provided (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("324", "Disposal of debris not appropriately managed (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("325", "Disposal of debris not appropriately managed (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("326", "Disposal of debris not appropriately managed (MC Road)"); |
||||
|
complaintIdToTitle.put("327", "Disposal of debris not appropriately managed (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("328", "Disposal of debris not appropriately managed (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("329", "Disposal of debris not appropriately managed (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("330", " Temporary arrangement for parking not provided (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("331", " Temporary arrangement for parking not provided (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("332", " Temporary arrangement for parking not provided (MC Road)"); |
||||
|
complaintIdToTitle.put("333", " Temporary arrangement for parking not provided (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("334", " Temporary arrangement for parking not provided (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("335", " Temporary arrangement for parking not provided (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("336", "GRM and helpline numbers not displayed at worksite (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("337", "GRM and helpline numbers not displayed at worksite (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("338", "GRM and helpline numbers not displayed at worksite (MC Road)"); |
||||
|
complaintIdToTitle.put("339", "GRM and helpline numbers not displayed at worksite (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("340", "GRM and helpline numbers not displayed at worksite (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("341", "GRM and helpline numbers not displayed at worksite (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("342", "Drinking water/ other basic needs for Labour not available at worksite (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("343", "Drinking water/ other basic needs for Labour not available at worksite (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("344", "Drinking water/ other basic needs for Labour not available at worksite (MC Road)"); |
||||
|
complaintIdToTitle.put("345", "Drinking water/ other basic needs for Labour not available at worksite (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("346", "Drinking water/ other basic needs for Labour not available at worksite (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("347", "Drinking water/ other basic needs for Labour not available at worksite (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("348", "Noise levels are very high (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("349", "Noise levels are very high (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("350", "Noise levels are very high (MC Road)"); |
||||
|
complaintIdToTitle.put("351", "Noise levels are very high (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("352", "Noise levels are very high (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("353", "Noise levels are very high (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("354", " Sprinkling of water at worksite not carried out (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("355", " Sprinkling of water at worksite not carried out (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("356", " Sprinkling of water at worksite not carried out (MC Road)"); |
||||
|
complaintIdToTitle.put("357", " Sprinkling of water at worksite not carried out (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("358", " Sprinkling of water at worksite not carried out (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("359", " Sprinkling of water at worksite not carried out (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("360", "The worksite is not barricaded; (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("361", "The worksite is not barricaded; (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("362", "The worksite is not barricaded; (MC Road)"); |
||||
|
complaintIdToTitle.put("363", "The worksite is not barricaded; (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("364", "The worksite is not barricaded; (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("365", "The worksite is not barricaded; (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("366", " No information on number of labour working at the site (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("367", " No information on number of labour working at the site (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("368", " No information on number of labour working at the site (MC Road)"); |
||||
|
complaintIdToTitle.put("369", " No information on number of labour working at the site (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("370", " No information on number of labour working at the site (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("371", " No information on number of labour working at the site (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("372", "Labourer not using the safety equipment (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("373", "Labourer not using the safety equipment (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("374", "Labourer not using the safety equipment (MC Road)"); |
||||
|
complaintIdToTitle.put("375", "Labourer not using the safety equipment (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("376", "Labourer not using the safety equipment (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("377", "Labourer not using the safety equipment (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("378", "Sewerage pipe is damaged (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("379", "Sewerage pipe is damaged (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("380", "Sewerage pipe is damaged (MC Road)"); |
||||
|
complaintIdToTitle.put("381", "Sewerage pipe is damaged (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("382", "Sewerage pipe is damaged (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("383", "Sewerage pipe is damaged (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("384", "Others (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("385", "Others (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("386", "Others (MC Road)"); |
||||
|
complaintIdToTitle.put("387", "Others (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("388", "Others (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("389", "Others (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("390", "Insufficient Barricading (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("391", "Insufficient Barricading (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("392", "Insufficient Barricading (MC Road)"); |
||||
|
complaintIdToTitle.put("393", "Insufficient Barricading (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("394", "Insufficient Barricading (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("395", "Insufficient Barricading (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("396", "Non Removal of Debris (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("397", "Non Removal of Debris (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("398", "Non Removal of Debris (MC Road)"); |
||||
|
complaintIdToTitle.put("399", "Non Removal of Debris (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("400", "Non Removal of Debris (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("401", "Non Removal of Debris (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("402", "Potholes fill up (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("403", "Potholes fill up (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("404", "Potholes fill up (MC Road)"); |
||||
|
complaintIdToTitle.put("405", "Potholes fill up (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("406", "Potholes fill up (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("407", "Potholes fill up (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("408", "Damage to utilities (TNEB, CMWSSB, BSNL) (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("409", "Damage to utilities (TNEB, CMWSSB, BSNL) (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("410", "Damage to utilities (TNEB, CMWSSB, BSNL) (MC Road)"); |
||||
|
complaintIdToTitle.put("411", "Damage to utilities (TNEB, CMWSSB, BSNL) (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("412", "Damage to utilities (TNEB, CMWSSB, BSNL) (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("413", "Damage to utilities (TNEB, CMWSSB, BSNL) (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("414", "Encroaching Public Space (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("415", "Encroaching Public Space (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("416", "Encroaching Public Space (MC Road)"); |
||||
|
complaintIdToTitle.put("417", "Encroaching Public Space (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("418", "Encroaching Public Space (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("419", "Encroaching Public Space (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("420", "Need Pathway ramp (Thiruvotriyur High Road)"); |
||||
|
complaintIdToTitle.put("421", "Need Pathway ramp (Arunachaleshwar Road)"); |
||||
|
complaintIdToTitle.put("422", "Need Pathway ramp (MC Road)"); |
||||
|
complaintIdToTitle.put("423", "Need Pathway ramp (Washermenpet Metro)"); |
||||
|
complaintIdToTitle.put("424", "Need Pathway ramp (Khadar Nawas Khan Road)"); |
||||
|
complaintIdToTitle.put("425", "Need Pathway ramp (Race Course road + Guindy MMI)"); |
||||
|
complaintIdToTitle.put("426", "Cleanliness in Parks"); |
||||
|
complaintIdToTitle.put("427", "Greenary in Parks"); |
||||
|
complaintIdToTitle.put("428", "Play Equipment"); |
||||
|
complaintIdToTitle.put("429", "Opening and closing hours"); |
||||
|
complaintIdToTitle.put("430", "Toilets in parks"); |
||||
|
complaintIdToTitle.put("431", "Non functional lights/ no lights in parks"); |
||||
|
complaintIdToTitle.put("432", "Safety in parks/playgrounds"); |
||||
|
complaintIdToTitle.put("433", "Women related safety issues in parks"); |
||||
|
complaintIdToTitle.put("434", "Availability or cleanliness of dustbins in public toilets"); |
||||
|
complaintIdToTitle.put("435", "Cleanliness/ water supply in toilets"); |
||||
|
complaintIdToTitle.put("436", "Broken sinks, toilets or urinals and doors"); |
||||
|
complaintIdToTitle.put("437", "Request for new toilet"); |
||||
|
complaintIdToTitle.put("438", "Illegal activities in toilet"); |
||||
|
complaintIdToTitle.put("439", "Toilets not in use/ closed"); |
||||
|
complaintIdToTitle.put("440", "Inadequate lighting in and around the toilet"); |
||||
|
complaintIdToTitle.put("441", "Safety in public toilets"); |
||||
|
complaintIdToTitle.put("442", "Cleanliness in footpath"); |
||||
|
complaintIdToTitle.put("443", "Electrical wires/obstruction on footpath"); |
||||
|
complaintIdToTitle.put("444", "Unsafe dark spots/ corners"); |
||||
|
complaintIdToTitle.put("445", "Public defecation/urination"); |
||||
|
complaintIdToTitle.put("446", "Women related safety issues"); |
||||
|
complaintIdToTitle.put("447", "Inadequate light in a particular location or spot/ dark spots"); |
||||
|
|
||||
|
String expectedType; |
||||
|
if (complaintIdToTitle.containsKey(complaintId)) { |
||||
|
expectedType = complaintIdToTitle.get(complaintId).trim().toLowerCase(); |
||||
|
} else { |
||||
|
// Fallback: Use sub-type text directly if not found in map (i.e. for "Others") |
||||
|
expectedType = complaintId.trim().toLowerCase(); |
||||
|
} |
||||
|
|
||||
|
// 2. Date range: last 7 days |
||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); |
||||
|
LocalDate today = LocalDate.now(); |
||||
|
String endDate = today.format(formatter); |
||||
|
String startDate = today.minusDays(7).format(formatter); |
||||
|
int repYear = today.getYear(); |
||||
|
|
||||
|
// 3. Construct external URL |
||||
|
String externalUrl = String.format( |
||||
|
"https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=getComplaintListWithImg" + |
||||
|
"&From_date=%s&To_date=%s&jsonResp=Yes&UserType=Public&Token=&PageIndex=null&Status=null&repYear=%d&MobileNo=%s", |
||||
|
startDate, endDate, repYear, mobileNo |
||||
|
); |
||||
|
|
||||
|
System.out.println("External API URL: " + externalUrl); |
||||
|
|
||||
|
// 4. Fetch and parse response |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
String json = restTemplate.getForObject(externalUrl, String.class); |
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
JsonNode rootArray = mapper.readTree(json); |
||||
|
|
||||
|
boolean found = false; |
||||
|
|
||||
|
if (rootArray.isArray() && rootArray.size() > 0) { |
||||
|
JsonNode complaintList = rootArray.get(0).path("ComplaintListHistory"); |
||||
|
|
||||
|
if (complaintList.isArray()) { |
||||
|
for (JsonNode item : complaintList) { |
||||
|
String type = item.path("complainttype").asText("").trim().toLowerCase(); |
||||
|
String street = item.path("Street").asText("").trim().toLowerCase(); |
||||
|
|
||||
|
if (type.equals(expectedType) && |
||||
|
street.equals(streetName.trim().toLowerCase())) { |
||||
|
found = true; |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 5. Return response |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
response.put("duplicate", found); |
||||
|
return ResponseEntity.ok(response); |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body(Collections.singletonMap("error", "Failed to process the request")); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,31 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("/gcc/callcenterqaqccomplaintstatus") |
||||
|
@Controller("callCenterQaQcComplaintStatusController") |
||||
|
public class ComplaintStatusMainController { |
||||
|
|
||||
|
@GetMapping("/complaintstatus") |
||||
|
public String viewstatuscheck(Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(LoginUserId); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String agent_name=LoginUserInfo.getCurrentUserDetails().getUsername(); |
||||
|
model.addAttribute("agent_name", agent_name); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
|
||||
|
return "modules/callcenterqaqc/complaintstatus"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,278 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.time.LocalDate; |
||||
|
import java.time.format.DateTimeFormatter; |
||||
|
import java.util.Collections; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
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.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.client.HttpClientErrorException; |
||||
|
import org.springframework.web.client.HttpServerErrorException; |
||||
|
import org.springframework.web.client.ResourceAccessException; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
|
||||
|
|
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.DomesticWasteService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/gcc/api/domestic_waste") |
||||
|
public class DomesticWasteApiController { |
||||
|
|
||||
|
@Autowired |
||||
|
private AppConfig appConfig; |
||||
|
|
||||
|
@Autowired |
||||
|
private RestTemplate restTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
private DomesticWasteService domesticWasteService; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/getitems") |
||||
|
public ResponseEntity<Map<String, Object>> getItemsList() { |
||||
|
String apiUrl = appConfig.domesticurl + "/get-all-masters"; |
||||
|
Map<String, Object> responseMap = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
String response = restTemplate.getForObject(apiUrl, String.class); |
||||
|
|
||||
|
responseMap.put("status", "success"); |
||||
|
responseMap.put("data", new ObjectMapper().readValue(response, Object.class)); // parse JSON array into list |
||||
|
return ResponseEntity.ok(responseMap); |
||||
|
|
||||
|
} catch (HttpClientErrorException | HttpServerErrorException ex) { |
||||
|
responseMap.put("status", "error"); |
||||
|
responseMap.put("code", ex.getStatusCode().value()); |
||||
|
responseMap.put("message", ex.getStatusText()); |
||||
|
responseMap.put("details", ex.getResponseBodyAsString()); |
||||
|
return ResponseEntity.status(ex.getStatusCode()).body(responseMap); |
||||
|
|
||||
|
} catch (ResourceAccessException ex) { |
||||
|
responseMap.put("status", "error"); |
||||
|
responseMap.put("code", HttpStatus.SERVICE_UNAVAILABLE.value()); |
||||
|
responseMap.put("message", "Service unavailable"); |
||||
|
responseMap.put("details", ex.getMessage()); |
||||
|
return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).body(responseMap); |
||||
|
|
||||
|
} catch (Exception ex) { |
||||
|
responseMap.put("status", "error"); |
||||
|
responseMap.put("code", HttpStatus.INTERNAL_SERVER_ERROR.value()); |
||||
|
responseMap.put("message", "Unexpected error"); |
||||
|
responseMap.put("details", ex.getMessage()); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseMap); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/saverequest") |
||||
|
public ResponseEntity<?> saveRequest( |
||||
|
@RequestParam String user_name, |
||||
|
@RequestParam String mobile, |
||||
|
@RequestParam String address, |
||||
|
@RequestParam String latitude, |
||||
|
@RequestParam String longitude, |
||||
|
@RequestParam String street_name, |
||||
|
@RequestParam String street_id, |
||||
|
@RequestParam String remarks, |
||||
|
@RequestParam("items") String itemsJson, |
||||
|
@RequestParam String userId,@RequestParam String zone,@RequestParam String ward) { |
||||
|
|
||||
|
try { |
||||
|
Map<String, Object> result = domesticWasteService.saveMultipleWasteRequests( |
||||
|
user_name, mobile, address, |
||||
|
latitude, longitude, |
||||
|
street_name, street_id, remarks, |
||||
|
itemsJson,userId,zone,ward |
||||
|
); |
||||
|
|
||||
|
return ResponseEntity.ok(result); |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(500).body(Map.of("status", false, "message", e.getMessage())); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getalldomesticwastelist") |
||||
|
public Map<String, Object> getFilterReports( |
||||
|
@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate, |
||||
|
@RequestParam(required = false) String mobile, |
||||
|
@RequestParam(required = false) String requestId) { |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
System.out.println("startDate="+startDate); |
||||
|
System.out.println("endDate="+endDate); |
||||
|
System.out.println("mobile="+mobile); |
||||
|
System.out.println("requestId="+requestId); |
||||
|
|
||||
|
List<Map<String, Object>> details =domesticWasteService.getAllComplaintsList(startDate,endDate,mobile,requestId) ; |
||||
|
System.out.println(details); |
||||
|
if (details == null || details.isEmpty()) { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("message", "No Data"); |
||||
|
} |
||||
|
else { |
||||
|
response.put("status", "success"); |
||||
|
response.put("details", details); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
catch (Exception e) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "An error occurred while fetching data."); |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/checkstatusbymobile") |
||||
|
public Map<String, Object> getStatusByMobileNumber( |
||||
|
@RequestParam(required = false) String mobile) { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
try { |
||||
|
System.out.println("mobile=" + mobile); |
||||
|
|
||||
|
// Construct external API URL |
||||
|
String url = appConfig.domesticurl + "/get-user-bymobile?mobile=" + mobile; |
||||
|
|
||||
|
// Call the external API |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
ResponseEntity<String> apiResponse = restTemplate.getForEntity(url, String.class); |
||||
|
|
||||
|
if (apiResponse.getStatusCode().is2xxSuccessful() && apiResponse.getBody() != null) { |
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
|
||||
|
// Convert JSON string to List of Maps |
||||
|
List<Map<String, Object>> itemsList = mapper.readValue(apiResponse.getBody(), |
||||
|
new TypeReference<List<Map<String, Object>>>() {}); |
||||
|
|
||||
|
if (itemsList.isEmpty()) { |
||||
|
response.put("status", "no data"); |
||||
|
response.put("data", Collections.emptyList()); |
||||
|
} else { |
||||
|
response.put("status", "success"); |
||||
|
response.put("data", itemsList); |
||||
|
} |
||||
|
} else { |
||||
|
response.put("status", "no data"); |
||||
|
response.put("data", Collections.emptyList()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/getpendingcomplaints") |
||||
|
public Map<String, Object> getpendingcomplaints( |
||||
|
@RequestParam String startDate, |
||||
|
@RequestParam String endDate, |
||||
|
@RequestParam (required = false) String mobile) { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
try { |
||||
|
|
||||
|
List<Map<String,Object>> list = domesticWasteService.getpendingcomplaints(startDate,endDate,mobile); |
||||
|
|
||||
|
if (!list.isEmpty()) { |
||||
|
|
||||
|
response.put("status", "success"); |
||||
|
response.put("data", list); |
||||
|
|
||||
|
} else { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("data", Collections.emptyList()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getDetailsByReqId") |
||||
|
public Map<String, Object> getDetailsByReqId( |
||||
|
@RequestParam String requestId) { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
try { |
||||
|
|
||||
|
List<Map<String,Object>> list = domesticWasteService.getDetailsByReqId(requestId); |
||||
|
|
||||
|
if (!list.isEmpty()) { |
||||
|
|
||||
|
response.put("status", "success"); |
||||
|
response.put("data", list); |
||||
|
|
||||
|
} else { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("data", Collections.emptyList()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/cancelbyagents") |
||||
|
public ResponseEntity<Map<String, Object>> saveAnswer(@RequestParam String requestId,@RequestParam String remarks,@RequestParam String userId) { |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
boolean success = domesticWasteService.changeStatus(requestId,remarks,userId); |
||||
|
if (success) { |
||||
|
response.put("status", "success"); |
||||
|
response.put("message", "Complaint cancelled successfully!"); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} else { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Fail to Update."); |
||||
|
return ResponseEntity.status(500).body(response); |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Exception: " + e.getMessage()); |
||||
|
return ResponseEntity.status(500).body(response); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,73 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcAgentsService; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("/gcc/domestic_waste") |
||||
|
@Controller("callCenterDomesticWasteController") |
||||
|
public class DomesticWasteMainController { |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcAgentsService agentsService; |
||||
|
|
||||
|
@GetMapping("/registerpage") |
||||
|
public String viewDomesticWastepage(Model model) { |
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("userId",userId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
return "modules/callcenterqaqc/domesticwastecomplaints"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/checkstatus") |
||||
|
public String viewComplaintspage(Model model) { |
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("userId",userId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
return "modules/callcenterqaqc/domesticwastecheckstatus"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/cancelpage") |
||||
|
public String viewpendingpage(Model model) { |
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("userId",userId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
return "modules/callcenterqaqc/domesticwastecancel"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,85 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
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; |
||||
|
import org.springframework.web.bind.annotation.ResponseBody; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.FollowUpService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcCallsService; |
||||
|
|
||||
|
@RequestMapping("gcc/api/callcenterqaqc/agent/followupcalls") |
||||
|
@RestController |
||||
|
public class FollowUpController { |
||||
|
|
||||
|
@Autowired |
||||
|
RestTemplate restTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcCallsService qaqcCallsService; |
||||
|
|
||||
|
@Autowired |
||||
|
private FollowUpService followService; |
||||
|
|
||||
|
@PostMapping("/update") |
||||
|
@ResponseBody |
||||
|
public ResponseEntity<String> updateCallDetails(@RequestParam("complaintNumber") String complaintNumber, |
||||
|
@RequestParam("dataId") int dataId, |
||||
|
@RequestParam("userId") String userId, |
||||
|
@RequestParam("action") String action, |
||||
|
@RequestParam(value = "remainderDate", required = false,defaultValue = "-") String remainderDate, |
||||
|
@RequestParam("remarks") String remarks) { |
||||
|
try { |
||||
|
// System.out.println("Updating Complaint Number: " + complaintNumber); |
||||
|
// System.out.println("Updating Data ID: " + dataId); |
||||
|
// System.out.println("Action: " + action); |
||||
|
// System.out.println("Remarks: " + remarks); |
||||
|
int updated_agent = Integer.parseInt(userId); |
||||
|
// System.out.println("updated_agent: " + updated_agent); |
||||
|
|
||||
|
Map<String, Object> complaintDetails = qaqcCallsService.getComplaintDetails(dataId); |
||||
|
|
||||
|
Integer agentId = (Integer) complaintDetails.get("agent_id"); |
||||
|
Map<String, Object> erp_username=qaqcCallsService.getErpnameById(agentId); |
||||
|
String Erpname=(String) erp_username.get("erp_username"); |
||||
|
|
||||
|
if ("WRONG_ASSIGN".equals(action)) { |
||||
|
|
||||
|
boolean statusUpdated = qaqcCallsService.ChangeStatusInErp(complaintNumber, remarks, action, Erpname); |
||||
|
|
||||
|
if (!statusUpdated) { |
||||
|
return ResponseEntity.ok("error"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Update complaint details |
||||
|
followService.updateFollowupComplaintDetails(complaintNumber, dataId, action, remarks,updated_agent); |
||||
|
followService.updateComplaintHistoryDetails(complaintNumber, dataId, action, remarks,updated_agent, remainderDate); |
||||
|
|
||||
|
Map<String, Object> logDetails = qaqcCallsService.getComplaintDetails(dataId); |
||||
|
// Upload to logs |
||||
|
followService.uploadComplaintDetailsInLogs(logDetails, action, complaintNumber,remainderDate); |
||||
|
|
||||
|
return ResponseEntity.ok("Success"); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getoffsubmittedcalls") |
||||
|
public List<Map<String, Object>> getFollowupSubmitDetails(@RequestParam int userId) |
||||
|
{ |
||||
|
return followService.getFollowupSubmitDetails(userId); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,96 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
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 com.fasterxml.jackson.databind.JsonNode; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.InprogresscallService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcCallsService; |
||||
|
|
||||
|
@RequestMapping("gcc/api/callcenterqaqc/agent/inprogresscalls") |
||||
|
@RestController |
||||
|
|
||||
|
public class InprogresscallController { |
||||
|
|
||||
|
@Autowired |
||||
|
InprogresscallService inprogresscallService; |
||||
|
|
||||
|
@Autowired |
||||
|
RestTemplate restTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcCallsService qaqcCallsService; |
||||
|
|
||||
|
@PostMapping("/update") |
||||
|
@ResponseBody |
||||
|
public ResponseEntity<String> updateCallDetails(@RequestParam("complaintNumber") String complaintNumber, |
||||
|
@RequestParam("dataId") int dataId, |
||||
|
@RequestParam("userId") String userId, |
||||
|
@RequestParam("action") String action, |
||||
|
@RequestParam(value = "remainderDate", required = false,defaultValue = "-") String remainderDate, |
||||
|
@RequestParam("remarks") String remarks) { |
||||
|
try { |
||||
|
// System.out.println("Updating Complaint Number: " + complaintNumber); |
||||
|
// System.out.println("Updating Data ID: " + dataId); |
||||
|
// System.out.println("Action: " + action); |
||||
|
// System.out.println("Remarks: " + remarks); |
||||
|
int updated_agent = Integer.parseInt(userId); |
||||
|
// System.out.println("updated_agent: " + updated_agent); |
||||
|
|
||||
|
//to insert incorrect office mobile number details in table |
||||
|
if (action.equals("MOBILE_NUM")) { |
||||
|
inprogresscallService.saveMobileNumDetails(complaintNumber, remarks); |
||||
|
} |
||||
|
|
||||
|
Map<String, Object> complaintDetails = qaqcCallsService.getComplaintDetails(dataId); |
||||
|
|
||||
|
Integer agentId = (Integer) complaintDetails.get("agent_id"); |
||||
|
Map<String, Object> erp_username=qaqcCallsService.getErpnameById(agentId); |
||||
|
String Erpname=(String) erp_username.get("erp_username"); |
||||
|
|
||||
|
if ("WRONG_ASSIGN".equals(action)) { |
||||
|
|
||||
|
boolean statusUpdated = qaqcCallsService.ChangeStatusInErp(complaintNumber, remarks, action, Erpname); |
||||
|
|
||||
|
if (!statusUpdated) { |
||||
|
return ResponseEntity.ok("error"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Update complaint details |
||||
|
inprogresscallService.updateInprogressComplaintDetails(complaintNumber, dataId, action, remarks,updated_agent); |
||||
|
inprogresscallService.updateComplaintHistoryDetails(complaintNumber, dataId, action, remarks,updated_agent, remainderDate); |
||||
|
Map<String, Object> logDetails = qaqcCallsService.getComplaintDetails(dataId); |
||||
|
// Upload to logs |
||||
|
qaqcCallsService.uploadComplaintDetailsInLogs(logDetails, action, complaintNumber,remainderDate); |
||||
|
|
||||
|
return ResponseEntity.ok("Success"); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getinprogresssubmittedcalls") |
||||
|
public List<Map<String, Object>> getInprogressSubmitDetails(@RequestParam int userId) |
||||
|
{ |
||||
|
return inprogresscallService.getInprogressSubmitDetails(userId); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,370 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.time.LocalDate; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
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 in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.FollowUpService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.InprogresscallService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.PublicFollowUpService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcAdminSettingService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcAgentsService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcCallsService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcService; |
||||
|
import in.gov.chennaicorporation.gccoffice.entity.AppUserEntity; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
|
||||
|
@RequestMapping("/gcc/callcenterqaqc") |
||||
|
@Controller("callCenterQaQcMainController") |
||||
|
public class MainController { |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcService qaqcService; |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcAgentsService agentsService; |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcAdminSettingService adminService; |
||||
|
|
||||
|
@Autowired |
||||
|
private InprogresscallService inprogresscallService; |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcCallsService qaqcCallsService; |
||||
|
|
||||
|
@Autowired |
||||
|
private FollowUpService followUpService; |
||||
|
|
||||
|
@Autowired |
||||
|
private PublicFollowUpService publicService; |
||||
|
|
||||
|
|
||||
|
@GetMapping("/admin/qaqcgrievancedashboard") |
||||
|
public String viewqaqcdashboard(Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(LoginUserId); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String agent_name=LoginUserInfo.getCurrentUserDetails().getUsername(); |
||||
|
model.addAttribute("agent_name", agent_name); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
List<Map<String,Object>> previousday=agentsService.getPreviousDayDashboardCounts(); |
||||
|
model.addAttribute("previousday", previousday); |
||||
|
//System.out.println(previousday); |
||||
|
|
||||
|
List<Map<String,Object>> agentcount=agentsService.getAgentPreviousDayCount(); |
||||
|
model.addAttribute("agentcount", agentcount); |
||||
|
|
||||
|
return "modules/callcenterqaqc/qaqcgrievancedashboard"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/admin/qaqcassigntaskagents") |
||||
|
public String viewAgentAssign(Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(LoginUserId); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String agent_name=LoginUserInfo.getCurrentUserDetails().getUsername(); |
||||
|
model.addAttribute("agent_name", agent_name); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
return "modules/callcenterqaqc/qaqctaskagentassign"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/admin/qaqcfollowuplist") |
||||
|
public String viewAdminFollowuplist(Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(LoginUserId); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
String agent_name=LoginUserInfo.getCurrentUserDetails().getUsername(); |
||||
|
model.addAttribute("agent_name", agent_name); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
return "modules/callcenterqaqc/qaqcfollowuplist"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/admin/unattendedcomplaints") |
||||
|
public String viewAdminUnattendedClose(Model model) { |
||||
|
|
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("userId", userId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
return "modules/callcenterqaqc/unattendedclosing"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/agent/agentgrievancedashboard") |
||||
|
public String viewAgentGrievenceDashboardpage( |
||||
|
@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate, |
||||
|
Model model |
||||
|
) { |
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
|
||||
|
|
||||
|
// Default dates if not provided |
||||
|
if (startDate == null || endDate == null) { |
||||
|
LocalDate today = LocalDate.now(); |
||||
|
startDate = today.toString(); |
||||
|
endDate = today.toString(); |
||||
|
} |
||||
|
|
||||
|
List<Map<String, Object>> details = agentsService.getAgentDashboard(userId, startDate, endDate); |
||||
|
model.addAttribute("details", details); |
||||
|
|
||||
|
List<Map<String, Object>> details2 = agentsService.getAgentPerformanceData(userId, startDate, endDate); |
||||
|
model.addAttribute("details2", details2); |
||||
|
|
||||
|
List<Map<String, Object>> tasks = agentsService.getAgentTaskDetails(userId, startDate, endDate); |
||||
|
model.addAttribute("tasks", tasks); |
||||
|
//System.out.println("tasks: "+tasks); |
||||
|
return "modules/callcenterqaqc/agentgrievancedashboard"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@PostMapping("/agent/agentgrievancedashboard") |
||||
|
public String viewAgentGrievenceDashboard( |
||||
|
@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate, |
||||
|
Model model |
||||
|
) { |
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
// Default dates if not provided |
||||
|
if (startDate == null || endDate == null) { |
||||
|
LocalDate today = LocalDate.now(); |
||||
|
startDate = today.toString(); |
||||
|
endDate = today.toString(); |
||||
|
} |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
// System.out.println("startdate: "+startDate ); |
||||
|
// System.out.println("enddate:" + endDate); |
||||
|
|
||||
|
List<Map<String, Object>> details = agentsService.getAgentDashboard(userId, startDate, endDate); |
||||
|
model.addAttribute("details", details); |
||||
|
|
||||
|
List<Map<String, Object>> details2 = agentsService.getAgentPerformanceData(userId, startDate, endDate); |
||||
|
model.addAttribute("details2", details2); |
||||
|
|
||||
|
List<Map<String, Object>> tasks = agentsService.getAgentTaskDetails(userId, startDate, endDate); |
||||
|
model.addAttribute("tasks", tasks); |
||||
|
|
||||
|
return "modules/callcenterqaqc/agentgrievancedashboard"; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@GetMapping("/agent/qaqccalls") |
||||
|
public String viewAgentQaqcCalls( @RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate,Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(LoginUserId); |
||||
|
model.addAttribute("userId",userId); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
|
||||
|
String agent_name=LoginUserInfo.getCurrentUserDetails().getUsername(); |
||||
|
model.addAttribute("agent_name", agent_name); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
// Default dates if not provided |
||||
|
if (startDate == null || endDate == null) { |
||||
|
LocalDate today = LocalDate.now(); |
||||
|
startDate = today.toString(); |
||||
|
endDate = today.toString(); |
||||
|
} |
||||
|
|
||||
|
List<Map<String, Object>> details = agentsService.getAgentDashboard(userId, startDate, endDate); |
||||
|
model.addAttribute("details", details); |
||||
|
|
||||
|
List<Map<String, Object>> qaqcCallslists=qaqcCallsService.getClosedComplaints(userId); |
||||
|
model.addAttribute("qaqcCallsLists",qaqcCallslists); |
||||
|
|
||||
|
List<Map<String, Object>> qaqcCallsAction=qaqcCallsService.getCallCategories(); |
||||
|
model.addAttribute("qaqcCallsActioin",qaqcCallsAction); |
||||
|
|
||||
|
List<Map<String, Object>> qaqcSubmitDetails=qaqcCallsService.getSubmitDetails(userId); |
||||
|
model.addAttribute("qaqcSubmitDetails",qaqcSubmitDetails); |
||||
|
|
||||
|
return "modules/callcenterqaqc/agentqaqccalls"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("agent/qaqcinprogresscall") |
||||
|
public String viewqaqcin_progress_call( @RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate,Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(LoginUserId); |
||||
|
model.addAttribute("userId",userId); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String agent_name=LoginUserInfo.getCurrentUserDetails().getUsername(); |
||||
|
model.addAttribute("agent_name", agent_name); |
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
// Default dates if not provided |
||||
|
if (startDate == null || endDate == null) { |
||||
|
LocalDate today = LocalDate.now(); |
||||
|
startDate = today.toString(); |
||||
|
endDate = today.toString(); |
||||
|
} |
||||
|
|
||||
|
List<Map<String, Object>> details = agentsService.getAgentDashboard(userId, startDate, endDate); |
||||
|
model.addAttribute("details", details); |
||||
|
|
||||
|
List<Map<String, Object>> inprogresslists=inprogresscallService.getInProgressCalls(userId); |
||||
|
model.addAttribute("inprogresslists", inprogresslists); |
||||
|
|
||||
|
List<Map<String, Object>> qaqcactionlists=inprogresscallService.getActionsCatergory(); |
||||
|
model.addAttribute("qaqcactionlists", qaqcactionlists); |
||||
|
|
||||
|
List<Map<String, Object>> inSubmitDetails=inprogresscallService.getInprogressSubmitDetails(userId); |
||||
|
model.addAttribute("inSubmitDetails",inSubmitDetails); |
||||
|
|
||||
|
return "modules/callcenterqaqc/agentqaqcinprogresscalls"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/agent/qaqcfollowupcalls") |
||||
|
public String viewAgentQaqcFollowupCalls(@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate,Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(LoginUserId); |
||||
|
model.addAttribute("userId",userId); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String agent_name=LoginUserInfo.getCurrentUserDetails().getUsername(); |
||||
|
model.addAttribute("agent_name", agent_name); |
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
// Default dates if not provided |
||||
|
if (startDate == null || endDate == null) { |
||||
|
LocalDate today = LocalDate.now(); |
||||
|
startDate = today.toString(); |
||||
|
endDate = today.toString(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
List<Map<String, Object>> details = agentsService.getAgentDashboard(userId, startDate, endDate); |
||||
|
model.addAttribute("details", details); |
||||
|
|
||||
|
List<Map<String, Object>> qaqcfollowuplists=followUpService.getFollowUpCalls(userId); |
||||
|
model.addAttribute("qaqcfollowuplists",qaqcfollowuplists); |
||||
|
|
||||
|
List<Map<String, Object>> qaqccategorylists=followUpService.getFollowUpCatergory(); |
||||
|
|
||||
|
model.addAttribute("qaqccategorylists",qaqccategorylists); |
||||
|
|
||||
|
List<Map<String, Object>> fcSubmitDetails=followUpService.getFollowupSubmitDetails(userId); |
||||
|
model.addAttribute("fcSubmitDetails",fcSubmitDetails); |
||||
|
|
||||
|
return "modules/callcenterqaqc/agentqaqcfollowupcalls"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/agent/qaqcpublicfollowupcalls") |
||||
|
public String viewAgentQaqcPublicFollowupCalls(@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate,Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(LoginUserId); |
||||
|
model.addAttribute("userId",userId); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String agent_name=LoginUserInfo.getCurrentUserDetails().getUsername(); |
||||
|
model.addAttribute("agent_name", agent_name); |
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
// Default dates if not provided |
||||
|
if (startDate == null || endDate == null) { |
||||
|
LocalDate today = LocalDate.now(); |
||||
|
startDate = today.toString(); |
||||
|
endDate = today.toString(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
List<Map<String, Object>> details = agentsService.getAgentDashboard(userId, startDate, endDate); |
||||
|
model.addAttribute("details", details); |
||||
|
|
||||
|
List<Map<String, Object>> qaqcfollowuplists=publicService.getFollowUpCalls(userId); |
||||
|
model.addAttribute("qaqcfollowuplists",qaqcfollowuplists); |
||||
|
|
||||
|
List<Map<String, Object>> qaqccategorylists=publicService.getFollowUpCatergory(); |
||||
|
|
||||
|
model.addAttribute("qaqccategorylists",qaqccategorylists); |
||||
|
|
||||
|
List<Map<String, Object>> fcSubmitDetails=publicService.getFollowupSubmitDetails(userId); |
||||
|
model.addAttribute("fcSubmitDetails",fcSubmitDetails); |
||||
|
|
||||
|
return "modules/callcenterqaqc/agentqaqcpublicfollowupcalls"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,89 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
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; |
||||
|
import org.springframework.web.bind.annotation.ResponseBody; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.FollowUpService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.PublicFollowUpService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcCallsService; |
||||
|
|
||||
|
@RequestMapping("gcc/api/callcenterqaqc/agent/publicfollowupcalls") |
||||
|
@RestController |
||||
|
public class PublicFollowUpController { |
||||
|
|
||||
|
@Autowired |
||||
|
RestTemplate restTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcCallsService qaqcCallsService; |
||||
|
|
||||
|
@Autowired |
||||
|
private FollowUpService followService; |
||||
|
|
||||
|
@Autowired |
||||
|
private PublicFollowUpService publicService; |
||||
|
|
||||
|
@PostMapping("/update") |
||||
|
@ResponseBody |
||||
|
public ResponseEntity<String> updateCallDetails(@RequestParam("complaintNumber") String complaintNumber, |
||||
|
@RequestParam("dataId") int dataId, |
||||
|
@RequestParam("userId") String userId, |
||||
|
@RequestParam("action") String action, |
||||
|
@RequestParam(value = "remainderDate", required = false,defaultValue = "-") String remainderDate, |
||||
|
@RequestParam("remarks") String remarks) { |
||||
|
try { |
||||
|
// System.out.println("Updating Complaint Number: " + complaintNumber); |
||||
|
// System.out.println("Updating Data ID: " + dataId); |
||||
|
// System.out.println("Action: " + action); |
||||
|
// System.out.println("Remarks: " + remarks); |
||||
|
int updated_agent = Integer.parseInt(userId); |
||||
|
// System.out.println("updated_agent: " + updated_agent); |
||||
|
|
||||
|
Map<String, Object> complaintDetails = qaqcCallsService.getComplaintDetails(dataId); |
||||
|
|
||||
|
Integer agentId = (Integer) complaintDetails.get("agent_id"); |
||||
|
Map<String, Object> erp_username=qaqcCallsService.getErpnameById(agentId); |
||||
|
String Erpname=(String) erp_username.get("erp_username"); |
||||
|
|
||||
|
if ("COMPLETED".equals(action) || "REOPEN".equals(action) ||"WRONG_ASSIGN".equals(action)) |
||||
|
{ |
||||
|
boolean statusUpdated =qaqcCallsService.ChangeStatusInErp(complaintNumber, remarks, action,Erpname); |
||||
|
System.out.println("statusUpdated="+statusUpdated); |
||||
|
if (!statusUpdated) |
||||
|
{ |
||||
|
return ResponseEntity.ok("error"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Update complaint details |
||||
|
followService.updateFollowupComplaintDetails(complaintNumber, dataId, action, remarks,updated_agent); |
||||
|
followService.updateComplaintHistoryDetails(complaintNumber, dataId, action, remarks,updated_agent, remainderDate); |
||||
|
|
||||
|
Map<String, Object> logDetails = qaqcCallsService.getComplaintDetails(dataId); |
||||
|
// Upload to logs |
||||
|
followService.uploadComplaintDetailsInLogs(logDetails, action, complaintNumber,remainderDate); |
||||
|
|
||||
|
return ResponseEntity.ok("Success"); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getpubsubmittedcalls") |
||||
|
public List<Map<String, Object>> getFollowupSubmitDetails(@RequestParam int userId) |
||||
|
{ |
||||
|
return publicService.getFollowupSubmitDetails(userId); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,391 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.io.UnsupportedEncodingException; |
||||
|
import java.net.URLEncoder; |
||||
|
import java.nio.charset.StandardCharsets; |
||||
|
import java.security.SecureRandom; |
||||
|
import java.sql.Connection; |
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.time.LocalDate; |
||||
|
import java.time.LocalDateTime; |
||||
|
import java.time.format.DateTimeFormatter; |
||||
|
import java.time.format.DateTimeParseException; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.Date; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.logging.Level; |
||||
|
import java.util.logging.Logger; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
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 com.fasterxml.jackson.core.JsonProcessingException; |
||||
|
import com.fasterxml.jackson.databind.JsonMappingException; |
||||
|
import com.fasterxml.jackson.databind.JsonNode; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.FollowUpService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
|
||||
|
|
||||
|
|
||||
|
@RequestMapping("gcc/api/callcenterqaqc") |
||||
|
@RestController("GrivanceQCapiController") |
||||
|
|
||||
|
public class QaqcAPIController { |
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
private final AppConfig appConfig; |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
public QaqcAPIController(RestTemplate restTemplate, AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcService qaqcService; |
||||
|
|
||||
|
@Autowired |
||||
|
private FollowUpService followUpService; |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/getComplaintDetails/{complaintNumber}") |
||||
|
public Map<String, Object> getComplaintDetails( |
||||
|
@PathVariable String complaintNumber, |
||||
|
@RequestParam(required = false) String gender, |
||||
|
@RequestParam(required = false) String compmode, |
||||
|
@RequestParam(required = false) String deptname) { |
||||
|
|
||||
|
Map<String, Object> resultMap = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
String url = "https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=getComplaintByID&ComplaintId=" |
||||
|
+ complaintNumber + "&imgUrlonly=yes"; |
||||
|
System.out.println("Request URL: " + url); |
||||
|
|
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); |
||||
|
|
||||
|
if (responseEntity.getStatusCode().is2xxSuccessful()) { |
||||
|
String responseBody = responseEntity.getBody(); |
||||
|
//System.out.println("Response Body: " + responseBody); |
||||
|
|
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
JsonNode rootNode = mapper.readTree(responseBody); |
||||
|
|
||||
|
JsonNode complaintDetails = rootNode.path(0).path("ComplaintListHistory").path(0); |
||||
|
|
||||
|
String registerDate=complaintDetails.path("complaintopendate").asText("N/A"); |
||||
|
//System.out.println("registerdate====="+registerDate); |
||||
|
|
||||
|
String formattedDate = "N/A"; // Default value if parsing fails |
||||
|
|
||||
|
if (!registerDate.equals("N/A") && !registerDate.isEmpty()) { |
||||
|
try { |
||||
|
// Parse the input date string |
||||
|
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); |
||||
|
Date date = inputFormat.parse(registerDate); |
||||
|
|
||||
|
// Format the date to dd-MM-yyyy |
||||
|
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); |
||||
|
formattedDate = outputFormat.format(date); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); // Log exception for debugging |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (!complaintDetails.isMissingNode()) { |
||||
|
// Existing fields |
||||
|
resultMap.put("complaintid", complaintDetails.path("complaintid").asText("N/A")); |
||||
|
resultMap.put("complaintdate", formattedDate); |
||||
|
resultMap.put("complainantName", complaintDetails.path("CustomerName").asText("N/A")); |
||||
|
resultMap.put("mobileNumber", complaintDetails.path("CustomerMobile").asText("N/A")); |
||||
|
resultMap.put("complaintType", complaintDetails.path("complainttype").asText("N/A")); |
||||
|
resultMap.put("description", complaintDetails.path("complaintdetails").asText("N/A")); |
||||
|
resultMap.put("currentStatus", complaintDetails.path("complaintcurrentstatus").asText("N/A")); |
||||
|
resultMap.put("Street", complaintDetails.path("Street").asText("N/A")); |
||||
|
resultMap.put("Area", complaintDetails.path("Area").asText("N/A")); |
||||
|
resultMap.put("Landmark", complaintDetails.path("Landmark").asText("N/A")); |
||||
|
resultMap.put("Location", complaintDetails.path("Location").asText("N/A")); |
||||
|
resultMap.put("Zone", complaintDetails.path("Zone").asText("N/A")); |
||||
|
resultMap.put("Division", complaintDetails.path("Division").asText("N/A")); |
||||
|
resultMap.put("OfficialMobile", complaintDetails.path("OfficialMobile").asText("N/A")); |
||||
|
resultMap.put("gender", gender != null ? gender : complaintDetails.path("GENDER").asText("N/A")); |
||||
|
resultMap.put("deptname", deptname != null ? deptname : complaintDetails.path("DEPT_NAME").asText("N/A")); |
||||
|
resultMap.put("compmode", compmode != null ? compmode : complaintDetails.path("COMP_MODE").asText("N/A")); |
||||
|
|
||||
|
// Comments section |
||||
|
JsonNode comments = complaintDetails.path("Comments"); |
||||
|
if (!comments.isMissingNode()) { |
||||
|
List<Map<String, Object>> commentList = new ArrayList<>(); |
||||
|
for (JsonNode commentNode : comments) { |
||||
|
Map<String, Object> commentData = new HashMap<>(); |
||||
|
|
||||
|
// Extracting comment details |
||||
|
commentData.put("user", commentNode.path("user").asText("N/A")); |
||||
|
commentData.put("message", commentNode.path("message").asText("N/A")); |
||||
|
commentData.put("comment_date", commentNode.path("comment_date").asText("N/A")); |
||||
|
|
||||
|
// Handling media link (Image) as part of userimages array for each comment |
||||
|
JsonNode userImages = commentNode.path("userimages"); |
||||
|
if (!userImages.isMissingNode() && userImages.isArray() && userImages.size() > 0) { |
||||
|
String mediaLink = userImages.get(0).path("Comp_Image").asText(null); |
||||
|
// If media link is valid, add it to the comment data |
||||
|
if (mediaLink != null && !mediaLink.equals("null") && !mediaLink.isEmpty()) { |
||||
|
commentData.put("Comp_Image", mediaLink); |
||||
|
} else { |
||||
|
commentData.put("Comp_Image", "No image available"); |
||||
|
} |
||||
|
} else { |
||||
|
commentData.put("Comp_Image", "No image available"); |
||||
|
} |
||||
|
|
||||
|
// Add the comment data to the list |
||||
|
commentList.add(commentData); |
||||
|
} |
||||
|
resultMap.put("comments", commentList); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// Handling media link (Image) as part of userimages array |
||||
|
String mediaLink = complaintDetails.path("mediaLink").asText(null); |
||||
|
List<Map<String, String>> userImagesList = new ArrayList<>(); |
||||
|
Map<String, String> imageMap = new HashMap<>(); |
||||
|
imageMap.put("Comp_Image", mediaLink != null && !mediaLink.equals("null") ? mediaLink : null); |
||||
|
userImagesList.add(imageMap); |
||||
|
resultMap.put("userimages", userImagesList); |
||||
|
|
||||
|
|
||||
|
// System.out.println("Image URL from API: " + mediaLink); |
||||
|
} |
||||
|
} else { |
||||
|
resultMap.put("error", "Failed to retrieve complaint details."); |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
resultMap.put("error", "Error processing request"); |
||||
|
} |
||||
|
|
||||
|
return resultMap; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/followuplist") |
||||
|
@ResponseBody |
||||
|
public List<Map<String, Object>> getFollowUpList( |
||||
|
@RequestParam(value = "callStatus", required = false) String callStatus, |
||||
|
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate fromDate, |
||||
|
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate toDate) { |
||||
|
|
||||
|
// Set default 'toDate' to a future date (1 year ahead) if not provided |
||||
|
if (toDate == null) { |
||||
|
toDate = LocalDate.now().plusMonths(1); // Set to one year ahead or any other future date |
||||
|
//toDate= qaqcService.getMaxRemainderdate(); |
||||
|
} |
||||
|
|
||||
|
// Set default 'fromDate' to the start of the current month if not provided |
||||
|
if (fromDate == null) { |
||||
|
fromDate = LocalDate.now().withDayOfMonth(1); // Start from the first day of the current month |
||||
|
} |
||||
|
|
||||
|
// Print debug info |
||||
|
// System.out.println("Received callStatus: " + callStatus); |
||||
|
// System.out.println("From Date: " + fromDate); |
||||
|
// System.out.println("To Date: " + toDate); |
||||
|
|
||||
|
// Call the service to fetch the filtered data based on the status and date range |
||||
|
return qaqcService.getFollowUpDetailsByStatus(callStatus, fromDate, toDate); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/followup/todayCount") |
||||
|
public ResponseEntity<Map<String, Long>> getTodayFollowUpCount(@RequestParam String followupStatus) { |
||||
|
LocalDate today = LocalDate.now(); // Get the current date |
||||
|
Map<String, Long> counts = qaqcService.countFollowUpsByDateAndStatus(today, followupStatus); |
||||
|
|
||||
|
return ResponseEntity.ok(counts); // Return the count in the response |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/callhistory") |
||||
|
public ResponseEntity<List<Map<String, Object>>> getCallHistory(@RequestParam String complaintNumber) { |
||||
|
List<Map<String, Object>> callHistory = followUpService.getCallHistory(complaintNumber); |
||||
|
if (callHistory.isEmpty()) { |
||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
||||
|
.body(Collections.emptyList()); |
||||
|
} |
||||
|
return ResponseEntity.ok(callHistory); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getfilterreport") |
||||
|
public Map<String, Object> getFilterReports( |
||||
|
@RequestParam String startDate, |
||||
|
@RequestParam String endDate, |
||||
|
@RequestParam String status, |
||||
|
@RequestParam String group, |
||||
|
@RequestParam String type, |
||||
|
@RequestParam String mode, |
||||
|
@RequestParam String zone, |
||||
|
@RequestParam String region) { |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
LocalDate fromLocalDate = LocalDate.parse(startDate, DateTimeFormatter.ISO_DATE); |
||||
|
LocalDate toLocalDate = LocalDate.parse(endDate, DateTimeFormatter.ISO_DATE); |
||||
|
String formattedFromDate = fromLocalDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")); |
||||
|
String formattedToDate = toLocalDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")); |
||||
|
|
||||
|
String url="https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=ms_dashboard_details&From_date="+formattedFromDate+"&To_date="+formattedToDate+"&jsonResp=Yes&Status="+status+"&isQcuser=Yes"+"&ComplaintType="+type+"&ComplaintGroupId="+group+"&compmode="+mode+"&Zoneid="+zone+"&RegionId="+region; |
||||
|
System.out.println(url); |
||||
|
|
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
|
||||
|
// Fetch response as String |
||||
|
ResponseEntity<String> responses = restTemplate.getForEntity(url, String.class); |
||||
|
String rawResponse = responses.getBody(); |
||||
|
|
||||
|
// Preprocess response to remove invalid characters if needed |
||||
|
if (rawResponse != null) { |
||||
|
//rawResponse = rawResponse.replaceAll("\"\"", "\""); // Replace double-double quotes |
||||
|
//rawResponse = rawResponse.replaceAll("(?<![,{])\"R", "\"R"); // Example: Fix missing commas |
||||
|
} |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
Map<String, Object> responseMap = objectMapper.readValue(rawResponse, Map.class); |
||||
|
List<Map<String, Object>> details = (List<Map<String, Object>>) responseMap.get("Details"); |
||||
|
//System.out.println(details); |
||||
|
if (details == null) { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("message", "No Data, please change criteria"); |
||||
|
} |
||||
|
else { |
||||
|
response.put("status", "success"); |
||||
|
response.put("details", details); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
catch (Exception e) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "An error occurred while fetching data."); |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getunattendedcount") |
||||
|
public Map<String, Object> GetUnattendedComplaints(@RequestParam int ucount) |
||||
|
{ |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
// Logging input parameters |
||||
|
//System.out.println("Received Data: " + ucount); |
||||
|
|
||||
|
// Fetch unattended complaints |
||||
|
List<Map<String, Object>> details = qaqcService.getUnattendedlist(ucount); |
||||
|
|
||||
|
if (details != null && !details.isEmpty()) { |
||||
|
response.put("status", "success"); |
||||
|
response.put("details", details); |
||||
|
} else { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("message", "No unattended complaints found for the given criteria."); |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
System.err.println("Error while fetching unattended complaints: " + e.getMessage()); |
||||
|
e.printStackTrace(); // Log the complete stack trace for debugging |
||||
|
|
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "An error occurred while fetching unattended complaints. Please try again."); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/closingunattendedcomplaints") |
||||
|
public ResponseEntity<Map<String, Object>> closeUnattendedComplaints(@RequestBody Map<String, Object> request) { |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
// Extract values from request map |
||||
|
String userId = (String) request.get("userId"); |
||||
|
String remarks = (String) request.get("remarks"); |
||||
|
List<String> complaintNumbers = (List<String>) request.get("complaintNumbers"); |
||||
|
|
||||
|
if (userId == null || remarks == null || complaintNumbers == null || complaintNumbers.isEmpty()) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Invalid request data."); |
||||
|
return ResponseEntity.badRequest().body(response); |
||||
|
} |
||||
|
|
||||
|
// Get ERP Username |
||||
|
String erp_name = qaqcService.getErpusernamebyId(userId); |
||||
|
//System.out.println("ERP Name: " + erp_name); |
||||
|
|
||||
|
List<String> completedComplaints = new ArrayList<>(); |
||||
|
List<String> failedComplaints = new ArrayList<>(); |
||||
|
|
||||
|
// Process each complaint number |
||||
|
for (String complaintNumber : complaintNumbers) { |
||||
|
boolean isSuccess = qaqcService.ChangeStatusInErp(complaintNumber, erp_name, remarks); |
||||
|
if (isSuccess) { |
||||
|
completedComplaints.add(complaintNumber); |
||||
|
} else { |
||||
|
failedComplaints.add(complaintNumber); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
int updated=qaqcService.UpdateInHistoryTable(completedComplaints); |
||||
|
//System.out.println("Updated rows in history table: " + updated); |
||||
|
|
||||
|
int updateInlogs=qaqcService.insertInLogs(completedComplaints,remarks,userId); |
||||
|
//System.out.println("Updated rows in logs table: " + updateInlogs); |
||||
|
|
||||
|
//System.out.println("failedComplaints===="+failedComplaints); |
||||
|
|
||||
|
// Response handling |
||||
|
if (complaintNumbers.size() == completedComplaints.size()) { |
||||
|
response.put("status", "success"); |
||||
|
response.put("message", "All complaints Completed successfully."); |
||||
|
response.put("completedCount", completedComplaints.size()); |
||||
|
} else if (!completedComplaints.isEmpty()) { |
||||
|
response.put("status", "partial_success"); |
||||
|
response.put("message", "Some complaints failed to process."); |
||||
|
response.put("completedCount", completedComplaints.size()); |
||||
|
response.put("failedCount", failedComplaints.size()); |
||||
|
response.put("failedComplaints", failedComplaints); |
||||
|
} else { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Failed to process all complaints."); |
||||
|
} |
||||
|
|
||||
|
return ResponseEntity.ok(response); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "An internal server error occurred."); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,208 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.logging.Level; |
||||
|
import java.util.logging.Logger; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
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.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcAdminSettingService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
|
||||
|
@RequestMapping("gcc/api/callcenterqaqc/adminsettings") |
||||
|
@RestController |
||||
|
public class QaqcAdminSettingsApiController { |
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
private final AppConfig appConfig; |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
public QaqcAdminSettingsApiController(RestTemplate restTemplate, AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcAdminSettingService adminService; |
||||
|
|
||||
|
@PostMapping("/saveproductivity") |
||||
|
public ResponseEntity<Map<String, String>> saveproductivity(@RequestParam int productivity_count) |
||||
|
{ |
||||
|
Map<String, String> response = new HashMap<>(); |
||||
|
try { |
||||
|
|
||||
|
// Save task ID |
||||
|
int rowsInserted = adminService.saveProductivity(productivity_count); |
||||
|
|
||||
|
if (rowsInserted > 0) { |
||||
|
response.put("status", "success"); |
||||
|
response.put("message", "Productivity inserted successfully"); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
response.put("status", "fail"); |
||||
|
response.put("message", "Productivity not saved"); |
||||
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); // Change to BAD_REQUEST for failure |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
// Logging the error |
||||
|
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Error saving task", e); |
||||
|
|
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Failed to save productivity"); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@PostMapping("/updateproductivity") |
||||
|
public ResponseEntity<Map<String, String>> updateProductivityById(@RequestBody Map<String, Integer> requestData) |
||||
|
{ Map<String, String> response = new HashMap<>(); |
||||
|
try { |
||||
|
|
||||
|
// Save task ID |
||||
|
int productivityCount = requestData.getOrDefault("productivity_count", 0); // Default to 0 if not provided |
||||
|
int rowsUpdated = adminService.updateProductivity(productivityCount); |
||||
|
|
||||
|
|
||||
|
if (rowsUpdated > 0) { |
||||
|
response.put("status", "success"); |
||||
|
response.put("message", "Productivity saved successfully"); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
response.put("status", "fail"); |
||||
|
response.put("message", "Productivity not saved"); |
||||
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); // Change to BAD_REQUEST for failure |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
// Logging the error |
||||
|
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Error saving task", e); |
||||
|
|
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Failed to save productivity"); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getproductivity") |
||||
|
public Integer getProductivity() |
||||
|
{ |
||||
|
return adminService.getProductivity(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getadminsettingcounts") |
||||
|
public List<Map<String, Object>> getadminsettingcounts() |
||||
|
{ |
||||
|
return adminService.getAdminSettingCounts(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@GetMapping("/assigncallingtype") |
||||
|
public List<Map<String, Object>> assigncallingtype() |
||||
|
{ |
||||
|
return adminService.getAgentsForCallingtype(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@PostMapping("/updateCallType") // Bulk update endpoint |
||||
|
public ResponseEntity<Map<String, String>> updateCallType(@RequestBody List<Map<String, Object>> selectedAgents) { |
||||
|
|
||||
|
Map<String, String> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
int rowsUpdated = 0; |
||||
|
|
||||
|
// Loop through each selected agent and update their calling_type |
||||
|
for (Map<String, Object> agent : selectedAgents) { |
||||
|
String callingType = (String) agent.get("calling_type"); |
||||
|
|
||||
|
// Parse agent_id to Integer if it's passed as a String |
||||
|
int agentId = Integer.parseInt(agent.get("agent_id").toString()); // Ensure it's parsed as Integer |
||||
|
|
||||
|
// Update calling type for the agent |
||||
|
rowsUpdated += adminService.updateCallType(callingType, agentId); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
adminService.saveCallingTypeInSettings(); |
||||
|
|
||||
|
if (rowsUpdated > 0) { |
||||
|
response.put("status", "success"); |
||||
|
response.put("message", "Agents Assigned successfully"); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} else { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "No agents updated"); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Error occurred while updating calling types: " + e.getMessage()); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/updateagentname") |
||||
|
public ResponseEntity<Map<String, String>> updateAgentnameById(@RequestBody Map<String, String> requestData){ |
||||
|
Map<String, String> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
// Extract and convert agent_id to int |
||||
|
String agentIdStr = requestData.get("agent_id"); |
||||
|
String updatedName = requestData.get("agent_name"); |
||||
|
|
||||
|
// Validate input |
||||
|
if (agentIdStr == null || updatedName == null || updatedName.trim().isEmpty()) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Agent ID and name are required!"); |
||||
|
return ResponseEntity.badRequest().body(response); |
||||
|
} |
||||
|
|
||||
|
int agentId; |
||||
|
try { |
||||
|
agentId = Integer.parseInt(agentIdStr); |
||||
|
} catch (NumberFormatException e) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Invalid Agent ID format!"); |
||||
|
return ResponseEntity.badRequest().body(response); |
||||
|
} |
||||
|
|
||||
|
// Call service layer to update the agent name |
||||
|
int updatedRows = adminService.updateAgentName(agentId, updatedName); // Now agentId is an int |
||||
|
|
||||
|
if (updatedRows == -1) { // If name already exists |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Agent name already exists!"); |
||||
|
return ResponseEntity.status(HttpStatus.CONFLICT).body(response); |
||||
|
} else if (updatedRows > 0) { |
||||
|
response.put("status", "success"); |
||||
|
response.put("message", "Agent name updated successfully!"); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} else { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Agent not found or update failed."); |
||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
catch (Exception e) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Error occurred while updating Agent name " + e.getMessage()); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,47 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcAdminSettingService; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("/gcc/callcenterqaqcadminsettings") |
||||
|
@Controller("callCenterQaQcAdminSettingsController") |
||||
|
public class QaqcAdminSettingsMainController { |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcAdminSettingService adminService; |
||||
|
|
||||
|
@GetMapping("/adminsettings") |
||||
|
public String viewAdminSettings(Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
|
||||
|
|
||||
|
int userId = Integer.parseInt(LoginUserId); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String agent_name=LoginUserInfo.getCurrentUserDetails().getUsername(); |
||||
|
model.addAttribute("agent_name", agent_name); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
List<Map<String, Object>> Counts=adminService.getAdminSettingCounts(); |
||||
|
model.addAttribute("Counts", Counts); |
||||
|
|
||||
|
List<Map<String, Object>> agents=adminService.getAgentsForCallingtype(); |
||||
|
model.addAttribute("Agents", agents); |
||||
|
|
||||
|
|
||||
|
return "modules/callcenterqaqc/qaqcadminsettings"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,234 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.security.SecureRandom; |
||||
|
import java.time.LocalDate; |
||||
|
import java.time.LocalDateTime; |
||||
|
import java.time.format.DateTimeFormatter; |
||||
|
import java.time.format.DateTimeParseException; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.Comparator; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.logging.Level; |
||||
|
import java.util.logging.Logger; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.MediaType; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcAdminSettingService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcAgentAssignService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
|
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("gcc/api/callcenterqaqc/agentassign") |
||||
|
public class QaqcAgentAssignAPIController { |
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public QaqcAgentAssignAPIController(RestTemplate restTemplate) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcAgentAssignService agentAssignService; |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcAdminSettingService adminService; |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/getavailableagents") |
||||
|
public ResponseEntity<Map<String, Object>> getAvailableAgents(@RequestParam int totalDataCount) { |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
try { |
||||
|
// Fetch available agents |
||||
|
List<Map<String, Object>> availableAgents = agentAssignService.getAvailableOutboundAgents(); |
||||
|
Integer productivity_count = adminService.getProductivity(); |
||||
|
|
||||
|
if (availableAgents.isEmpty() || totalDataCount == 0) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "No available agents or totalDataCount must be greater than 0."); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// Process and filter agents based on productivity_count |
||||
|
List<Map<String, Object>> filteredAgents = new ArrayList<>(); |
||||
|
for (Map<String, Object> agent : availableAgents) { |
||||
|
Integer agentId = (Integer) agent.get("agent_id"); |
||||
|
String agentName = (String) agent.get("agent_name"); |
||||
|
Integer todayCount=agentAssignService.getTodayCountForAgent(agentId); |
||||
|
Integer campaignPendingCount = agentAssignService.getCampaignPendingCountForAgent(agentId); |
||||
|
Integer pendingCounts=todayCount+campaignPendingCount; |
||||
|
// Log the details of each agent |
||||
|
//System.out.println("Agent ID: " + agentId + ", Today Count: " + todayCount +", Campaign Pending Count: " + campaignPendingCount + ", Pending Counts: " + pendingCounts); |
||||
|
|
||||
|
if(pendingCounts<productivity_count) { |
||||
|
filteredAgents.add(Map.of( |
||||
|
"agent_id", agentId, |
||||
|
"agent_name", agentName, |
||||
|
"campaignPendingCount", campaignPendingCount, |
||||
|
"todayCount",todayCount |
||||
|
)); |
||||
|
//System.out.println("Agent added to filteredAgents: " + agentName); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
//System.out.println("Filtered Agents Size: " + filteredAgents.size()); |
||||
|
|
||||
|
|
||||
|
if (filteredAgents.isEmpty()) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "No Available Agents,To continue Increase the Productivity"); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
// Calculate agent_available_count based on filtered agents |
||||
|
int agent_available_count = filteredAgents.size(); |
||||
|
|
||||
|
// Calculate calls per agent using filtered agent count |
||||
|
int calls_per_agent = totalDataCount / agent_available_count; |
||||
|
int remainder = totalDataCount % agent_available_count; |
||||
|
|
||||
|
// Distribute calls_per_agent and remainder |
||||
|
List<Map<String, Object>> finalFilteredAgents = new ArrayList<>(); |
||||
|
filteredAgents.sort(Comparator.comparingInt(agent -> (Integer) agent.get("campaignPendingCount"))); |
||||
|
|
||||
|
for (int i = 0; i < filteredAgents.size(); i++) { |
||||
|
Map<String, Object> agent = filteredAgents.get(i); |
||||
|
Integer agentId = (Integer) agent.get("agent_id"); |
||||
|
String agentName = (String) agent.get("agent_name"); |
||||
|
Integer todayCount = (Integer) agent.get("todayCount"); |
||||
|
Integer campaignPendingCount = (Integer) agent.get("campaignPendingCount"); |
||||
|
// Add 1 extra call for agents handling the remainder, starting from the first agent |
||||
|
int additionalCalls = (i < remainder) ? 1 : 0; |
||||
|
int totalCallsCount = todayCount+campaignPendingCount + calls_per_agent + additionalCalls; |
||||
|
|
||||
|
if (totalCallsCount < productivity_count) { |
||||
|
finalFilteredAgents.add(Map.of( |
||||
|
"agent_id", agentId, |
||||
|
"agent_name", agentName, |
||||
|
"totalCallsCount", totalCallsCount, |
||||
|
"todayCount",todayCount, |
||||
|
"campaignPendingCount", campaignPendingCount, |
||||
|
"calls_per_agent", calls_per_agent + additionalCalls |
||||
|
)); |
||||
|
// System.out.println("Agent added to final======filteredAgents: " + agentName); |
||||
|
} |
||||
|
} |
||||
|
//System.out.println("Final Filtered Agents Size: " + finalFilteredAgents.size()); |
||||
|
|
||||
|
if (finalFilteredAgents.isEmpty()) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "No Available Agents,To continue Increase the Productivity"); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
int agent_available_count2 = finalFilteredAgents.size(); |
||||
|
|
||||
|
// Calculate calls per agent using filtered agent count |
||||
|
int calls_per_agent2 = totalDataCount / agent_available_count2; |
||||
|
int remainder2 = totalDataCount % agent_available_count2; |
||||
|
|
||||
|
// Distribute calls_per_agent and remainder |
||||
|
List<Map<String, Object>> LastfinalFilteredAgents = new ArrayList<>(); |
||||
|
finalFilteredAgents.sort(Comparator.comparingInt(agent -> (Integer) agent.get("campaignPendingCount"))); |
||||
|
|
||||
|
for (int i = 0; i < finalFilteredAgents.size(); i++) { |
||||
|
Map<String, Object> agent = finalFilteredAgents.get(i); |
||||
|
Integer agentId = (Integer) agent.get("agent_id"); |
||||
|
String agentName = (String) agent.get("agent_name"); |
||||
|
Integer todayCount1 = (Integer) agent.get("todayCount"); |
||||
|
Integer campaignPendingCount = (Integer) agent.get("campaignPendingCount"); |
||||
|
// Add 1 extra call for agents handling the remainder, starting from the first agent |
||||
|
int additionalCalls1 = (i < remainder2) ? 1 : 0; |
||||
|
int totalCallsCount1 = todayCount1+campaignPendingCount + calls_per_agent2 + additionalCalls1; |
||||
|
|
||||
|
if (totalCallsCount1 < productivity_count) { |
||||
|
LastfinalFilteredAgents.add(Map.of( |
||||
|
"agent_id", agentId, |
||||
|
"agent_name", agentName, |
||||
|
"totalCallsCount", totalCallsCount1, |
||||
|
"todayCount1",todayCount1, |
||||
|
"campaignPendingCount", campaignPendingCount, |
||||
|
"calls_per_agent", calls_per_agent2 + additionalCalls1 |
||||
|
)); |
||||
|
// System.out.println("Agent added to Lastfinal======LastfinalFilteredAgents: " + agentName); |
||||
|
} |
||||
|
} |
||||
|
//System.out.println("Filtered Agents Size: " + LastfinalFilteredAgents.size()); |
||||
|
|
||||
|
if (LastfinalFilteredAgents.isEmpty()) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "No Available Agents,To continue Increase the Productivity"); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
// Build response |
||||
|
response.put("status", "success"); |
||||
|
response.put("message", "Available agents fetched successfully"); |
||||
|
response.put("available_agents", LastfinalFilteredAgents); |
||||
|
response.put("productivity_count", productivity_count); |
||||
|
response.put("agent_available_count", LastfinalFilteredAgents.size()); |
||||
|
|
||||
|
return ResponseEntity.ok(response); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
|
||||
|
// Return error response in case of failure |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Failed to fetch available agents"); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@PostMapping("/taskassign") |
||||
|
public ResponseEntity<Map<String, Object>> assignTasks(@RequestBody Map<String, Object> requestData) { |
||||
|
Map<String, Object> response; |
||||
|
try { |
||||
|
// Delegate transactional work to the service |
||||
|
response = agentAssignService.assignTasksTransactionally(requestData); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response = new HashMap<>(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "An error occurred: " + e.getMessage()); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/deleteRecords") |
||||
|
public ResponseEntity<String> deleteRecordsInUploadData() { |
||||
|
try { |
||||
|
int rowsAffected = agentAssignService.deleteUploadDataTable(); |
||||
|
if (rowsAffected > 0) { |
||||
|
return ResponseEntity.ok("success"); |
||||
|
} else { |
||||
|
return ResponseEntity.ok("No records to delete"); |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error deleting records"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,161 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.io.InputStream; |
||||
|
import java.net.URL; |
||||
|
import java.net.URLConnection; |
||||
|
import java.net.URLEncoder; |
||||
|
import java.nio.charset.StandardCharsets; |
||||
|
import java.time.LocalDate; |
||||
|
import java.util.Date; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Required; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
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 in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcAgentsService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("gcc/api/callcenterqaqc/agent") |
||||
|
@RestController |
||||
|
public class QaqcAgentsAPIController { |
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
private final AppConfig appConfig; |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
public QaqcAgentsAPIController(RestTemplate restTemplate, AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcAgentsService agentsService; |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getdataforagents") |
||||
|
public ResponseEntity<Map<String, Object>> getdataforagents(@RequestParam int agent_id,@RequestParam int qaqc_id) |
||||
|
{ |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
List<Map<String, Object>> tasks = agentsService.getdataforagents(agent_id,qaqc_id); |
||||
|
|
||||
|
if (tasks.isEmpty()) { |
||||
|
|
||||
|
response.put("status", "no_data"); |
||||
|
response.put("message", "No data found for the given agent_id and qaqc_id."); |
||||
|
} else { |
||||
|
// Success case |
||||
|
response.put("status", "success"); |
||||
|
response.put("message", "Data retrieved successfully."); |
||||
|
response.put("tasks", tasks); |
||||
|
} |
||||
|
return ResponseEntity.ok(response); |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "An error occurred: " + e.getMessage()); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@PostMapping("/savecallstatus") |
||||
|
public ResponseEntity<String> savecallstatus(@RequestParam String call_status,@RequestParam String remarks,@RequestParam String complaintNumber)//get full body data |
||||
|
{ |
||||
|
|
||||
|
agentsService.savecallstatus(call_status, remarks,complaintNumber);//get all dbdata and save here and service also |
||||
|
agentsService.savecallstatusinlogs(call_status, remarks,complaintNumber);//get all dbdata and save here and service also |
||||
|
|
||||
|
return ResponseEntity.ok("Data Inserted successfully."); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/getagentperformancecount") |
||||
|
public List<Map<String, Object>> getAgentPerformanceCount( |
||||
|
@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate) { |
||||
|
|
||||
|
List<Map<String, Object>> counts = agentsService.getAgentPerformanceCount(startDate, endDate); |
||||
|
// System.out.println("fromdates: " + startDate); |
||||
|
// System.out.println("todate: " + endDate); |
||||
|
// System.out.println("overallcounts: " + counts ); |
||||
|
return counts; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getagentperformancelist") |
||||
|
public List<Map<String, Object>> getAgentPerformanceList( |
||||
|
@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate) { |
||||
|
|
||||
|
// Fetch agent performance data from service |
||||
|
List<Map<String, Object>> agentPerformanceData = agentsService.getAgentPerformanceList(startDate, endDate); |
||||
|
|
||||
|
// Log or return the data |
||||
|
//System.out.println("Agent Performance Data: " + agentPerformanceData); |
||||
|
return agentPerformanceData; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/agenttaskwise") |
||||
|
public List<Map<String, Object>> getAgentTaskwiseData(@RequestParam String agentId,@RequestParam String startDate,@RequestParam String endDate) { |
||||
|
// Call the service to fetch agent task-wise data |
||||
|
List<Map<String, Object>> agentTaskwiseData = agentsService.getAgentTaskwiseData(agentId, startDate, endDate); |
||||
|
//System.out.println("Agent Task Wise Data: " + agentTaskwiseData); |
||||
|
return agentTaskwiseData; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/agentattendedcomplaints") |
||||
|
public List<Map<String,Object>> getAttendedComplaintStatus( |
||||
|
@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate, |
||||
|
@RequestParam(required = false) String complaintNumber, |
||||
|
@RequestParam(required = false) String complaintMobileNumber){ |
||||
|
|
||||
|
List<Map<String, Object>> agentAttendedData = agentsService.getAttendedComplaintStatus(startDate, endDate, complaintNumber, complaintMobileNumber); |
||||
|
//System.out.println("Agent attended Data: " + agentAttendedData); |
||||
|
return agentAttendedData; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/attendedcomplaintshistory") |
||||
|
public List<Map<String,Object>> getAttendedComplainthistory( |
||||
|
@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate, |
||||
|
@RequestParam(required = false) String complaintNumber, |
||||
|
@RequestParam(required = false) String complaintMobileNumber){ |
||||
|
|
||||
|
List<Map<String, Object>> agentAttendedData = agentsService.getAttendedComplainthistory(startDate, endDate, complaintNumber, complaintMobileNumber); |
||||
|
//System.out.println("Agent attended Data: " + agentAttendedData); |
||||
|
return agentAttendedData; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/agenttaskassign") |
||||
|
public List<Map<String, Object>> getAgentTaskwiseAssign(@RequestParam String agentId) { |
||||
|
// Call the service to fetch agent task-wise data |
||||
|
List<Map<String, Object>> agentTaskwiseAssign = agentsService.getAgentTaskwiseAssign(agentId); |
||||
|
//System.out.println("Agent Task Wise Assign: " + agentTaskwiseAssign); |
||||
|
return agentTaskwiseAssign; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,519 @@ |
|||||
|
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.text.SimpleDateFormat; |
||||
|
import java.time.LocalDate; |
||||
|
import java.time.LocalDateTime; |
||||
|
import java.time.format.DateTimeFormatter; |
||||
|
import java.time.format.DateTimeParseException; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Date; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.Objects; |
||||
|
//import java.util.stream.Stream; |
||||
|
import java.text.ParseException; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
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; |
||||
|
import org.springframework.web.bind.annotation.ResponseBody; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import com.fasterxml.jackson.databind.JsonNode; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcCallsService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("gcc/api/callcenterqaqc/agent/qaqccalls") |
||||
|
@RestController |
||||
|
public class QaqcCallsController { |
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
private final AppConfig appConfig; |
||||
|
|
||||
|
@Autowired |
||||
|
public QaqcCallsController(RestTemplate restTemplate, AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcCallsService qaqcCallsService; |
||||
|
|
||||
|
@PostMapping("/update") |
||||
|
@ResponseBody |
||||
|
public ResponseEntity<String> updateCallDetails(@RequestParam("complaintNumber") String complaintNumber, |
||||
|
@RequestParam("dataId") int dataId, @RequestParam("action") String action, |
||||
|
@RequestParam("userId") String userId, |
||||
|
@RequestParam(value = "remainderDate", required = false, defaultValue = "-") String remainderDate, |
||||
|
@RequestParam("remarks") String remarks) { |
||||
|
try { |
||||
|
// System.out.println("Updating Complaint Number: " + complaintNumber); |
||||
|
// System.out.println("Updating Data ID: " + dataId); |
||||
|
// System.out.println("Action: " + action); |
||||
|
// System.out.println("Remarks: " + remarks); |
||||
|
int updated_agent = Integer.parseInt(userId); |
||||
|
// System.out.println("updated_agent: " + updated_agent); |
||||
|
|
||||
|
|
||||
|
// Map<String,Object> followUpComplaint = |
||||
|
// qaqcCallsService.checkComplaintDetail(complaintNumber); |
||||
|
// |
||||
|
// try { |
||||
|
// int followupid = (int) followUpComplaint.get("id"); |
||||
|
// // update complaintstaus if exist in followup call logs table |
||||
|
// if (followUpComplaint != null &&!followUpComplaint.isEmpty()) |
||||
|
// { |
||||
|
// qaqcCallsService.updateFollowupCallLogs(complaintNumber, action, remarks,followupid); |
||||
|
// } |
||||
|
// |
||||
|
// } |
||||
|
// catch(Exception e) |
||||
|
// { |
||||
|
// System.out.println("Exception:"+e); |
||||
|
// } |
||||
|
|
||||
|
//to insert incorrect office mobile number details in table |
||||
|
if(action.equals("MOBILE_NUM")) { |
||||
|
qaqcCallsService.saveMobileNumDetails(complaintNumber, remarks); } |
||||
|
|
||||
|
// Get complaint details |
||||
|
Map<String, Object> complaintDetails =qaqcCallsService.getComplaintDetails(dataId); |
||||
|
|
||||
|
Integer agentId = (Integer) complaintDetails.get("agent_id"); |
||||
|
Map<String,Object> erp_username=qaqcCallsService.getErpnameById(agentId); |
||||
|
String Erpname=(String) erp_username.get("erp_username"); |
||||
|
|
||||
|
// Handle COMPLETED and REOPEN actions |
||||
|
|
||||
|
if ("COMPLETED".equals(action) || "REOPEN".equals(action) ||"WRONG_ASSIGN".equals(action)) |
||||
|
{ |
||||
|
boolean statusUpdated =qaqcCallsService.ChangeStatusInErp(complaintNumber, remarks, action,Erpname); |
||||
|
System.out.println("statusUpdated="+statusUpdated); |
||||
|
if (!statusUpdated) |
||||
|
{ |
||||
|
return ResponseEntity.ok("error"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if("FOLLOWUP".equals(action)) { |
||||
|
|
||||
|
String pname = (String) complaintDetails.get("complaint_person_name"); |
||||
|
String mob_no = (String) complaintDetails.get("complaint_mobilenumber"); |
||||
|
String cat = (String) complaintDetails.get("complaint_type"); |
||||
|
|
||||
|
String result = sendWhatsappMsg(pname, cat, mob_no, complaintNumber); |
||||
|
if(result.equals("200")) { |
||||
|
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); |
||||
|
Map<String, Object> logDetails =qaqcCallsService.getComplaintDetails(dataId); |
||||
|
qaqcCallsService.uploadComplaintDetailsInLogs(logDetails, action,complaintNumber, remainderDate); |
||||
|
|
||||
|
|
||||
|
return ResponseEntity.ok("Success"); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getComplaintDetails") |
||||
|
public Map<String, Object> getComplaintDetails(@RequestParam String complaintNumber) { |
||||
|
|
||||
|
Map<String, Object> resultMap = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
String url = "https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=getComplaintByID&ComplaintId=" |
||||
|
+ complaintNumber + "&imgUrlonly=yes&isQcuser=Yes&jsonResp=Yes"; |
||||
|
System.out.println("Request URL: " + url); |
||||
|
|
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); |
||||
|
|
||||
|
if (responseEntity.getStatusCode().is2xxSuccessful()) { |
||||
|
String responseBody = responseEntity.getBody(); |
||||
|
//System.out.println("Response Body: " + responseBody); |
||||
|
|
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
JsonNode rootNode = mapper.readTree(responseBody); |
||||
|
|
||||
|
JsonNode complaintDetails = rootNode.path(0).path("ComplaintListHistory").path(0); |
||||
|
|
||||
|
String registerDate = complaintDetails.path("complaintopendate").asText("N/A"); |
||||
|
String ClosedDate = complaintDetails.path("complaintcloseddate").asText("N/A"); |
||||
|
String ReopenDate = complaintDetails.path("REOPENDDATE").asText("N/A"); |
||||
|
String FinalcloseDate = complaintDetails.path("FINALCLOSEDDATE").asText("N/A"); |
||||
|
|
||||
|
//System.out.println("registerdate=====" + registerDate); |
||||
|
|
||||
|
String formattedDate = "N/A"; // Default value if parsing fails |
||||
|
|
||||
|
if (!registerDate.equals("N/A") && !registerDate.isEmpty()) { |
||||
|
try { |
||||
|
// Parse the input date string |
||||
|
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); |
||||
|
Date date = inputFormat.parse(registerDate); |
||||
|
|
||||
|
// Format the date to dd-MM-yyyy |
||||
|
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); |
||||
|
formattedDate = outputFormat.format(date); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); // Log exception for debugging |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"); |
||||
|
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
||||
|
|
||||
|
LocalDateTime maxDate = Stream.of(registerDate, ClosedDate, ReopenDate, FinalcloseDate) |
||||
|
.filter(date -> date != null && !date.equalsIgnoreCase("null")) |
||||
|
.map(date -> { |
||||
|
try { |
||||
|
return LocalDateTime.parse(date, inputFormatter); |
||||
|
} catch (DateTimeParseException e) { |
||||
|
return null; // Skip invalid date formats |
||||
|
} |
||||
|
}) |
||||
|
.filter(Objects::nonNull) |
||||
|
.max(LocalDateTime::compareTo) // Find the greatest date |
||||
|
.orElse(null); // Default to null if no valid dates are found |
||||
|
|
||||
|
String greatestDateFormatted = (maxDate != null) ? maxDate.format(outputFormatter) : "N/A"; |
||||
|
*/ |
||||
|
|
||||
|
SimpleDateFormat inputFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); |
||||
|
SimpleDateFormat outputFormatter = new SimpleDateFormat("dd-MM-yyyy"); |
||||
|
|
||||
|
Date maxDate = null; |
||||
|
|
||||
|
// Put all date strings into array |
||||
|
String[] dates = { registerDate, ClosedDate, ReopenDate, FinalcloseDate }; |
||||
|
|
||||
|
for (int i = 0; i < dates.length; i++) { |
||||
|
|
||||
|
String dateStr = dates[i]; |
||||
|
|
||||
|
if (dateStr == null || "null".equalsIgnoreCase(dateStr)) { |
||||
|
continue; |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
Date parsedDate = inputFormatter.parse(dateStr); |
||||
|
|
||||
|
if (maxDate == null || parsedDate.after(maxDate)) { |
||||
|
maxDate = parsedDate; |
||||
|
} |
||||
|
|
||||
|
} catch (ParseException e) { |
||||
|
// Ignore invalid date formats |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
String greatestDateFormatted = |
||||
|
(maxDate != null) ? outputFormatter.format(maxDate) : "N/A"; |
||||
|
|
||||
|
if (!complaintDetails.isMissingNode()) { |
||||
|
// Existing fields |
||||
|
resultMap.put("complaintid", complaintDetails.path("complaintid").asText("N/A")); |
||||
|
resultMap.put("complaintdate", formattedDate); |
||||
|
resultMap.put("complainantName", complaintDetails.path("CustomerName").asText("N/A")); |
||||
|
resultMap.put("mobileNumber", complaintDetails.path("CustomerMobile").asText("N/A")); |
||||
|
resultMap.put("complaintType", complaintDetails.path("complainttype").asText("N/A")); |
||||
|
resultMap.put("description", complaintDetails.path("complaintdetails").asText("N/A")); |
||||
|
resultMap.put("currentStatus", complaintDetails.path("complaintcurrentstatus").asText("N/A")); |
||||
|
resultMap.put("OfficialMobile", complaintDetails.path("OfficialMobile").asText("N/A")); |
||||
|
resultMap.put("Street", complaintDetails.path("Street").asText("N/A")); |
||||
|
resultMap.put("Area", complaintDetails.path("Area").asText("N/A")); |
||||
|
resultMap.put("Landmark", complaintDetails.path("Landmark").asText("N/A")); |
||||
|
resultMap.put("Location", complaintDetails.path("Location").asText("N/A")); |
||||
|
resultMap.put("Zone", complaintDetails.path("Zone").asText("N/A")); |
||||
|
resultMap.put("Division", complaintDetails.path("Division").asText("N/A")); |
||||
|
resultMap.put("gender", complaintDetails.path("GENDER").asText("N/A")); |
||||
|
resultMap.put("deptname", complaintDetails.path("DEPT_NAME").asText("N/A")); |
||||
|
resultMap.put("compmode", complaintDetails.path("COMP_MODE").asText("N/A")); |
||||
|
resultMap.put("greatestDate", greatestDateFormatted); |
||||
|
|
||||
|
// Comments section |
||||
|
JsonNode comments = complaintDetails.path("Comments"); |
||||
|
if (!comments.isMissingNode()) { |
||||
|
List<Map<String, Object>> commentList = new ArrayList<>(); |
||||
|
for (JsonNode commentNode : comments) { |
||||
|
Map<String, Object> commentData = new HashMap<>(); |
||||
|
|
||||
|
// Extracting comment details |
||||
|
commentData.put("user", commentNode.path("user").asText("N/A")); |
||||
|
commentData.put("message", commentNode.path("message").asText("N/A")); |
||||
|
commentData.put("comment_date", commentNode.path("comment_date").asText("N/A")); |
||||
|
|
||||
|
// Handling media link (Image) as part of userimages array for each comment |
||||
|
JsonNode userImages = commentNode.path("userimages"); |
||||
|
if (!userImages.isMissingNode() && userImages.isArray() && userImages.size() > 0) { |
||||
|
String mediaLink = userImages.get(0).path("Comp_Image").asText(null); |
||||
|
// If media link is valid, add it to the comment data |
||||
|
if (mediaLink != null && !mediaLink.equals("null") && !mediaLink.isEmpty()) { |
||||
|
commentData.put("Comp_Image", mediaLink); |
||||
|
} else { |
||||
|
commentData.put("Comp_Image", "No image available"); |
||||
|
} |
||||
|
} else { |
||||
|
commentData.put("Comp_Image", "No image available"); |
||||
|
} |
||||
|
|
||||
|
// Add the comment data to the list |
||||
|
commentList.add(commentData); |
||||
|
} |
||||
|
resultMap.put("comments", commentList); |
||||
|
} |
||||
|
|
||||
|
// Handling media link (Image) as part of userimages array |
||||
|
String mediaLink = complaintDetails.path("mediaLink").asText(null); |
||||
|
List<Map<String, String>> userImagesList = new ArrayList<>(); |
||||
|
Map<String, String> imageMap = new HashMap<>(); |
||||
|
imageMap.put("Comp_Image", mediaLink != null && !mediaLink.equals("null") ? mediaLink : null); |
||||
|
userImagesList.add(imageMap); |
||||
|
resultMap.put("userimages", userImagesList); |
||||
|
|
||||
|
//System.out.println("Image URL from API: " + mediaLink); |
||||
|
} |
||||
|
} else { |
||||
|
resultMap.put("error", "Failed to retrieve complaint details."); |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
resultMap.put("error", "Error processing request"); |
||||
|
} |
||||
|
|
||||
|
return resultMap; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getComplaintDetailsByMobileNumber") |
||||
|
public Map<String, Object> getComplaintDetailsByMobileNumber(@RequestParam String complaintMobileNumber, |
||||
|
@RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate, |
||||
|
@RequestParam String complaintYear) { |
||||
|
|
||||
|
// System.out.println("Computed Start Date: " + startDate); |
||||
|
// System.out.println("Computed End Date: " + endDate); |
||||
|
// System.out.println("Computed Year: " + complaintYear); |
||||
|
// System.out.println("Computed MobileNumber: " + complaintMobileNumber); |
||||
|
|
||||
|
Map<String, Object> resultMap = new HashMap<>(); |
||||
|
List<Map<String, Object>> complaintsList = new ArrayList<>(); |
||||
|
|
||||
|
try { |
||||
|
// Determine current year's starting date and today's date |
||||
|
LocalDate currentDate = LocalDate.now(); |
||||
|
LocalDate yearStartDate = currentDate.withDayOfYear(1); |
||||
|
|
||||
|
// Set default dates if startDate or endDate are empty |
||||
|
if (startDate == null || startDate.isEmpty()) { |
||||
|
startDate = yearStartDate.toString(); // Set to current year's start date |
||||
|
} |
||||
|
if (endDate == null || endDate.isEmpty()) { |
||||
|
endDate = currentDate.toString(); // Set to today's date |
||||
|
} |
||||
|
|
||||
|
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
||||
|
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); |
||||
|
|
||||
|
startDate = LocalDate.parse(startDate, inputFormatter).format(outputFormatter); |
||||
|
endDate = LocalDate.parse(endDate, inputFormatter).format(outputFormatter); |
||||
|
|
||||
|
// Debug logs (optional) |
||||
|
// System.out.println("Formatted Start Date: " + startDate); |
||||
|
// System.out.println("Formatted End Date: " + endDate); |
||||
|
|
||||
|
String url = "https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=getComplaintListWithImg&From_date=" |
||||
|
+ startDate + "&To_date=" + endDate |
||||
|
+ "&jsonResp=Yes&UserType=Public&Token=&PageIndex=null&Status=null&repYear=" + complaintYear |
||||
|
+ "&MobileNo=" + complaintMobileNumber; |
||||
|
|
||||
|
System.out.println("Request URL: " + url); |
||||
|
|
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); |
||||
|
|
||||
|
if (responseEntity.getStatusCode().is2xxSuccessful()) { |
||||
|
String responseBody = responseEntity.getBody(); |
||||
|
// System.out.println("Response Body: " + responseBody); |
||||
|
|
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
JsonNode rootNode = mapper.readTree(responseBody); |
||||
|
|
||||
|
JsonNode complaintListHistory = rootNode.path(0).path("ComplaintListHistory"); |
||||
|
|
||||
|
if (complaintListHistory.isArray()) { |
||||
|
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); |
||||
|
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy"); |
||||
|
for (JsonNode complaintDetails : complaintListHistory) { |
||||
|
Map<String, Object> complaintMap = new HashMap<>(); |
||||
|
|
||||
|
String registerDate = complaintDetails.path("complaintopendate").asText("N/A"); |
||||
|
Date parsedDate = null; |
||||
|
|
||||
|
if (!registerDate.equals("N/A") && !registerDate.isEmpty() && !"null".equalsIgnoreCase(registerDate)) { |
||||
|
try { |
||||
|
parsedDate = inputFormat.parse(registerDate); |
||||
|
String formattedDate = outputFormat.format(parsedDate); |
||||
|
complaintMap.put("complaintdate", formattedDate); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
complaintMap.put("complaintdate", "N/A"); |
||||
|
} |
||||
|
} else { |
||||
|
complaintMap.put("complaintdate", "N/A"); |
||||
|
} |
||||
|
|
||||
|
// Add complaint details to the map |
||||
|
complaintMap.put("complaintid", complaintDetails.path("complaintid").asText("N/A")); |
||||
|
complaintMap.put("complainantName", complaintDetails.path("CustomerName").asText("N/A")); |
||||
|
complaintMap.put("mobileNumber", complaintDetails.path("CustomerMobile").asText("N/A")); |
||||
|
complaintMap.put("complaintType", complaintDetails.path("complainttype").asText("N/A")); |
||||
|
complaintMap.put("currentStatus",complaintDetails.path("complaintcurrentstatus").asText("N/A")); |
||||
|
complaintMap.put("OfficialMobile", complaintDetails.path("OfficialMobile").asText("N/A")); |
||||
|
complaintMap.put("Street", complaintDetails.path("Street").asText("N/A")); |
||||
|
complaintMap.put("Area", complaintDetails.path("Area").asText("N/A")); |
||||
|
complaintMap.put("Landmark", complaintDetails.path("Landmark").asText("N/A")); |
||||
|
complaintMap.put("Location", complaintDetails.path("Location").asText("N/A")); |
||||
|
complaintMap.put("Zone", complaintDetails.path("Zone").asText("N/A")); |
||||
|
complaintMap.put("Division", complaintDetails.path("Division").asText("N/A")); |
||||
|
String closedDate = complaintDetails.path("complaintcloseddate").asText("N/A"); |
||||
|
|
||||
|
// Check if the value is explicitly "null" (as a string) |
||||
|
if ("null".equalsIgnoreCase(closedDate)) { |
||||
|
closedDate = "N/A"; |
||||
|
} |
||||
|
|
||||
|
complaintMap.put("complaintcloseddate", closedDate); |
||||
|
complaintMap.put("parsedComplaintDate", parsedDate); |
||||
|
|
||||
|
// Add the complaint to the list |
||||
|
complaintsList.add(complaintMap); |
||||
|
} |
||||
|
|
||||
|
// Sort complaintsList by parsedComplaintDate in descending order |
||||
|
complaintsList.sort((a, b) -> { |
||||
|
Date dateA = (Date) a.get("parsedComplaintDate"); |
||||
|
Date dateB = (Date) b.get("parsedComplaintDate"); |
||||
|
if (dateA == null && dateB == null) return 0; |
||||
|
if (dateA == null) return 1; |
||||
|
if (dateB == null) return -1; |
||||
|
return dateB.compareTo(dateA); |
||||
|
}); |
||||
|
|
||||
|
for (Map<String, Object> complaint : complaintsList) { |
||||
|
complaint.remove("parsedComplaintDate"); |
||||
|
} |
||||
|
} |
||||
|
resultMap.put("status", "success"); |
||||
|
resultMap.put("complaints", complaintsList); |
||||
|
} else { |
||||
|
resultMap.put("status", "error"); |
||||
|
resultMap.put("message", "Failed to retrieve complaint details."); |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
resultMap.put("status", "error"); |
||||
|
resultMap.put("message", "Error processing request"); |
||||
|
} |
||||
|
|
||||
|
return resultMap; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getqcsubmittedcalls") |
||||
|
public List<Map<String, Object>> getSubmittedList(@RequestParam int userId) |
||||
|
{ |
||||
|
return qaqcCallsService.getSubmitDetails(userId); |
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
* System.out.println("Computed Start Date: " + startDate); |
||||
|
* System.out.println("Computed End Date: " + endDate); |
||||
|
* System.out.println("Computed Year: " + complaintYear); |
||||
|
* System.out.println("Computed MobileNumber: " + complaintMobileNumber); |
||||
|
* |
||||
|
* String url |
||||
|
* ="https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=getComplaintListWithImg&From_date=" |
||||
|
* +startDate+"&To_date="+endDate+ |
||||
|
* "&jsonResp=Yes&UserType=Public&Token=&PageIndex=null&Status=null&repYear="+ |
||||
|
* complaintYear+"&MobileNo="+complaintMobileNumber; |
||||
|
* |
||||
|
* System.out.println("Request URL: " + url); |
||||
|
* |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
private String sendWhatsappMsg(String pname,String cat,String mob_no, String complaintNumber) { |
||||
|
String urlString = ""; |
||||
|
|
||||
|
//urlString="https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=5c995535-6244-11f0-98fc-02c8a5e042bd&from=919445061913&to="+mob_no+"&templateid=3285616&type=template&placeholders="+pname+"||"+cat+"||"+complaintNumber+"&button_placeholder="+complaintNumber; |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
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="https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=5c995535-6244-11f0-98fc-02c8a5e042bd&from=919445061913&to="+mobile+"&templateid=3285616&type=template&placeholders="+placeholders+"&button_placeholder="+buttonPlaceholder; |
||||
|
|
||||
|
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; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,38 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcAgentsService; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("/gcc/callcenterqaqccomplaintsregistration") |
||||
|
@Controller("callCenterQaQcComplaintsRegistrationController") |
||||
|
public class QaqcPgrComplaintsMainController { |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcAgentsService agentsService; |
||||
|
|
||||
|
@GetMapping("/pgrcomplaint") |
||||
|
public String viewPGRpage(Model model) { |
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("userId",userId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
return "modules/callcenterqaqc/pgrcomplaints"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,68 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.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 org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcAdminSettingService; |
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcTaskListService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
|
||||
|
@RequestMapping("gcc/api/callcenterqaqc/qaqctasklist") |
||||
|
@RestController |
||||
|
public class QaqcTaskListAPIController { |
||||
|
|
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
private final AppConfig appConfig; |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
public QaqcTaskListAPIController(RestTemplate restTemplate, AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcTaskListService tasklist; |
||||
|
|
||||
|
@GetMapping("/overalltaskcount") |
||||
|
public List<Map<String, Object>> getComplaintAndCallStatusCounts( |
||||
|
@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate) { |
||||
|
|
||||
|
List<Map<String, Object>> counts = tasklist.getComplaintAndCallStatusCounts(startDate, endDate); |
||||
|
//System.out.println("overallcounts:" + counts); |
||||
|
return counts; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/taskdatacount") |
||||
|
public List<Map<String, Object>> getTaskwiseData( |
||||
|
@RequestParam(required = false) String startDate, |
||||
|
@RequestParam(required = false) String endDate) { |
||||
|
List<Map<String, Object>> taskdata = tasklist.getTaskwiseData(startDate, endDate); |
||||
|
//System.out.println("taskdata "+ taskdata); |
||||
|
return taskdata; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/agentdatacount") |
||||
|
public List<Map<String, Object>> getAgentwiseData(@RequestParam String qaqc_id) |
||||
|
{ |
||||
|
List<Map<String, Object>> agentwisedata = tasklist.getAgentwiseData(qaqc_id); |
||||
|
//System.out.println("agentdata "+agentwisedata); |
||||
|
return agentwisedata; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,58 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
|
||||
|
@RequestMapping("/gcc/callcenterqaqcreports") |
||||
|
@Controller("callCenterQaQcReportsController") |
||||
|
public class ReportsMainController { |
||||
|
|
||||
|
|
||||
|
@GetMapping("/overallreport") |
||||
|
public String viewOverallReports(Model model) { |
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
return "modules/callcenterqaqc/overallreport"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/qaqctasklist") |
||||
|
public String viewqaqctasklist(Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
|
||||
|
return "modules/callcenterqaqc/qaqctasklist"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/qaqcagentperformance") |
||||
|
public String viewAgentPerformance(Model model) { |
||||
|
|
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(LoginUserId); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String agent_name=LoginUserInfo.getCurrentUserDetails().getUsername(); |
||||
|
model.addAttribute("agent_name", agent_name); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
return "modules/callcenterqaqc/qaqcagentperformance"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,563 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.time.LocalDate; |
||||
|
import java.time.format.DateTimeFormatter; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
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.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.client.HttpClientErrorException; |
||||
|
import org.springframework.web.client.HttpServerErrorException; |
||||
|
import org.springframework.web.client.ResourceAccessException; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
import com.fasterxml.jackson.databind.JsonNode; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.ScpService; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/gcc/api/scp") |
||||
|
public class ScpApiController { |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
private RestTemplate restTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
private ObjectMapper objectMapper; |
||||
|
|
||||
|
@Autowired |
||||
|
private ScpService scpservice; |
||||
|
|
||||
|
@GetMapping("/getdatabyfilters") |
||||
|
public Map<String, Object> getdatabyfilters( |
||||
|
@RequestParam String startDate, |
||||
|
@RequestParam String endDate, |
||||
|
@RequestParam String zone, |
||||
|
@RequestParam String ward) { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
||||
|
DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
||||
|
|
||||
|
String formattedStartDate = LocalDate.parse(startDate, inputFormat).format(outputFormat); |
||||
|
String formattedEndDate = LocalDate.parse(endDate, inputFormat).format(outputFormat); |
||||
|
|
||||
|
// Build API URL |
||||
|
String apiUrl = "https://gccservices.in/gccofficialapp/api/asset/scpfilterReports" |
||||
|
+ "?assetTypeId=2" |
||||
|
+ "&fromDate=" + formattedStartDate |
||||
|
+ "&toDate=" + formattedEndDate |
||||
|
+ "&loginId=5662"; |
||||
|
|
||||
|
if (!zone.isEmpty()) { |
||||
|
apiUrl += "&zone=" + zone; |
||||
|
} |
||||
|
if (!ward.isEmpty()) { |
||||
|
apiUrl += "&ward=" + ward; |
||||
|
} |
||||
|
|
||||
|
System.out.println("apiUrl=" + apiUrl); |
||||
|
|
||||
|
// Call the external API |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
ResponseEntity<String> apiResponse = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
|
||||
|
if (apiResponse.getStatusCode().is2xxSuccessful() && apiResponse.getBody() != null) { |
||||
|
|
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
|
||||
|
// Parse full JSON |
||||
|
JsonNode rootNode = mapper.readTree(apiResponse.getBody()); |
||||
|
|
||||
|
// Extract "scpreport" array |
||||
|
JsonNode reportNode = rootNode.path("scpreport"); |
||||
|
|
||||
|
if (reportNode.isMissingNode() || !reportNode.isArray() || reportNode.size() == 0) { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("data", Collections.emptyList()); |
||||
|
} else { |
||||
|
// Convert JSON array → List<Map<String, Object>> |
||||
|
List<Map<String, Object>> reportList = mapper.convertValue( |
||||
|
reportNode, |
||||
|
new TypeReference<List<Map<String, Object>>>() {} |
||||
|
); |
||||
|
|
||||
|
response.put("status", "success"); |
||||
|
response.put("data", reportList); |
||||
|
if(zone.isEmpty() && ward.isEmpty()) { |
||||
|
response.put("table", "table1"); |
||||
|
} |
||||
|
else if(ward.isEmpty() && !zone.isEmpty()) { |
||||
|
response.put("table", "table2"); |
||||
|
} |
||||
|
else if(!ward.isEmpty() && !zone.isEmpty()) { |
||||
|
response.put("table", "table3"); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} else { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("data", Collections.emptyList()); |
||||
|
} |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getzones") |
||||
|
public ResponseEntity<Map<String, Object>> getzones() { |
||||
|
String apiUrl = "https://gccservices.in/gccrestservices/dropdown/api/zone"; |
||||
|
Map<String, Object> responseMap = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
String response = restTemplate.getForObject(apiUrl, String.class); |
||||
|
|
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
JsonNode rootArray = objectMapper.readTree(response); |
||||
|
|
||||
|
// ✅ The response is an array, so get the first element |
||||
|
if (rootArray.isArray() && rootArray.size() > 0) { |
||||
|
JsonNode firstObject = rootArray.get(0); |
||||
|
|
||||
|
boolean status = firstObject.path("status").asBoolean(false); |
||||
|
|
||||
|
if (status) { |
||||
|
JsonNode dataArray = firstObject.path("data"); |
||||
|
responseMap.put("status", "success"); |
||||
|
responseMap.put("code", 200); |
||||
|
responseMap.put("message", "Data found"); |
||||
|
responseMap.put("data", objectMapper.convertValue( |
||||
|
dataArray, new TypeReference<List<Map<String, Object>>>() {})); |
||||
|
return ResponseEntity.ok(responseMap); |
||||
|
} else { |
||||
|
responseMap.put("status", "failure"); |
||||
|
responseMap.put("code", 404); |
||||
|
responseMap.put("message", "No Zones found"); |
||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseMap); |
||||
|
} |
||||
|
} else { |
||||
|
responseMap.put("status", "failure"); |
||||
|
responseMap.put("code", 404); |
||||
|
responseMap.put("message", "Invalid response format"); |
||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseMap); |
||||
|
} |
||||
|
|
||||
|
} catch (Exception ex) { |
||||
|
responseMap.put("status", "error"); |
||||
|
responseMap.put("code", HttpStatus.INTERNAL_SERVER_ERROR.value()); |
||||
|
responseMap.put("message", "Unexpected error occurred"); |
||||
|
responseMap.put("details", ex.getMessage()); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseMap); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getwardbyzone") |
||||
|
public ResponseEntity<Map<String, Object>> getwardbyzone( @RequestParam String zone) { |
||||
|
String apiUrl = "https://gccservices.in/gccrestservices/dropdown/api/wardbyzone?zoneId="+zone; |
||||
|
Map<String, Object> responseMap = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
String response = restTemplate.getForObject(apiUrl, String.class); |
||||
|
|
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
JsonNode rootArray = objectMapper.readTree(response); |
||||
|
|
||||
|
// ✅ The response is an array, so get the first element |
||||
|
if (rootArray.isArray() && rootArray.size() > 0) { |
||||
|
JsonNode firstObject = rootArray.get(0); |
||||
|
|
||||
|
boolean status = firstObject.path("status").asBoolean(false); |
||||
|
|
||||
|
if (status) { |
||||
|
JsonNode dataArray = firstObject.path("data"); |
||||
|
responseMap.put("status", "success"); |
||||
|
responseMap.put("code", 200); |
||||
|
responseMap.put("message", "Data found"); |
||||
|
responseMap.put("data", objectMapper.convertValue( |
||||
|
dataArray, new TypeReference<List<Map<String, Object>>>() {})); |
||||
|
return ResponseEntity.ok(responseMap); |
||||
|
} else { |
||||
|
responseMap.put("status", "failure"); |
||||
|
responseMap.put("code", 404); |
||||
|
responseMap.put("message", "No Zones found"); |
||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseMap); |
||||
|
} |
||||
|
} else { |
||||
|
responseMap.put("status", "failure"); |
||||
|
responseMap.put("code", 404); |
||||
|
responseMap.put("message", "Invalid response format"); |
||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseMap); |
||||
|
} |
||||
|
|
||||
|
} catch (Exception ex) { |
||||
|
responseMap.put("status", "error"); |
||||
|
responseMap.put("code", HttpStatus.INTERNAL_SERVER_ERROR.value()); |
||||
|
responseMap.put("message", "Unexpected error occurred"); |
||||
|
responseMap.put("details", ex.getMessage()); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseMap); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getstreetdetails") |
||||
|
public Map<String, Object> getstreetdetails( |
||||
|
@RequestParam String startDate, |
||||
|
@RequestParam String endDate, |
||||
|
@RequestParam String variable) { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
||||
|
DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
||||
|
|
||||
|
String formattedStartDate = LocalDate.parse(startDate, inputFormat).format(outputFormat); |
||||
|
String formattedEndDate = LocalDate.parse(endDate, inputFormat).format(outputFormat); |
||||
|
|
||||
|
// 🔹 Call external API |
||||
|
String apiUrl = "https://gccservices.in/gccofficialapp/api/asset/scpReportAssetList" |
||||
|
+ "?assetTypeId=2" |
||||
|
+ "&fromDate=" + formattedStartDate |
||||
|
+ "&toDate=" + formattedEndDate |
||||
|
+ "&loginId=5662" |
||||
|
+ "&status=Cleaned" |
||||
|
+ "&streetid=" + variable; |
||||
|
|
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
ResponseEntity<String> apiResponse = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
|
||||
|
List<Map<String, Object>> reportData = new ArrayList<>(); |
||||
|
|
||||
|
if (apiResponse.getStatusCode().is2xxSuccessful() && apiResponse.getBody() != null) { |
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
JsonNode rootNode = mapper.readTree(apiResponse.getBody()); |
||||
|
JsonNode reportNode = rootNode.path("scpreport"); |
||||
|
|
||||
|
if (reportNode.isArray() && reportNode.size() > 0) { |
||||
|
reportData = mapper.convertValue( |
||||
|
reportNode, |
||||
|
new TypeReference<List<Map<String, Object>>>() {} |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (reportData.isEmpty()) { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("data", Collections.emptyList()); |
||||
|
} else { |
||||
|
// 🔹 Enrich each data item with questions_part |
||||
|
List<Map<String, Object>> enrichedData = scpservice.enrichScpReportWithQuestions(reportData); |
||||
|
|
||||
|
response.put("status", "success"); |
||||
|
response.put("data", enrichedData); |
||||
|
} |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// @PostMapping("/saveanswer") |
||||
|
// public ResponseEntity<Map<String, Object>> saveAnswer(@RequestBody List<Map<String, Object>> answers) { |
||||
|
// Map<String, Object> response = new HashMap<>(); |
||||
|
// |
||||
|
// try { |
||||
|
// boolean success = scpservice.saveAnswers(answers); |
||||
|
// if (success) { |
||||
|
// response.put("status", "success"); |
||||
|
// response.put("message", "Feedback submitted successfully!"); |
||||
|
// return ResponseEntity.ok(response); |
||||
|
// } else { |
||||
|
// response.put("status", "error"); |
||||
|
// response.put("message", "Fail to Save."); |
||||
|
// return ResponseEntity.status(500).body(response); |
||||
|
// } |
||||
|
// } catch (Exception e) { |
||||
|
// e.printStackTrace(); |
||||
|
// response.put("status", "error"); |
||||
|
// response.put("message", "Exception: " + e.getMessage()); |
||||
|
// return ResponseEntity.status(500).body(response); |
||||
|
// } |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
@PostMapping("/saveanswer") |
||||
|
public ResponseEntity<Map<String, Object>> saveAnswer(@RequestBody List<Map<String, Object>> answers) { |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
String result = scpservice.saveAnswers(answers); |
||||
|
|
||||
|
if ("success".equals(result)) { |
||||
|
response.put("status", "success"); |
||||
|
response.put("message", "Feedback submitted successfully!"); |
||||
|
return ResponseEntity.ok(response); |
||||
|
|
||||
|
} else if ("duplicate".equals(result)) { |
||||
|
response.put("status", "duplicate"); |
||||
|
response.put("message", "Already submitted by another one, So refresh the page"); |
||||
|
return ResponseEntity.ok(response); |
||||
|
|
||||
|
} else { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Fail to Save."); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Exception: " + e.getMessage()); |
||||
|
return ResponseEntity.status(500).body(response); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/getreportdatabyfilters") |
||||
|
public Map<String, Object> getreportdatabyfilters( |
||||
|
@RequestParam String startDate, |
||||
|
@RequestParam String endDate, |
||||
|
@RequestParam String zone, |
||||
|
@RequestParam String ward) { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
||||
|
DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
||||
|
|
||||
|
String formattedStartDate = LocalDate.parse(startDate, inputFormat).format(outputFormat); |
||||
|
String formattedEndDate = LocalDate.parse(endDate, inputFormat).format(outputFormat); |
||||
|
|
||||
|
// Build API URL |
||||
|
String apiUrl = "https://gccservices.in/gccofficialapp/api/asset/scpfilterReports" |
||||
|
+ "?assetTypeId=2" |
||||
|
+ "&fromDate=" + formattedStartDate |
||||
|
+ "&toDate=" + formattedEndDate |
||||
|
+ "&loginId=5662"; |
||||
|
|
||||
|
if (!zone.isEmpty()) { |
||||
|
apiUrl += "&zone=" + zone; |
||||
|
} |
||||
|
if (!ward.isEmpty()) { |
||||
|
apiUrl += "&ward=" + ward; |
||||
|
} |
||||
|
|
||||
|
System.out.println("apiUrl=" + apiUrl); |
||||
|
|
||||
|
// Call the external API |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
ResponseEntity<String> apiResponse = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
|
||||
|
if (apiResponse.getStatusCode().is2xxSuccessful() && apiResponse.getBody() != null) { |
||||
|
|
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
|
||||
|
// Parse full JSON |
||||
|
JsonNode rootNode = mapper.readTree(apiResponse.getBody()); |
||||
|
|
||||
|
// Extract "scpreport" array |
||||
|
JsonNode reportNode = rootNode.path("scpreport"); |
||||
|
|
||||
|
if (reportNode.isMissingNode() || !reportNode.isArray() || reportNode.size() == 0) { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("data", Collections.emptyList()); |
||||
|
} else { |
||||
|
// Convert JSON array → List<Map<String, Object>> |
||||
|
List<Map<String, Object>> reportList = mapper.convertValue( |
||||
|
reportNode, |
||||
|
new TypeReference<List<Map<String, Object>>>() {} |
||||
|
); |
||||
|
|
||||
|
|
||||
|
// Declare dbMap outside conditional blocks |
||||
|
Map<String, Map<String, Object>> dbMap = new HashMap<>(); |
||||
|
List<Map<String, Object>> dbList = new ArrayList<>(); |
||||
|
/* |
||||
|
// Fetch DB data based on filters |
||||
|
if (zone.isEmpty() && ward.isEmpty()) { |
||||
|
dbList = scpservice.getZoneWiseReportData(); |
||||
|
dbMap = dbList.stream().collect(Collectors.toMap( |
||||
|
row -> String.valueOf(row.get("zone")), |
||||
|
row -> row |
||||
|
)); |
||||
|
} else if (ward.isEmpty() && !zone.isEmpty()) { |
||||
|
dbList = scpservice.getWardWiseReportData(zone); |
||||
|
dbMap = dbList.stream().collect(Collectors.toMap( |
||||
|
row -> String.valueOf(row.get("ward")), |
||||
|
row -> row |
||||
|
)); |
||||
|
} else if (!ward.isEmpty() && !zone.isEmpty()) { |
||||
|
dbList = scpservice.getStreetWiseReportData(zone, ward); |
||||
|
dbMap = dbList.stream().collect(Collectors.toMap( |
||||
|
row -> String.valueOf(row.get("streetid")), |
||||
|
row -> row |
||||
|
)); |
||||
|
} |
||||
|
*/ |
||||
|
// Fetch DB data based on filters |
||||
|
if (zone.isEmpty() && ward.isEmpty()) { |
||||
|
|
||||
|
dbList = scpservice.getZoneWiseReportData(); |
||||
|
|
||||
|
for (Map<String, Object> row : dbList) { |
||||
|
String key = String.valueOf(row.get("zone")); |
||||
|
dbMap.put(key, row); |
||||
|
} |
||||
|
|
||||
|
} else if (ward.isEmpty() && !zone.isEmpty()) { |
||||
|
|
||||
|
dbList = scpservice.getWardWiseReportData(zone); |
||||
|
|
||||
|
for (Map<String, Object> row : dbList) { |
||||
|
String key = String.valueOf(row.get("ward")); |
||||
|
dbMap.put(key, row); |
||||
|
} |
||||
|
|
||||
|
} else if (!ward.isEmpty() && !zone.isEmpty()) { |
||||
|
|
||||
|
dbList = scpservice.getStreetWiseReportData(zone, ward); |
||||
|
|
||||
|
for (Map<String, Object> row : dbList) { |
||||
|
String key = String.valueOf(row.get("streetid")); |
||||
|
dbMap.put(key, row); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// Merge API data with DB data |
||||
|
// Merge API data with DB data |
||||
|
for (int i = 0; i < reportList.size(); i++) { |
||||
|
Map<String, Object> apiRow = reportList.get(i); |
||||
|
String variableValue = String.valueOf(apiRow.get("VARIABLE")); |
||||
|
boolean isLast = (i == reportList.size() - 1); // check if it's the last element |
||||
|
|
||||
|
if (dbMap.containsKey(variableValue)) { |
||||
|
Map<String, Object> dbRow = dbMap.get(variableValue); |
||||
|
apiRow.put("Completed", dbRow.get("Completed")); |
||||
|
apiRow.put("Yes", dbRow.get("YesCount")); |
||||
|
apiRow.put("No", dbRow.get("NoCount")); |
||||
|
apiRow.put("Available", dbRow.get("AvailableCount")); |
||||
|
apiRow.put("Not Available", dbRow.get("NotAvailableCount")); |
||||
|
apiRow.put("Image Not Clear", dbRow.get("ImageNotClearCount")); |
||||
|
apiRow.put("LidGoodYesCount", dbRow.get("LidGoodYesCount")); |
||||
|
apiRow.put("LidGoodNoCount", dbRow.get("LidGoodNoCount")); |
||||
|
} else { |
||||
|
// If last list → use "-" |
||||
|
if (isLast) { |
||||
|
apiRow.put("Completed", "-"); |
||||
|
apiRow.put("Yes", "-"); |
||||
|
apiRow.put("No", "-"); |
||||
|
apiRow.put("Available", "-"); |
||||
|
apiRow.put("Not Available", "-"); |
||||
|
apiRow.put("Image Not Clear", "-"); |
||||
|
apiRow.put("LidGoodYesCount", "-"); |
||||
|
apiRow.put("LidGoodNoCount", "-"); |
||||
|
} else { |
||||
|
// For all others → use 0 |
||||
|
apiRow.put("Completed", 0); |
||||
|
apiRow.put("Yes", 0); |
||||
|
apiRow.put("No", 0); |
||||
|
apiRow.put("Available", 0); |
||||
|
apiRow.put("Not Available", 0); |
||||
|
apiRow.put("Image Not Clear", 0); |
||||
|
apiRow.put("LidGoodYesCount", 0); |
||||
|
apiRow.put("LidGoodNoCount", 0); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
response.put("status", "success"); |
||||
|
response.put("data", reportList); |
||||
|
if(zone.isEmpty() && ward.isEmpty()) { |
||||
|
response.put("table", "table1"); |
||||
|
} |
||||
|
else if(ward.isEmpty() && !zone.isEmpty()) { |
||||
|
response.put("table", "table2"); |
||||
|
} |
||||
|
else if(!ward.isEmpty() && !zone.isEmpty()) { |
||||
|
response.put("table", "table3"); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} else { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("data", Collections.emptyList()); |
||||
|
} |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getdetailreportdata") |
||||
|
public Map<String, Object> getDetailreportdatabyfilters( |
||||
|
@RequestParam String startDate, |
||||
|
@RequestParam String endDate) { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
List<Map<String,Object>> list=scpservice.getdetailreport(startDate,endDate); |
||||
|
|
||||
|
if(list.isEmpty()) { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("message", "No Data"); |
||||
|
} |
||||
|
else { |
||||
|
response.put("status", "success"); |
||||
|
response.put("data", list); |
||||
|
response.put("message", "Fetched Data Successfully"); |
||||
|
} |
||||
|
} |
||||
|
catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,55 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.QaqcAgentsService; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("/gcc/callcenterqaqcscp") |
||||
|
@Controller("callCenterQaQcScpController") |
||||
|
public class ScpMaincontroller { |
||||
|
|
||||
|
@Autowired |
||||
|
private QaqcAgentsService agentsService; |
||||
|
|
||||
|
@GetMapping("/scpverification") |
||||
|
public String viewDomesticWastepage(Model model) { |
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("userId",userId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
return "modules/callcenterqaqc/scpverification"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/scpreport") |
||||
|
public String viewReportPage(Model model) { |
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("userId",userId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
List<Map<String, Object>> agent=agentsService.getAgentName(userId); |
||||
|
model.addAttribute("agent", agent); |
||||
|
|
||||
|
return "modules/callcenterqaqc/scpreport"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,464 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import java.io.InputStream; |
||||
|
import java.net.URL; |
||||
|
import java.net.URLConnection; |
||||
|
import java.net.URLEncoder; |
||||
|
import java.nio.charset.StandardCharsets; |
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.time.LocalDate; |
||||
|
import java.time.format.DateTimeFormatter; |
||||
|
import java.time.format.DateTimeParseException; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Date; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
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; |
||||
|
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; |
||||
|
|
||||
|
import com.fasterxml.jackson.databind.JsonNode; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.SocialMediaService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
|
||||
|
@RequestMapping("gcc/api/callcenterqaqc/socialmedia") |
||||
|
@RestController |
||||
|
public class SocialMediaApiController { |
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
private final AppConfig appConfig; |
||||
|
|
||||
|
@Autowired |
||||
|
public SocialMediaService socialservice; |
||||
|
|
||||
|
@Autowired |
||||
|
public SocialMediaApiController(RestTemplate restTemplate, AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/update") |
||||
|
@ResponseBody |
||||
|
public ResponseEntity<String> updateCallDetails(@RequestParam("complaintNumber") String complaintNumber, |
||||
|
@RequestParam("userId") String userId,@RequestParam("action") String action,@RequestParam("remarks") String remarks, |
||||
|
@RequestParam(value = "remainderDate", required = false) String remainderDate |
||||
|
) { |
||||
|
try { |
||||
|
// System.out.println("Updating Complaint Number: " + complaintNumber); |
||||
|
// System.out.println("userId= " + userId); |
||||
|
// System.out.println("action= " + action); |
||||
|
// System.out.println("remarks="+remarks); |
||||
|
int updated_agent = Integer.parseInt(userId); |
||||
|
// System.out.println("remainderDate: " + remainderDate); |
||||
|
if(remarks.isEmpty()) |
||||
|
{ |
||||
|
remarks="N/A"; |
||||
|
} |
||||
|
|
||||
|
String erp_name=socialservice.getErpusernamebyId(userId); |
||||
|
// System.out.println("erp_name=="+erp_name); |
||||
|
if (erp_name.isEmpty()) { |
||||
|
return ResponseEntity.ok("erpname"); |
||||
|
} |
||||
|
|
||||
|
if ("COMPLETED".equals(action) || "REOPEN".equals(action)) |
||||
|
{ |
||||
|
boolean statusUpdated =ChangeStatusInErp(complaintNumber,action,remarks,erp_name); |
||||
|
//System.out.println("statusUpdated="+statusUpdated); |
||||
|
|
||||
|
if (!statusUpdated) |
||||
|
{ |
||||
|
return ResponseEntity.ok("error"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
Map<String, Object> details =getDetailsByComplaintNumber(complaintNumber); |
||||
|
int rowInserted=socialservice.uploadComplaintDetailsInLogs(details,action,remarks,updated_agent,remainderDate); |
||||
|
if(rowInserted!=1) |
||||
|
{ |
||||
|
return ResponseEntity.ok("save"); |
||||
|
} |
||||
|
return ResponseEntity.ok("Success"); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public Map<String, Object> getDetailsByComplaintNumber(String complaintNumber) { |
||||
|
|
||||
|
Map<String, Object> resultMap = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
String url = "https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=getComplaintByID&ComplaintId=" |
||||
|
+ complaintNumber + "&imgUrlonly=yes&isQcuser=Yes&jsonResp=Yes"; |
||||
|
//System.out.println("Request URL: " + url); |
||||
|
|
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); |
||||
|
|
||||
|
if (responseEntity.getStatusCode().is2xxSuccessful()) { |
||||
|
String responseBody = responseEntity.getBody(); |
||||
|
//System.out.println("Response Body: " + responseBody); |
||||
|
|
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
JsonNode rootNode = mapper.readTree(responseBody); |
||||
|
|
||||
|
JsonNode complaintDetails = rootNode.path(0).path("ComplaintListHistory").path(0); |
||||
|
|
||||
|
String registerDate=complaintDetails.path("complaintopendate").asText("N/A"); |
||||
|
//System.out.println("registerdate====="+registerDate); |
||||
|
|
||||
|
String formattedDate = "N/A"; // Default value if parsing fails |
||||
|
|
||||
|
if (!registerDate.equals("N/A") && !registerDate.isEmpty()) { |
||||
|
try { |
||||
|
// Parse the input date string |
||||
|
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); |
||||
|
Date date = inputFormat.parse(registerDate); |
||||
|
|
||||
|
// Format the date to dd-MM-yyyy |
||||
|
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy"); |
||||
|
formattedDate = outputFormat.format(date); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); // Log exception for debugging |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (!complaintDetails.isMissingNode()) { |
||||
|
// Existing fields |
||||
|
resultMap.put("complaintid", complaintDetails.path("complaintid").asText("N/A")); |
||||
|
resultMap.put("complaintdate", formattedDate); |
||||
|
resultMap.put("complainantName", complaintDetails.path("CustomerName").asText("N/A")); |
||||
|
resultMap.put("mobileNumber", complaintDetails.path("CustomerMobile").asText("N/A")); |
||||
|
resultMap.put("complaintType", complaintDetails.path("complainttype").asText("N/A")); |
||||
|
resultMap.put("description", complaintDetails.path("complaintdetails").asText("N/A")); |
||||
|
resultMap.put("currentStatus", complaintDetails.path("complaintcurrentstatus").asText("N/A")); |
||||
|
resultMap.put("Street", complaintDetails.path("Street").asText("N/A")); |
||||
|
resultMap.put("Area", complaintDetails.path("Area").asText("N/A")); |
||||
|
resultMap.put("Landmark", complaintDetails.path("Landmark").asText("N/A")); |
||||
|
resultMap.put("Location", complaintDetails.path("Location").asText("N/A")); |
||||
|
resultMap.put("Zone", complaintDetails.path("Zone").asText("N/A")); |
||||
|
resultMap.put("Division", complaintDetails.path("Division").asText("N/A")); |
||||
|
resultMap.put("OfficialMobile", complaintDetails.path("OfficialMobile").asText("N/A")); |
||||
|
resultMap.put("gender", complaintDetails.path("GENDER").asText("N/A")); |
||||
|
resultMap.put("deptname",complaintDetails.path("DEPT_NAME").asText("N/A")); |
||||
|
resultMap.put("compmode", complaintDetails.path("COMP_MODE").asText("N/A")); |
||||
|
resultMap.put("Officialname", complaintDetails.path("Officialname").asText("N/A")); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
} else { |
||||
|
resultMap.put("error", "Failed to retrieve complaint details."); |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
resultMap.put("error", "Error processing request"); |
||||
|
} |
||||
|
|
||||
|
return resultMap; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public boolean ChangeStatusInErp(String complaintNumber,String action ,String remarks,String erp_name) { |
||||
|
String baseUrl = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?"; |
||||
|
String status = ""; |
||||
|
|
||||
|
|
||||
|
//String Erpname ="QAops1"; |
||||
|
|
||||
|
try { |
||||
|
// Encode parameters |
||||
|
String encodedComplaintNumber = URLEncoder.encode(complaintNumber, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
String encodedRemarks = URLEncoder.encode(remarks, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
String encodedErpname = URLEncoder.encode(erp_name, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
|
||||
|
// Determine status based on action |
||||
|
if ("COMPLETED".equals(action)) { |
||||
|
status = "11"; |
||||
|
} else if ("REOPEN".equals(action)) { |
||||
|
status = "9"; |
||||
|
} else { |
||||
|
return false; // Invalid action, return false |
||||
|
} |
||||
|
|
||||
|
// Construct the URL |
||||
|
String urlString = baseUrl |
||||
|
+ "serviceId=UpdateComplaint" |
||||
|
+ "&ComplaintId=" + encodedComplaintNumber |
||||
|
+ "&Message=" + encodedRemarks |
||||
|
+ "&UserType=Official" |
||||
|
+ "&Status=" + status |
||||
|
+ "&Comp_Image=" |
||||
|
+ "&erp_username=" + encodedErpname; |
||||
|
|
||||
|
System.out.println("ERP Hitting URL="+urlString); |
||||
|
|
||||
|
// Send the request |
||||
|
return sendRequest(urlString); |
||||
|
// return true; |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private boolean sendRequest(String urlString) { |
||||
|
try { |
||||
|
URL url = new URL(urlString); |
||||
|
URLConnection urlcon = url.openConnection(); |
||||
|
InputStream stream = urlcon.getInputStream(); |
||||
|
StringBuilder responseBuilder = new StringBuilder(); |
||||
|
int i; |
||||
|
while ((i = stream.read()) != -1) { |
||||
|
responseBuilder.append((char) i); |
||||
|
} |
||||
|
stream.close(); |
||||
|
|
||||
|
// Parse the response |
||||
|
String response = responseBuilder.toString(); |
||||
|
//System.out.println("Raw Response: " + response); |
||||
|
|
||||
|
// Check ResultStatus in the response |
||||
|
if (response.contains("\"ResultStatus\": true")) { |
||||
|
//System.out.println("ResultStatus is true in the response."); |
||||
|
return true; |
||||
|
} else { |
||||
|
System.out.println("ResultStatus is false or not present in the response."); |
||||
|
return false; |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getsocialmediacomps") |
||||
|
public Map<String, Object> viewSocialMediaData( |
||||
|
@RequestParam String startDate, |
||||
|
@RequestParam String endDate, |
||||
|
@RequestParam String status, |
||||
|
@RequestParam String group, |
||||
|
@RequestParam String type, |
||||
|
@RequestParam String zone, |
||||
|
@RequestParam String region) { |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
LocalDate fromLocalDate = LocalDate.parse(startDate, DateTimeFormatter.ISO_DATE); |
||||
|
LocalDate toLocalDate = LocalDate.parse(endDate, DateTimeFormatter.ISO_DATE); |
||||
|
String formattedFromDate = fromLocalDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")); |
||||
|
String formattedToDate = toLocalDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")); |
||||
|
|
||||
|
String mode="SOCIAL MEDIA"; |
||||
|
|
||||
|
String encoded_mode=URLEncoder.encode(mode, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
|
||||
|
//String url="https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=ms_dashboard_details&From_date="+formattedFromDate+"&To_date="+formattedToDate+"&jsonResp=Yes&Status="+status+"&isQcuser=Yes"+"&ComplaintType="+type+"&ComplaintGroupId="+group+"&compmode="+encoded_mode+"&Zoneid="+zone; |
||||
|
|
||||
|
//String url="https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=ms_dashboard_details&From_date="+formattedFromDate+"&To_date="+formattedToDate+"&jsonResp=Yes&Status="+status+"&isQcuser=Yes"+"&ComplaintType="+type+"&ComplaintGroupId="+group+"&compmode="+mode+"&Zoneid="+zone; |
||||
|
|
||||
|
String url="https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=ms_dashboard_details&From_date="+formattedFromDate+"&To_date="+formattedToDate+"&jsonResp=Yes&Status="+status+"&isQcuser=Yes"+"&ComplaintType="+type+"&ComplaintGroupId="+group+"&compmode="+mode+"&Zoneid="+zone+"&RegionId="+region; |
||||
|
|
||||
|
//System.out.println("url==="+url); |
||||
|
|
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
|
||||
|
// Fetch response as String |
||||
|
ResponseEntity<String> responses = restTemplate.getForEntity(url, String.class); |
||||
|
String rawResponse = responses.getBody(); |
||||
|
|
||||
|
// Preprocess response to remove invalid characters if needed |
||||
|
if (rawResponse != null) { |
||||
|
//rawResponse = rawResponse.replaceAll("\"\"", "\""); // Replace double-double quotes |
||||
|
//rawResponse = rawResponse.replaceAll("(?<![,{])\"R", "\"R"); // Example: Fix missing commas |
||||
|
} |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
Map<String, Object> responseMap = objectMapper.readValue(rawResponse, Map.class); |
||||
|
List<Map<String, Object>> details; |
||||
|
details = (List<Map<String, Object>>) responseMap.get("Details"); |
||||
|
//System.out.println("details="+details); |
||||
|
|
||||
|
|
||||
|
if (details != null) { |
||||
|
if(status.equals("redressed") || status.equals("closed")) { |
||||
|
|
||||
|
details=socialservice.getfiltreddetails(details); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (details == null) { |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("message", "No Data, please change criteria"); |
||||
|
} |
||||
|
else { |
||||
|
response.put("status", "success"); |
||||
|
response.put("details", details); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
catch (Exception e) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "An error occurred while fetching data."); |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/socialmediacompletedlist") |
||||
|
public Map<String, Object> viewSocialMediaCompletedData( |
||||
|
@RequestParam String startDate, |
||||
|
@RequestParam String endDate, @RequestParam String status, |
||||
|
@RequestParam String zone) { |
||||
|
|
||||
|
//System.out.printf("==================="+startDate,endDate,zone); |
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
LocalDate fromLocalDate = LocalDate.parse(startDate, DateTimeFormatter.ISO_DATE); |
||||
|
LocalDate toLocalDate = LocalDate.parse(endDate, DateTimeFormatter.ISO_DATE); |
||||
|
String formattedFromDate = fromLocalDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); |
||||
|
String formattedToDate = toLocalDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); |
||||
|
|
||||
|
List<Map<String, Object>> details= socialservice.getdetails(formattedFromDate,formattedToDate,status,zone); |
||||
|
if(details==null) |
||||
|
{ |
||||
|
response.put("status", "nodata"); |
||||
|
response.put("message", "No data for Selected filter"); |
||||
|
} |
||||
|
else { |
||||
|
response.put("status", "success"); |
||||
|
response.put("details", details); |
||||
|
} |
||||
|
} |
||||
|
catch (DateTimeParseException e) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "Invalid date format. Please use 'yyyy-MM-dd'."); |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
catch (Exception e) { |
||||
|
response.put("status", "error"); |
||||
|
response.put("message", "An error occurred while fetching data."); |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getA1dropdowns") |
||||
|
public ResponseEntity<?> getA1dropdowns(){ |
||||
|
try { |
||||
|
List<Map<String, Object>> list = socialservice.getA1dropdowns(); |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
response.put("status", "success"); |
||||
|
response.put("data", list); |
||||
|
|
||||
|
return ResponseEntity.ok(response); |
||||
|
|
||||
|
} catch (Exception ex) { |
||||
|
ex.printStackTrace(); |
||||
|
|
||||
|
Map<String, Object> error = new HashMap<>(); |
||||
|
error.put("status", "error"); |
||||
|
error.put("message", ex.getMessage()); |
||||
|
|
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getA2dropdowns") |
||||
|
public ResponseEntity<?> getA2dropdowns(){ |
||||
|
try { |
||||
|
List<Map<String, Object>> list = socialservice.getA2dropdowns(); |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
response.put("status", "success"); |
||||
|
response.put("data", list); |
||||
|
|
||||
|
return ResponseEntity.ok(response); |
||||
|
|
||||
|
} catch (Exception ex) { |
||||
|
ex.printStackTrace(); |
||||
|
|
||||
|
Map<String, Object> error = new HashMap<>(); |
||||
|
error.put("status", "error"); |
||||
|
error.put("message", ex.getMessage()); |
||||
|
|
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/checkregisteredcomplaint") |
||||
|
public Map<String, Object> checkRegisteredComplaint( |
||||
|
@RequestParam String complaintNumber) { |
||||
|
|
||||
|
return socialservice.checkRegisteredComplaint(complaintNumber); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/submitRegClosingComplaint") |
||||
|
public Map<String, Object> submitRegClosingComplaint( |
||||
|
@RequestParam String complaintNumber, |
||||
|
@RequestParam String remarks, |
||||
|
@RequestParam MultipartFile resolvedImage, |
||||
|
@RequestParam String cby) { |
||||
|
|
||||
|
|
||||
|
return socialservice.submitRegClosingComplaint( |
||||
|
complaintNumber, |
||||
|
remarks, |
||||
|
resolvedImage, |
||||
|
cby); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getfilteredregcomps") |
||||
|
public Map<String, Object> getFilteredRegComps() { |
||||
|
|
||||
|
return socialservice.getFilteredRegComps(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/approveComplaint") |
||||
|
@ResponseBody |
||||
|
public Map<String, Object> approveComplaint( |
||||
|
@RequestParam String complaintId, |
||||
|
@RequestParam String remarks, |
||||
|
@RequestParam String imgFullPath, |
||||
|
@RequestParam String userid |
||||
|
) { |
||||
|
|
||||
|
|
||||
|
return socialservice.approveComplaint( |
||||
|
complaintId, |
||||
|
remarks, |
||||
|
imgFullPath, |
||||
|
userid); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/rejectComplaint") |
||||
|
public Map<String, Object> rejectComplaint( |
||||
|
@RequestParam String complaintId, |
||||
|
@RequestParam String userid |
||||
|
) { |
||||
|
|
||||
|
return socialservice.rejectComplaint( |
||||
|
complaintId, |
||||
|
userid); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,50 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("/gcc/callcenterqaqcsocialmedia") |
||||
|
@Controller("callCenterQaQcSocialMediaController") |
||||
|
public class SocialMediaMainController { |
||||
|
|
||||
|
@GetMapping("/socialmediacomplaints") |
||||
|
public String viewSocialMediaComplaints(Model model) { |
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("userId", userId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
return "modules/callcenterqaqc/socialmediacomplaints"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/smfinishedcomplaints") |
||||
|
public String viewSocialMediaCompletedComplaints(Model model) { |
||||
|
String loginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
int userId = Integer.parseInt(loginUserId); |
||||
|
|
||||
|
model.addAttribute("LoginUserId", loginUserId); |
||||
|
model.addAttribute("userId", userId); |
||||
|
model.addAttribute("agent_name", LoginUserInfo.getCurrentUserDetails().getUsername()); |
||||
|
model.addAttribute("UserRole", LoginUserInfo.getUserRole()); |
||||
|
|
||||
|
return "modules/callcenterqaqc/socialmediacompletedlist"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/regcompclosing") |
||||
|
public String viewregCompClosing(Model model) { |
||||
|
|
||||
|
String userId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("userId", userId); |
||||
|
|
||||
|
return "modules/callcenterqaqc/socialmediaregcompclosing"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,82 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.controller; |
||||
|
|
||||
|
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 in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.StatusCountService; |
||||
|
|
||||
|
@RequestMapping("gcc/api/callcenterqaqc") |
||||
|
@RestController |
||||
|
public class StatusCountController { |
||||
|
|
||||
|
@Autowired |
||||
|
private StatusCountService statusCountService; |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
public StatusCountController(StatusCountService statusCountService) { |
||||
|
this.statusCountService = statusCountService; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/dashboard") |
||||
|
public ResponseEntity<Map<String, Object>> getDashboardData( |
||||
|
@RequestParam(value = "startDate", required = false, defaultValue = "") String fromDate, |
||||
|
@RequestParam(value = "endDate", required = false, defaultValue = "") String toDate, |
||||
|
@RequestParam(value = "dropdown1", required = false, defaultValue = "") String compType, |
||||
|
@RequestParam(value = "dropdown2", required = false, defaultValue = "") String zoneName, |
||||
|
@RequestParam(value = "dropdown3", required = false,defaultValue = "") String compMode, |
||||
|
@RequestParam(value = "dropdown4", required = false, defaultValue = "") String compGroup, |
||||
|
@RequestParam(value = "regiondropdown", required = false, defaultValue = "") String region) { |
||||
|
|
||||
|
|
||||
|
Map<String, Object> counts = statusCountService.fetchComplaintCounts(fromDate, toDate, compType, zoneName, compMode, compGroup,region); |
||||
|
//System.out.println("counts:" + counts); |
||||
|
//System.out.println("group:" + compGroup); |
||||
|
return ResponseEntity.ok(counts); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getComplaintTypesByGroup") |
||||
|
public ResponseEntity<List<String>> getComplaintTypesByGroup(@RequestParam String group) { |
||||
|
List<String> complaintTypes = statusCountService.fetchComplaintTypes(group); |
||||
|
return ResponseEntity.ok(complaintTypes); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getComplaintGroup") |
||||
|
public ResponseEntity<List<String>> getComplaintGroup() { |
||||
|
List<String> complaintGroup= statusCountService.fetchComplaintGroup(); |
||||
|
//System.out.println("types:"+complaintTypes); |
||||
|
return ResponseEntity.ok(complaintGroup); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getModes") |
||||
|
public ResponseEntity<List<String>> getModes() { |
||||
|
List<String> modes= statusCountService.fetchModes(); |
||||
|
//System.out.println("types:"+modes); |
||||
|
return ResponseEntity.ok(modes); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getZones") |
||||
|
public ResponseEntity<List<String>> getZones() { |
||||
|
List<String> zones= statusCountService.fetchZones(); |
||||
|
//System.out.println("types:"+zones); |
||||
|
return ResponseEntity.ok(zones); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,358 @@ |
|||||
|
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; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.callcenterqaqc.service.WhatsappqaqcMsgService; |
||||
|
|
||||
|
@RestController("callcenterqaqcwhatsapp") |
||||
|
@RequestMapping("/gcc/api/qaqc/whatsapp") |
||||
|
public class WhatsappController { |
||||
|
|
||||
|
@Autowired |
||||
|
private WhatsappqaqcMsgService whatsappqaqcMsgService; |
||||
|
|
||||
|
@PostMapping("/send-whatsapp-message") |
||||
|
public ResponseEntity<String> sendWhatsAppMessage(@RequestParam String msgUrl,@RequestParam String tamilmsgUrl) { |
||||
|
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<String, Object> 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(returnedAction+" Whatsapp Message Triggered for "+complaintNumber); |
||||
|
return true; |
||||
|
} |
||||
|
else { |
||||
|
System.out.println(returnedAction+ " 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 { |
||||
|
|
||||
|
|
||||
|
String placeholders = |
||||
|
URLEncoder.encode( |
||||
|
pname + "|~|" + cat + "|~|" + complaintNumber, |
||||
|
StandardCharsets.UTF_8.toString()); |
||||
|
|
||||
|
String buttonPlaceholder = |
||||
|
URLEncoder.encode( |
||||
|
complaintNumber+ "|~|" +complaintNumber, |
||||
|
StandardCharsets.UTF_8.toString()); |
||||
|
|
||||
|
String mobile = |
||||
|
URLEncoder.encode( |
||||
|
mob_no, |
||||
|
StandardCharsets.UTF_8.toString()); |
||||
|
|
||||
|
|
||||
|
if("COMPLETED".equalsIgnoreCase(returnedAction)) { |
||||
|
|
||||
|
urlString="https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=5c995535-6244-11f0-98fc-02c8a5e042bd&from=919445061913&to="+mobile+"&templateid=3310383&type=template&placeholders="+placeholders; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
if("UNATTENDED".equalsIgnoreCase(returnedAction)) { |
||||
|
|
||||
|
|
||||
|
urlString="https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=5c995535-6244-11f0-98fc-02c8a5e042bd&from=919445061913&to="+mobile+"&templateid=3304038&type=template&placeholders="+placeholders+"&button_placeholder="+buttonPlaceholder; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
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 Whatsapp msg 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(value = "/getclosefromuser", produces = "text/html") |
||||
|
public String getclosefromuser(@RequestParam String complaintNumber) { |
||||
|
|
||||
|
String result = whatsappqaqcMsgService.getclosefromuser(complaintNumber); |
||||
|
|
||||
|
boolean success = result.contains("Successfully"); |
||||
|
String color = success ? "#28a745" : "#dc3545"; |
||||
|
|
||||
|
String logoUrl = "https://gccservices.in/gcc/assets/images/logo.png"; |
||||
|
|
||||
|
//background: #f5f5f5; |
||||
|
|
||||
|
return """ |
||||
|
<!DOCTYPE html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta charset="UTF-8"> |
||||
|
<title>GCC PGR Complaint Status</title> |
||||
|
<style> |
||||
|
body{ |
||||
|
font-family: Arial, sans-serif; |
||||
|
background: #1d495a; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
height: 100vh; |
||||
|
margin: 0; |
||||
|
} |
||||
|
|
||||
|
.card{ |
||||
|
width: 600px; |
||||
|
background: #fff; |
||||
|
border-radius: 12px; |
||||
|
box-shadow: 0 4px 15px rgba(0,0,0,0.15); |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
.card-header{ |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
padding: 15px 20px; |
||||
|
border-bottom: 1px solid #ddd; |
||||
|
background: #f8f9fa; |
||||
|
} |
||||
|
|
||||
|
.card-header img{ |
||||
|
width: 60px; |
||||
|
height: 60px; |
||||
|
object-fit: contain; |
||||
|
} |
||||
|
|
||||
|
.card-header h2{ |
||||
|
flex: 1; |
||||
|
text-align: center; |
||||
|
margin: 0; |
||||
|
color: #003366; |
||||
|
} |
||||
|
|
||||
|
.card-body{ |
||||
|
padding: 30px; |
||||
|
text-align: center; |
||||
|
min-height: 120px; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
} |
||||
|
|
||||
|
.card-body h3{ |
||||
|
white-space: pre-line; |
||||
|
margin: 0; |
||||
|
color: %s; |
||||
|
line-height: 1.8; |
||||
|
} |
||||
|
|
||||
|
.card-footer{ |
||||
|
padding: 12px 20px; |
||||
|
border-top: 1px solid #ddd; |
||||
|
text-align: right; |
||||
|
font-weight: bold; |
||||
|
color: #666; |
||||
|
background: #f8f9fa; |
||||
|
} |
||||
|
</style> |
||||
|
</head> |
||||
|
<body> |
||||
|
<div class="card"> |
||||
|
|
||||
|
<div class="card-header"> |
||||
|
<img src="%s" alt="GCC Logo"> |
||||
|
<h2>Thanks For Your Response !!!</h2> |
||||
|
</div> |
||||
|
|
||||
|
<div class="card-body"> |
||||
|
<h3>%s</h3> |
||||
|
</div> |
||||
|
|
||||
|
<div class="card-footer"> |
||||
|
- GCC |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</body> |
||||
|
</html> |
||||
|
""".formatted(color, logoUrl, result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping(value="/getreopenfromuser", produces = "text/html") |
||||
|
public String getreopenfromuser(@RequestParam String complaintNumber) { |
||||
|
|
||||
|
String result= whatsappqaqcMsgService.getreopenfromuser(complaintNumber); |
||||
|
|
||||
|
boolean success = result.contains("Successfully"); |
||||
|
String color = success ? "#28a745" : "#dc3545"; |
||||
|
|
||||
|
String logoUrl = "https://gccservices.in/gcc/assets/images/logo.png"; |
||||
|
|
||||
|
//background: #f5f5f5; |
||||
|
|
||||
|
return """ |
||||
|
<!DOCTYPE html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta charset="UTF-8"> |
||||
|
<title>GCC PGR Complaint Status</title> |
||||
|
<style> |
||||
|
body{ |
||||
|
font-family: Arial, sans-serif; |
||||
|
background: #1d495a; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
height: 100vh; |
||||
|
margin: 0; |
||||
|
} |
||||
|
|
||||
|
.card{ |
||||
|
width: 600px; |
||||
|
background: #fff; |
||||
|
border-radius: 12px; |
||||
|
box-shadow: 0 4px 15px rgba(0,0,0,0.15); |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
.card-header{ |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
padding: 15px 20px; |
||||
|
border-bottom: 1px solid #ddd; |
||||
|
background: #f8f9fa; |
||||
|
} |
||||
|
|
||||
|
.card-header img{ |
||||
|
width: 60px; |
||||
|
height: 60px; |
||||
|
object-fit: contain; |
||||
|
} |
||||
|
|
||||
|
.card-header h2{ |
||||
|
flex: 1; |
||||
|
text-align: center; |
||||
|
margin: 0; |
||||
|
color: #003366; |
||||
|
} |
||||
|
|
||||
|
.card-body{ |
||||
|
padding: 30px; |
||||
|
text-align: center; |
||||
|
min-height: 120px; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
} |
||||
|
|
||||
|
.card-body h3{ |
||||
|
white-space: pre-line; |
||||
|
margin: 0; |
||||
|
color: %s; |
||||
|
line-height: 1.8; |
||||
|
} |
||||
|
|
||||
|
.card-footer{ |
||||
|
padding: 12px 20px; |
||||
|
border-top: 1px solid #ddd; |
||||
|
text-align: right; |
||||
|
font-weight: bold; |
||||
|
color: #666; |
||||
|
background: #f8f9fa; |
||||
|
} |
||||
|
</style> |
||||
|
</head> |
||||
|
<body> |
||||
|
<div class="card"> |
||||
|
|
||||
|
<div class="card-header"> |
||||
|
<img src="%s" alt="GCC Logo"> |
||||
|
<h2>Thanks For Your Response !!!</h2> |
||||
|
</div> |
||||
|
|
||||
|
<div class="card-body"> |
||||
|
<h3>%s</h3> |
||||
|
</div> |
||||
|
|
||||
|
<div class="card-footer"> |
||||
|
- GCC |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</body> |
||||
|
</html> |
||||
|
""".formatted(color, logoUrl, result); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
@ -0,0 +1,95 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.HashMap; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.Random; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import org.apache.naming.java.javaURLContextFactory; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
@Service |
||||
|
public class ComplaintService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
private final String baseUrl = "https://erp.chennaicorporation.gov.in/pgr/newmobileservice"; |
||||
|
|
||||
|
public String fetchComplaintCategories() { |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
String url = baseUrl + "?serviceId=getComplCategory&ComplaintGroupId=null"; |
||||
|
return restTemplate.getForObject(url, String.class); |
||||
|
} |
||||
|
|
||||
|
public String fetchComplaintSubTypes(String groupId) { |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
String url = baseUrl + "?serviceId=getComplCategory&ComplaintGroupId=" + groupId; |
||||
|
return restTemplate.getForObject(url, String.class); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> fetchComplaintDetailsById(String complaintId) { |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
String url = baseUrl + "?serviceId=getComplaintByID&ComplaintId=" + complaintId; |
||||
|
String response = restTemplate.getForObject(url, String.class); |
||||
|
|
||||
|
try { |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
return objectMapper.readValue(response, new TypeReference<List<Map<String, Object>>>() { |
||||
|
}); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> fetchComplaintDetailsByMobile(String mobileNo) { |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
String url = baseUrl |
||||
|
+ "?serviceId=getComplaintListWithImg&From_date=01/01/2024&To_date=20/08/2024&jsonResp=Yes&UserType=Public&MobileNo=" |
||||
|
+ mobileNo + "&PageIndex=null&Status=null&repYear=2024"; |
||||
|
String response = restTemplate.getForObject(url, String.class); |
||||
|
|
||||
|
try { |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
return objectMapper.readValue(response, new TypeReference<List<Map<String, Object>>>() { |
||||
|
}); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return null; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public int saveInLogs(String mobileNo, String complaintNo,String userId) { |
||||
|
|
||||
|
int agent_id; |
||||
|
try { |
||||
|
agent_id = Integer.parseInt(userId); |
||||
|
} catch (NumberFormatException e) { |
||||
|
return 0; |
||||
|
} |
||||
|
|
||||
|
String sql = "INSERT INTO pgr_complaint_reg (user_mobile_num, complaint_number, agent_id) VALUES (?, ?, ?)"; |
||||
|
return jdbcTemplate.update(sql, mobileNo, complaintNo, agent_id); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,308 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import java.sql.PreparedStatement; |
||||
|
import java.sql.Statement; |
||||
|
import java.time.LocalDate; |
||||
|
import java.time.format.DateTimeFormatter; |
||||
|
import java.util.ArrayList; |
||||
|
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.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.jdbc.support.GeneratedKeyHolder; |
||||
|
import org.springframework.jdbc.support.KeyHolder; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
@Service |
||||
|
public class DomesticWasteService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Value("${fileBaseUrl}") |
||||
|
private String fileBaseUrl; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDatasource(@Qualifier("mysqlDomesticWasteDataSource") DataSource datasource) { |
||||
|
this.jdbcTemplate=new JdbcTemplate(datasource); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public Map<String, Object> saveMultipleWasteRequests(String user_name, String mobile, String address, |
||||
|
String latitude, String longitude, |
||||
|
String street_name, String street_id, String remarks, |
||||
|
String itemsJson,String userId,String zone, String ward) { |
||||
|
|
||||
|
|
||||
|
int agent_id=Integer.parseInt(userId); |
||||
|
int is_app=3; |
||||
|
String remarks1; |
||||
|
if (remarks == null || remarks.trim().isEmpty()) { |
||||
|
remarks1 = "-"; |
||||
|
} else { |
||||
|
remarks1 = remarks; |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
List<Map<String, Object>> items = objectMapper.readValue(itemsJson, new TypeReference<>() {}); |
||||
|
|
||||
|
String sofaSize = null; // declare before lambda |
||||
|
for (Map<String, Object> item : items) { |
||||
|
if ("2".equals(item.get("item_id").toString())) { // Sofa id = 2 |
||||
|
Object sizeObj = item.get("sofa_size"); // match your JS payload key |
||||
|
if (sizeObj != null && !sizeObj.toString().isEmpty()) { |
||||
|
sofaSize = sizeObj.toString(); |
||||
|
} |
||||
|
break; // found sofa, no need to loop further |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
final String finalSofaSize = sofaSize; |
||||
|
|
||||
|
|
||||
|
// Step 1: Insert main request (one time) |
||||
|
String insertMainSql = "INSERT INTO user_request_table " + |
||||
|
"(request_id, user_name, mobile, address, latitude, longitude, street_name, street_id, remarks,agent_id,is_app,zone,division,sofa_type) " + |
||||
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?)"; |
||||
|
|
||||
|
KeyHolder keyHolder = new GeneratedKeyHolder(); |
||||
|
jdbcTemplate.update(con -> { |
||||
|
PreparedStatement ps = con.prepareStatement(insertMainSql, Statement.RETURN_GENERATED_KEYS); |
||||
|
ps.setString(1, "TEMP"); // placeholder |
||||
|
ps.setString(2, user_name); |
||||
|
ps.setString(3, mobile); |
||||
|
ps.setString(4, address); |
||||
|
ps.setString(5, latitude); |
||||
|
ps.setString(6, longitude); |
||||
|
ps.setString(7, street_name); |
||||
|
ps.setString(8, street_id); |
||||
|
ps.setString(9, remarks1); |
||||
|
ps.setInt(10, agent_id); |
||||
|
ps.setInt(11, is_app); |
||||
|
ps.setString(12, zone); |
||||
|
ps.setString(13, ward); |
||||
|
ps.setString(14, finalSofaSize); |
||||
|
return ps; |
||||
|
}, keyHolder); |
||||
|
|
||||
|
int generatedId = keyHolder.getKey().intValue(); |
||||
|
String requestId = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) + generatedId; |
||||
|
|
||||
|
// Update request_id in user_request_table |
||||
|
jdbcTemplate.update("UPDATE user_request_table SET request_id = ? WHERE id = ?", requestId, generatedId); |
||||
|
|
||||
|
|
||||
|
String insertItemSql = "INSERT INTO items (iteam_id, quantity, req_table_id, requedt_id) VALUES (?, ?, ?, ?)"; |
||||
|
|
||||
|
for (Map<String, Object> item : items) { |
||||
|
Object itemIdObj = item.get("item_id"); |
||||
|
Object quantityObj = item.get("quantity"); |
||||
|
|
||||
|
if (itemIdObj == null || quantityObj == null) { |
||||
|
continue; |
||||
|
} |
||||
|
|
||||
|
int itemId = Integer.parseInt(itemIdObj.toString()); |
||||
|
int quantity = Integer.parseInt(quantityObj.toString()); |
||||
|
|
||||
|
jdbcTemplate.update(insertItemSql, itemId, quantity, generatedId, requestId); |
||||
|
} |
||||
|
|
||||
|
return Map.of("status", true,"message", "Request saved successfully","requestId", requestId); |
||||
|
|
||||
|
} |
||||
|
catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return Map.of("status", false, "message", "Error: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getAllComplaintsList(String startDate, String endDate, String mobile, String requestId) { |
||||
|
StringBuilder sql = new StringBuilder( |
||||
|
"SELECT u.*, sm.status_master AS status_name, DATE(u.cdate) AS created_date " + |
||||
|
"FROM user_request_table u " + |
||||
|
"JOIN status_master sm ON sm.id = u.status_id " + |
||||
|
"WHERE u.is_active = 1 AND u.is_delete = 0 AND sm.is_active = 1 AND sm.is_delete = 0 " |
||||
|
); |
||||
|
|
||||
|
List<Object> params = new ArrayList<>(); |
||||
|
|
||||
|
if (startDate != null && !startDate.isEmpty() && endDate != null && !endDate.isEmpty()) { |
||||
|
sql.append(" AND DATE(u.cdate) BETWEEN ? AND ? "); |
||||
|
params.add(startDate); |
||||
|
params.add(endDate); |
||||
|
} |
||||
|
|
||||
|
if (mobile != null && !mobile.isEmpty()) { |
||||
|
sql.append(" AND u.mobile = ? "); |
||||
|
params.add(mobile); |
||||
|
} |
||||
|
|
||||
|
if (requestId != null && !requestId.isEmpty()) { |
||||
|
sql.append(" AND u.request_id = ? "); |
||||
|
params.add(requestId); |
||||
|
} |
||||
|
|
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); |
||||
|
|
||||
|
for (Map<String, Object> complaint : result) { |
||||
|
Number reqTableId = (Number) complaint.get("id"); |
||||
|
List<Map<String, Object>> itemList = getItemsByRequestId(reqTableId.intValue()); |
||||
|
complaint.put("items", itemList); |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getpendingcomplaints(String startDate, String endDate, String mobile) { |
||||
|
|
||||
|
StringBuilder sql = new StringBuilder("SELECT u.*, sm.status_master AS status_name, DATE(u.cdate) AS created_date" |
||||
|
+ " FROM user_request_table u " |
||||
|
+ " JOIN status_master sm ON sm.id = u.status" |
||||
|
+ " WHERE u.is_active = 1 AND u.is_delete = 0 AND u.status IN (1,3) " |
||||
|
); |
||||
|
|
||||
|
List<Object> params = new ArrayList<>(); |
||||
|
|
||||
|
if (startDate != null && !startDate.isEmpty() && endDate != null && !endDate.isEmpty()) { |
||||
|
sql.append(" AND DATE(u.cdate) BETWEEN ? AND ? "); |
||||
|
params.add(startDate); |
||||
|
params.add(endDate); |
||||
|
} |
||||
|
|
||||
|
if (mobile != null && !mobile.isEmpty()) { |
||||
|
sql.append(" AND u.mobile = ? "); |
||||
|
params.add(mobile); |
||||
|
} |
||||
|
|
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); |
||||
|
|
||||
|
for (Map<String, Object> complaint : result) { |
||||
|
Number reqTableId = (Number) complaint.get("id"); |
||||
|
List<Map<String, Object>> itemList = getItemsByRequestId(reqTableId.intValue()); |
||||
|
complaint.put("items", itemList); |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getItemsByRequestId(int reqTableId) { |
||||
|
String itemSql = "SELECT i.iteam_id, im.item_name, i.quantity " + |
||||
|
"FROM items i " + |
||||
|
"LEFT JOIN item_master im ON i.iteam_id = im.id " + |
||||
|
"WHERE i.is_active = 1 AND i.is_delete = 0 AND i.req_table_id = ?"; |
||||
|
return jdbcTemplate.queryForList(itemSql, reqTableId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getDetailsByReqId(String requestId) { |
||||
|
|
||||
|
String sql = "SELECT " + |
||||
|
"u.id, u.request_id, u.user_name, u.mobile, u.address, u.latitude, u.longitude, " + |
||||
|
"u.zone, u.division, u.street_name, u.quantity AS main_quantity, u.remarks, " + |
||||
|
"CONCAT('" + fileBaseUrl + "/gccofficialapp/files', u.image_url) AS image_url, " + |
||||
|
"DATE_FORMAT(u.cdate, '%d-%m-%Y') AS cdate, " + |
||||
|
"u.is_active, u.is_delete, u.street_id, sm.status_master AS status, u.is_app, " + |
||||
|
"DATE_FORMAT(u.close_date, '%d-%m-%Y') AS close_date, " + |
||||
|
"CONCAT('" + fileBaseUrl + "/gccofficialapp/files', u.officer_upload_url) AS officer_upload_url, " + |
||||
|
"itm.iteam_id, itm.quantity, im.item_name " + |
||||
|
"FROM user_request_table u " + |
||||
|
"LEFT JOIN items itm ON u.id = itm.req_table_id " + |
||||
|
"LEFT JOIN item_master im ON itm.iteam_id = im.id AND im.is_active = 1 " + |
||||
|
"LEFT JOIN status_master sm ON sm.id = u.status AND sm.is_active = 1 AND sm.is_delete = 0 " + |
||||
|
"WHERE u.request_id = ? AND u.is_active = 1"; |
||||
|
|
||||
|
List<Map<String, Object>> rawList = jdbcTemplate.queryForList(sql, requestId); |
||||
|
|
||||
|
Map<Integer, Map<String, Object>> groupedMap = new LinkedHashMap<>(); |
||||
|
|
||||
|
for (Map<String, Object> row : rawList) { |
||||
|
Integer id = (Integer) row.get("id"); |
||||
|
|
||||
|
Map<String, Object> item = null; |
||||
|
if (row.get("item_name") != null) { |
||||
|
item = new LinkedHashMap<>(); |
||||
|
item.put("item_name", row.get("item_name")); |
||||
|
item.put("quantity", row.get("quantity")); |
||||
|
} |
||||
|
|
||||
|
if (groupedMap.containsKey(id)) { |
||||
|
if (item != null) { |
||||
|
((List<Map<String, Object>>) groupedMap.get(id).get("items")).add(item); |
||||
|
} |
||||
|
} else { |
||||
|
Map<String, Object> newEntry = new LinkedHashMap<>(); |
||||
|
newEntry.put("id", id); |
||||
|
newEntry.put("request_id", row.get("request_id")); |
||||
|
newEntry.put("user_name", row.get("user_name")); |
||||
|
newEntry.put("mobile", row.get("mobile")); |
||||
|
newEntry.put("address", row.get("address")); |
||||
|
newEntry.put("latitude", row.get("latitude")); |
||||
|
newEntry.put("longitude", row.get("longitude")); |
||||
|
newEntry.put("zone", row.get("zone")); |
||||
|
newEntry.put("division", row.get("division")); |
||||
|
newEntry.put("street_name", row.get("street_name")); |
||||
|
newEntry.put("main_quantity", row.get("main_quantity")); |
||||
|
newEntry.put("remarks", row.get("remarks")); |
||||
|
newEntry.put("image_url", row.get("image_url")); |
||||
|
newEntry.put("cdate", row.get("cdate")); |
||||
|
newEntry.put("is_active", row.get("is_active")); |
||||
|
newEntry.put("is_delete", row.get("is_delete")); |
||||
|
newEntry.put("street_id", row.get("street_id")); |
||||
|
newEntry.put("status", row.get("status")); // Now this is human-readable |
||||
|
newEntry.put("is_app", row.get("is_app")); |
||||
|
newEntry.put("close_date", row.get("close_date")); |
||||
|
newEntry.put("officer_upload_url", row.get("officer_upload_url")); |
||||
|
|
||||
|
List<Map<String, Object>> items = new ArrayList<>(); |
||||
|
if (item != null) { |
||||
|
items.add(item); |
||||
|
} |
||||
|
newEntry.put("items", items); |
||||
|
|
||||
|
groupedMap.put(id, newEntry); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return new ArrayList<>(groupedMap.values()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public boolean changeStatus(String requestId, String remarks, String userId) { |
||||
|
String sql = "UPDATE user_request_table " + |
||||
|
"SET status = 5, " + |
||||
|
"officer_remark = ?, " + |
||||
|
"cancelled_by = ?, " + |
||||
|
"rejecttype = 'Without Location', " + |
||||
|
"reject_latitude = 0.0, " + |
||||
|
"reject_longitude = 0.0 " + |
||||
|
"WHERE request_id = ?"; |
||||
|
|
||||
|
int result = jdbcTemplate.update(sql, remarks, userId, requestId); |
||||
|
return result > 0; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,224 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import java.time.LocalDateTime; |
||||
|
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.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
@Service |
||||
|
public class FollowUpService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getFollowUpCalls(int agent_id) { |
||||
|
String query = "SELECT data_id, complaint_number, complaint_date,complaint_person_name, complaint_mobilenumber, " + |
||||
|
"complaint_type, official_name, official_mobilenum, call_category, complaint_mode, department " + |
||||
|
"FROM gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
"WHERE call_category = 'OFFICIALFOLLOWUP' AND agent_id = ? AND is_processed = FALSE"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query, agent_id); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getFollowUpCatergory() |
||||
|
{ |
||||
|
String query = "SELECT call_status " + |
||||
|
"FROM gcc_1913_qaqc.call_status WHERE call_category_id = 2 and isactive='1'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query); |
||||
|
} |
||||
|
|
||||
|
//public List<Map<String, Object>> getAgentCallStatus(int agentId) { |
||||
|
// |
||||
|
// String query = "SELECT " + |
||||
|
// " (SELECT SUM(aa.data_count) " + |
||||
|
// " FROM agent_assigned aa " + |
||||
|
// " WHERE aa.agent_id = ?) AS total_data_count, " + |
||||
|
// " COUNT(CASE WHEN cl.call_status = 'COMPLETED' THEN 1 END) AS completed_count, " + |
||||
|
// " COUNT(CASE WHEN cl.call_status != 'COMPLETED' THEN 1 END) AS pending_count " + |
||||
|
// "FROM " + |
||||
|
// " qaqc_call_logs cl " + |
||||
|
// "WHERE " + |
||||
|
// " cl.agent_id = ?"; |
||||
|
// return jdbcTemplate.queryForList(query,agentId); |
||||
|
// |
||||
|
// } |
||||
|
|
||||
|
public void updateFollowupComplaintDetails(String complaintNumber,int dataId, String action, String remarks,int updated_agent) |
||||
|
{ |
||||
|
String query = "UPDATE gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
"SET call_status = ?, " + " remarks = ?, updated_agent=?," + |
||||
|
" updated_date = CURRENT_TIMESTAMP, " + " is_processed = TRUE " + |
||||
|
"WHERE data_id = ? " +" AND complaint_number = ? "; |
||||
|
|
||||
|
int rowsUpdated = jdbcTemplate.update(query, action, remarks,updated_agent, dataId,complaintNumber); |
||||
|
|
||||
|
//System.out.println("Rows Updated in upload data: " + rowsUpdated); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public int uploadComplaintDetailsInLogs(Map<String, Object> logDetails, String action, String complaintNumber, String remainderDate) { |
||||
|
//System.out.println("Complaint Details: " + logDetails); |
||||
|
// Extract other field values from complaintDetails |
||||
|
int qaqcid = (int) logDetails.get("qaqc_id"); |
||||
|
String ccategory = logDetails.get("call_category").toString(); |
||||
|
String personName = logDetails.get("complaint_person_name").toString(); |
||||
|
String personMobNo = logDetails.get("complaint_mobilenumber").toString(); |
||||
|
String complaintDate = logDetails.get("complaint_date").toString(); |
||||
|
String cType = logDetails.get("complaint_type").toString(); |
||||
|
String cMode = logDetails.get("complaint_mode").toString(); |
||||
|
String department = logDetails.get("department").toString(); |
||||
|
String cGroup = logDetails.get("complaint_group").toString(); |
||||
|
String officialName = logDetails.get("official_name").toString(); |
||||
|
String officialMobileNum = logDetails.get("official_mobilenum").toString(); |
||||
|
String callStatus = logDetails.get("call_status").toString(); |
||||
|
String remarks = logDetails.get("remarks").toString(); |
||||
|
int agentId = (int) logDetails.get("agent_id"); |
||||
|
int updated_agent=(int)logDetails.get("updated_agent"); |
||||
|
boolean isProcessed = (boolean)logDetails.get("is_processed"); |
||||
|
LocalDateTime currentDate = LocalDateTime.now(); |
||||
|
|
||||
|
// Determine which table to insert into based on the action |
||||
|
if (action.equals("FOLLOWUP")) { |
||||
|
|
||||
|
|
||||
|
String query ="INSERT INTO gcc_1913_qaqc.qaqc_followup_call_logs (qaqc_id, call_category, agent_id, complaint_number, complaint_date,complaint_person_name, " |
||||
|
+ "complaint_mobilenumber, complaint_type, complaint_mode, department, complaint_group, official_name,remainder_date, official_mobilenum, call_status, remarks,updated_agent) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?)"; |
||||
|
|
||||
|
|
||||
|
int rowsAffected = jdbcTemplate.update(query, qaqcid, ccategory, agentId, complaintNumber, complaintDate,personName, |
||||
|
personMobNo, cType, cMode, department, cGroup, officialName,remainderDate, officialMobileNum, callStatus, remarks, |
||||
|
updated_agent); |
||||
|
//System.out.println("Rows Updated in qaqc_followup_call_logs : " + rowsAffected); |
||||
|
} |
||||
|
|
||||
|
String query1 = "INSERT INTO gcc_1913_qaqc.qaqc_call_logs (qaqc_id, call_category, agent_id, complaint_number,complaint_date, complaint_person_name, " |
||||
|
+ "complaint_mobilenumber, complaint_type, complaint_mode, department, complaint_group, official_name, official_mobilenum, call_status, remarks, is_processed,updated_agent) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?)"; |
||||
|
|
||||
|
int rowsAffected1 = jdbcTemplate.update(query1, qaqcid, ccategory, agentId, complaintNumber,complaintDate, personName, |
||||
|
personMobNo, cType, cMode, department, cGroup, officialName, officialMobileNum, callStatus, remarks, |
||||
|
isProcessed,updated_agent); |
||||
|
|
||||
|
//System.out.println("Rows Updated in qaqc_call_logs: " + rowsAffected1); |
||||
|
|
||||
|
return rowsAffected1; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
@Transactional |
||||
|
public int uploadComplaintDetailsInLogs(Map<String, Object> logDetails, String action, String complaintNumber, String remainderDate) { |
||||
|
//System.out.println("Complaint Details: " + logDetails); |
||||
|
// Extract other field values from complaintDetails |
||||
|
int qaqcid = (int) logDetails.get("qaqc_id"); |
||||
|
String ccategory = logDetails.get("call_category").toString(); |
||||
|
String personName = logDetails.get("complaint_person_name").toString(); |
||||
|
String personMobNo = logDetails.get("complaint_mobilenumber").toString(); |
||||
|
String complaintDate = logDetails.get("complaint_date").toString(); |
||||
|
String cType = logDetails.get("complaint_type").toString(); |
||||
|
String cMode = logDetails.get("complaint_mode").toString(); |
||||
|
String department = logDetails.get("department").toString(); |
||||
|
String cGroup = logDetails.get("complaint_group").toString(); |
||||
|
String officialName = logDetails.get("official_name").toString(); |
||||
|
String officialMobileNum = logDetails.get("official_mobilenum").toString(); |
||||
|
String callStatus = logDetails.get("call_status").toString(); |
||||
|
String remarks = logDetails.get("remarks").toString(); |
||||
|
int agentId = (int) logDetails.get("agent_id"); |
||||
|
int updated_agent=(int)logDetails.get("updated_agent"); |
||||
|
boolean isProcessed = (boolean)logDetails.get("is_processed"); |
||||
|
LocalDateTime currentDate = LocalDateTime.now(); |
||||
|
|
||||
|
// Determine which table to insert into based on the action |
||||
|
if (action.equals("FOLLOWUP")) { |
||||
|
String query = "UPDATE gcc_1913_qaqc.qaqc_followup_call_logs " |
||||
|
+ "SET qaqc_id = ?, call_category = ?, agent_id = ?, remainder_date = ?, call_status = ?, remarks = ?, updated_agent = ?, updated_date = CURRENT_TIMESTAMP " |
||||
|
+ "WHERE complaint_number = ? " |
||||
|
+ "AND id = (SELECT max_id FROM (SELECT MAX(id) AS max_id FROM gcc_1913_qaqc.qaqc_followup_call_logs WHERE complaint_number = ?) AS temp)"; |
||||
|
|
||||
|
int rowsAffected = jdbcTemplate.update(query,qaqcid, ccategory,agentId,remainderDate, callStatus, remarks,updated_agent,complaintNumber,complaintNumber); |
||||
|
//System.out.println("Rows Updated in qaqc_followup_call_logs : " + rowsAffected); |
||||
|
|
||||
|
|
||||
|
String query1 = "INSERT INTO gcc_1913_qaqc.qaqc_call_logs (qaqc_id, call_category, agent_id, complaint_number, complaint_date,complaint_person_name, " |
||||
|
+ "complaint_mobilenumber, complaint_type, complaint_mode, department, complaint_group, official_name,remainder_date, official_mobilenum, call_status, remarks, is_processed,updated_agent) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?)"; |
||||
|
|
||||
|
int rowsAffected1 = jdbcTemplate.update(query1, qaqcid, ccategory, agentId, complaintNumber, complaintDate,personName, |
||||
|
personMobNo, cType, cMode, department, cGroup, officialName,remainderDate, officialMobileNum, callStatus, remarks, |
||||
|
isProcessed,updated_agent); |
||||
|
//System.out.println("Rows Updated in qaqc_call_logs : " + rowsAffected1); |
||||
|
|
||||
|
return rowsAffected + rowsAffected1; |
||||
|
|
||||
|
} else { |
||||
|
|
||||
|
String query = "UPDATE gcc_1913_qaqc.qaqc_followup_call_logs " |
||||
|
+ "SET qaqc_id = ?, call_category = ?, agent_id = ?, call_status = ?, remarks = ?, updated_agent = ?, updated_date = CURRENT_TIMESTAMP " |
||||
|
+ "WHERE complaint_number = ? " |
||||
|
+ "AND id = (SELECT max_id FROM (SELECT MAX(id) AS max_id FROM gcc_1913_qaqc.qaqc_followup_call_logs WHERE complaint_number = ?) AS temp)"; |
||||
|
|
||||
|
int rowsAffected = jdbcTemplate.update(query,qaqcid, ccategory,agentId, callStatus, remarks,updated_agent,complaintNumber,complaintNumber); |
||||
|
//System.out.println("Rows Updated in qaqc_followup_call_logs : " + rowsAffected); |
||||
|
|
||||
|
String query1 = "INSERT INTO gcc_1913_qaqc.qaqc_call_logs (qaqc_id, call_category, agent_id, complaint_number,complaint_date, complaint_person_name, " |
||||
|
+ "complaint_mobilenumber, complaint_type, complaint_mode, department, complaint_group, official_name, official_mobilenum, call_status, remarks, is_processed,updated_agent) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?)"; |
||||
|
|
||||
|
int rowsAffected1 = jdbcTemplate.update(query1, qaqcid, ccategory, agentId, complaintNumber,complaintDate, personName, |
||||
|
personMobNo, cType, cMode, department, cGroup, officialName, officialMobileNum, callStatus, remarks, |
||||
|
isProcessed,updated_agent); |
||||
|
|
||||
|
//System.out.println("Rows Updated in qaqc_call_logs: " + rowsAffected1); |
||||
|
|
||||
|
return rowsAffected + rowsAffected1; |
||||
|
} |
||||
|
} |
||||
|
*/ |
||||
|
|
||||
|
public List<Map<String, Object>> getCallHistory(String complaintNumber) |
||||
|
{ |
||||
|
String query = "SELECT complaint_number, agent_id, remainder_date, remarks, created_date " + |
||||
|
"FROM gcc_1913_qaqc.qaqc_call_logs " + |
||||
|
"WHERE complaint_number = ? and call_status='FOLLOWUP'"; |
||||
|
return jdbcTemplate.queryForList(query, complaintNumber); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getFollowupSubmitDetails(int userId) { |
||||
|
|
||||
|
String query = "SELECT complaint_number, complaint_date,complaint_person_name, complaint_mobilenumber,official_name,official_mobilenum, " + |
||||
|
"complaint_type, call_status, remarks " + |
||||
|
"FROM gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
"WHERE call_category = 'OFFICIALFOLLOWUP' AND agent_id = ? AND is_processed = '1'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query,userId); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public void updateComplaintHistoryDetails(String complaintNumber, int dataId, String action, String remarks,int updated_agent, |
||||
|
String remainderDate) { |
||||
|
|
||||
|
String query = "UPDATE gcc_1913_qaqc.qaqc_upload_data_history \r\n" |
||||
|
+ "SET call_status = ?, remarks = ?, updated_date = CURRENT_TIMESTAMP, remainder_date = ?,updated_agent=?\r\n" |
||||
|
+ "WHERE data_id = ? AND complaint_number = ?"; |
||||
|
|
||||
|
int rowsUpdated = jdbcTemplate.update(query, action, remarks, remainderDate, updated_agent,dataId, complaintNumber); |
||||
|
|
||||
|
//System.out.println("Rows Updated in upload history: " + rowsUpdated); |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,102 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
|
||||
|
@Service |
||||
|
public class InprogresscallService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getActionsCatergory() |
||||
|
{ |
||||
|
String query = "SELECT call_status " + |
||||
|
"FROM gcc_1913_qaqc.call_status WHERE call_category_id = 3 and isactive='1'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query); |
||||
|
} |
||||
|
|
||||
|
// public List<Map<String, Object>> getInProgressCalls(int agent_id) { |
||||
|
// String sql = "SELECT complaint_number, " + |
||||
|
// " official_name , " + |
||||
|
// " official_mobilenum , " + |
||||
|
// " complaint_type, " + |
||||
|
// " call_category, " + |
||||
|
// " complaint_mode, " + |
||||
|
// " department " + |
||||
|
// |
||||
|
// "FROM gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
// "WHERE call_category ='inprogress' and agent_id= ?"; |
||||
|
// |
||||
|
// |
||||
|
// return jdbcTemplate.queryForList(sql, agent_id); |
||||
|
// } |
||||
|
|
||||
|
public List<Map<String, Object>> getInProgressCalls(int agent_id) { |
||||
|
String query = "SELECT data_id, complaint_number, complaint_date,complaint_person_name, complaint_mobilenumber, " + |
||||
|
"complaint_type, official_name, official_mobilenum, call_category, complaint_mode, department " + |
||||
|
"FROM gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
"WHERE (call_category = 'PROCESSING' OR call_category = 'REOPENED' OR call_category = 'REDRESSED' OR call_category = 'INPROGRESS') " + |
||||
|
" AND is_processed = FALSE " + |
||||
|
" AND agent_id = ?"; |
||||
|
return jdbcTemplate.queryForList(query, agent_id); |
||||
|
} |
||||
|
|
||||
|
public void updateInprogressComplaintDetails(String complaintNumber,int dataId, String action, String remarks,int updated_agent) |
||||
|
{ |
||||
|
String query = "UPDATE gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
"SET call_status = ?, " + " remarks = ?,updated_agent=?, " + |
||||
|
" updated_date = CURRENT_TIMESTAMP, " + " is_processed = TRUE " + |
||||
|
"WHERE data_id = ? " +" AND complaint_number = ?"; |
||||
|
|
||||
|
int rowsUpdated = jdbcTemplate.update(query, action, remarks,updated_agent, dataId,complaintNumber); |
||||
|
|
||||
|
//System.out.println("Rows Updated in upload data: " + rowsUpdated); |
||||
|
} |
||||
|
|
||||
|
public void saveMobileNumDetails(String complaintNumber, String remarks) { |
||||
|
String query = "insert into officer_mobileno (complaint_number,remarks) values(?,?)"; |
||||
|
int rowsUpdated = jdbcTemplate.update(query, complaintNumber, remarks); |
||||
|
//System.out.println("Rows Updated: " + rowsUpdated); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getInprogressSubmitDetails(int userId) { |
||||
|
|
||||
|
String query = "SELECT complaint_number, complaint_date,complaint_person_name, complaint_mobilenumber,official_name,official_mobilenum, " + |
||||
|
"complaint_type, call_status, remarks " + |
||||
|
"FROM gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
"WHERE (call_category = 'PROCESSING' OR call_category = 'REOPENED' OR call_category = 'REDRESSED' OR call_category = 'INPROGRESS') AND agent_id = ? AND is_processed = '1'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query,userId); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
public void updateComplaintHistoryDetails(String complaintNumber, int dataId, String action, String remarks,int updated_agent, |
||||
|
String remainderDate) { |
||||
|
|
||||
|
String query = "UPDATE gcc_1913_qaqc.qaqc_upload_data_history \r\n" |
||||
|
+ "SET call_status = ?, remarks = ?, updated_date = CURRENT_TIMESTAMP, remainder_date = ?,updated_agent=?\r\n" |
||||
|
+ "WHERE data_id = ? AND complaint_number = ?"; |
||||
|
|
||||
|
int rowsUpdated = jdbcTemplate.update(query, action, remarks, remainderDate,updated_agent, dataId, complaintNumber); |
||||
|
|
||||
|
//System.out.println("Rows Updated in upload data history: " + rowsUpdated); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,52 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
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.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
public class PublicFollowUpService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getFollowUpCalls(int agent_id) { |
||||
|
String query = "SELECT data_id, complaint_number, complaint_date,complaint_person_name, complaint_mobilenumber, " + |
||||
|
"complaint_type, official_name, official_mobilenum, call_category, complaint_mode, department " + |
||||
|
"FROM gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
"WHERE call_category = 'PUBLICFOLLOWUP' AND agent_id = ? AND is_processed = FALSE"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query, agent_id); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getFollowUpCatergory() |
||||
|
{ |
||||
|
String query = "SELECT call_status " + |
||||
|
"FROM gcc_1913_qaqc.call_status WHERE call_category_id = 4 and isactive='1'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getFollowupSubmitDetails(int userId) { |
||||
|
|
||||
|
String query = "SELECT complaint_number, complaint_date,complaint_person_name, complaint_mobilenumber,official_name,official_mobilenum, " + |
||||
|
"complaint_type, call_status, remarks " + |
||||
|
"FROM gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
"WHERE call_category = 'PUBLICFOLLOWUP' AND agent_id = ? AND is_processed = '1'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query,userId); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,123 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
import javax.transaction.Transactional; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
public class QaqcAdminSettingService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public int updateProductivity(int productivity_count) { |
||||
|
String updateSql = "UPDATE productivity SET productivity_count=? where isactive='1' and isdelete='0'"; |
||||
|
return jdbcTemplate.update(updateSql,productivity_count); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public int saveProductivity(int productivity_count) { |
||||
|
String insertSql = "INSERT INTO productivity (productivity_count) VALUES (?)"; |
||||
|
return jdbcTemplate.update(insertSql, productivity_count); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public Integer getProductivity() { |
||||
|
String insertSql = "select productivity_count\r\n" |
||||
|
+ "from productivity\r\n" |
||||
|
+ "where isactive='1' and isdelete='0'" |
||||
|
+ "LIMIT 1"; |
||||
|
return jdbcTemplate.queryForObject(insertSql, Integer.class); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getAdminSettingCounts() { |
||||
|
|
||||
|
String sqlQuery = "SELECT " + |
||||
|
"COALESCE(p.productivity_count, 0) AS productivity_count, " + |
||||
|
"COUNT(al.agent_id) AS total_count, " + |
||||
|
"COALESCE(p.inbound_count, 0) AS inbound_count, " + |
||||
|
"COALESCE(p.outbound_count, 0) AS outbound_count, " + |
||||
|
"COALESCE(p.inbound_count, 0) + COALESCE(p.outbound_count, 0) As assigned, " + |
||||
|
"(COUNT(al.agent_id) - (COALESCE(p.inbound_count, 0) + COALESCE(p.outbound_count, 0))) AS notassigned " + |
||||
|
"FROM productivity p " + |
||||
|
"JOIN agents_list al " + |
||||
|
"WHERE p.isactive = '1' AND p.isdelete = '0' AND al.isactive = '1' AND al.isdelete = '0' " + |
||||
|
"GROUP BY p.productivity_count, p.inbound_count, p.outbound_count"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public int saveCallingTypeInSettings() { |
||||
|
// Query to get inbound and outbound counts |
||||
|
String selectSql = "SELECT\r\n" |
||||
|
+ "SUM(CASE WHEN calling_type = 'INBOUND' THEN 1 ELSE 0 END) AS inbound, \r\n" |
||||
|
+ "SUM(CASE WHEN calling_type = 'OUTBOUND' THEN 1 ELSE 0 END) AS outbound \r\n" |
||||
|
+ "FROM agents_list \r\n" |
||||
|
+ "WHERE isactive = '1' AND isdelete = '0'"; |
||||
|
|
||||
|
// Fetch the counts |
||||
|
Map<String, Object> result = jdbcTemplate.queryForMap(selectSql); |
||||
|
int inbound = ((Number) result.get("inbound")).intValue(); // Convert to int |
||||
|
int outbound = ((Number) result.get("outbound")).intValue(); // Convert to int |
||||
|
|
||||
|
//Corrected SQL syntax for updating multiple columns |
||||
|
String updateSql = "UPDATE productivity SET inbound_count = ?, outbound_count = ? WHERE isactive = '1' AND isdelete = '0'"; |
||||
|
return jdbcTemplate.update(updateSql, inbound, outbound); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public int updateCallType(String calling_type,int agent_id) { |
||||
|
String updateSql = "UPDATE agents_list SET calling_type=? WHERE agent_id=? AND isactive='1'"; |
||||
|
|
||||
|
return jdbcTemplate.update(updateSql,calling_type,agent_id); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getAgentsForCallingtype() |
||||
|
{ |
||||
|
String sqlQuery = "select al.agent_id as agent_id,ap.username as username,al.agent_name as agent_name,al.mobile_number as mobile_number,\r\n" |
||||
|
+ "al.calling_type as calling_type\r\n" |
||||
|
+ "from gcc_1913_qaqc.agents_list al\r\n" |
||||
|
+ "LEFT join gcc_apps.appusers ap on ap.userid=al.agent_id\r\n" |
||||
|
+ "where al.isactive='1' and al.isdelete='0'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
public int updateAgentName(int agentId, String updatedName) { |
||||
|
// Query to check if the name exists for another agent |
||||
|
String checkSql = "SELECT COUNT(*) FROM agents_list WHERE agent_name = ? AND agent_id <> ? AND isactive = '1'"; |
||||
|
|
||||
|
int count = jdbcTemplate.queryForObject(checkSql, Integer.class, updatedName, agentId); |
||||
|
|
||||
|
if (count > 0) { |
||||
|
return -1; // Indicate that the name already exists |
||||
|
} |
||||
|
|
||||
|
// Proceed with the update if the name is unique |
||||
|
String updateSql = "UPDATE agents_list SET agent_name = ? WHERE agent_id = ? AND isactive = '1'"; |
||||
|
return jdbcTemplate.update(updateSql, updatedName, agentId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
1166
src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/QaqcAgentAssignService.java
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,686 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import java.time.LocalDate; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.Date; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
import javax.transaction.Transactional; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
public class QaqcAgentsService { |
||||
|
|
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public List<Map<String, Object>> getAgentsAllTasksCounts(int agent_id) { |
||||
|
String SqlQuery = "SELECT \r\n" |
||||
|
+ " cr.taskid,\r\n" |
||||
|
+ " cr.call_category,\r\n" |
||||
|
+ " cr.description,\r\n" |
||||
|
+ " aa.qaqc_id,\r\n" |
||||
|
+ " aa.agent_id,\r\n" |
||||
|
+ " aa.created_date,\r\n" |
||||
|
+ " (SELECT COUNT(data_id) \r\n" |
||||
|
+ " FROM qaqc_upload_data up \r\n" |
||||
|
+ " WHERE up.agent_id = aa.agent_id \r\n" |
||||
|
+ " AND up.qaqc_id = cr.qaqc_id\r\n" |
||||
|
+ " ) AS calls_assigned,\r\n" |
||||
|
+ " (SELECT COUNT(CASE WHEN up.call_status IS NULL THEN 1 END) \r\n" |
||||
|
+ " FROM qaqc_upload_data up \r\n" |
||||
|
+ " WHERE up.agent_id = aa.agent_id \r\n" |
||||
|
+ " AND up.qaqc_id = cr.qaqc_id\r\n" |
||||
|
+ " ) AS pending_count,\r\n" |
||||
|
+ " (SELECT COUNT(CASE WHEN up.call_status IS NOT NULL THEN 1 END) \r\n" |
||||
|
+ " FROM qaqc_upload_data up \r\n" |
||||
|
+ " WHERE up.agent_id = aa.agent_id \r\n" |
||||
|
+ " AND up.qaqc_id = cr.qaqc_id\r\n" |
||||
|
+ " ) AS complete_count,\r\n" |
||||
|
+ " (SELECT COUNT(CASE WHEN up.call_status ='CALL_BACK_LATER' OR up.field_9 = 'UNATTENDED' THEN 1 END) \r\n" |
||||
|
+ " FROM qaqc_upload_data up \r\n" |
||||
|
+ " WHERE up.agent_id = aa.agent_id \r\n" |
||||
|
+ " AND up.qaqc_id = cr.qaqc_id\r\n" |
||||
|
+ " ) AS followup_count\r\n" |
||||
|
+ " \r\n" |
||||
|
+ "FROM \r\n" |
||||
|
+ " agent_assigned aa\r\n" |
||||
|
+ "JOIN \r\n" |
||||
|
+ " agents_list al ON aa.agent_id = al.agent_id\r\n" |
||||
|
+ "JOIN \r\n" |
||||
|
+ " qaqc_request cr ON cr.qaqc_id = aa.qaqc_id\r\n" |
||||
|
+ "WHERE \r\n" |
||||
|
+ " aa.agent_id = ? \r\n" |
||||
|
+ " AND aa.isactive = '1'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(SqlQuery,agent_id); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getdataforagents(int agent_id,int qaqc_id) { |
||||
|
String sqlQuery = "select *\r\n" |
||||
|
+ "from qaqc_upload_data\r\n" |
||||
|
+ "where agent_id=? and qaqc_id=?"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery,agent_id,qaqc_id); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public void savecallstatus(String call_status, String remarks,String complaintNumber) |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
String SqlQuery = "UPDATE qaqc_upload_data SET call_status = ?,remarks=?, updated_date = NOW() WHERE (complaint_number = ? )"; |
||||
|
|
||||
|
jdbcTemplate.update(SqlQuery,call_status, remarks,complaintNumber); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public void savecallstatusinlogs(String call_status, String remarks,String complaintNumber) { |
||||
|
|
||||
|
// Step 1: Fetch details from the source table using the complaintNumber |
||||
|
String selectQuery = "SELECT * FROM qaqc_upload_data WHERE complaint_number = ?"; |
||||
|
Map<String, Object> details = jdbcTemplate.queryForMap(selectQuery, complaintNumber); |
||||
|
|
||||
|
// Extract the required fields from the result (modify based on your table structure) |
||||
|
String detailField1 = (String) details.get("qaqc_id"); |
||||
|
String detailField2 = (String) details.get("agent_id"); |
||||
|
String detailField3 = (String) details.get("complaint_number"); |
||||
|
String detailField4 = (String) details.get("complaint_person_name"); |
||||
|
String detailField5 = (String) details.get("complaint_mobilenumber"); |
||||
|
String detailField6 = (String) details.get("complaint_type"); |
||||
|
String detailField7 = (String) details.get("complaint_mode"); |
||||
|
String detailField8 = (String) details.get("department"); |
||||
|
String detailField9 = (String) details.get("complaint_group"); |
||||
|
String detailField10 = (String) details.get("official_name"); |
||||
|
String detailField11 = (String) details.get("official_mobilenum"); |
||||
|
|
||||
|
// Step 2: Insert the fetched details along with call_status and remarks into qaqc_call_logs |
||||
|
String insertQuery = "INSERT INTO qaqc_call_logs (qaqc_id, agent_id, complaint_number, complaint_person_name, complaint_mobilenumber,complaint_type,complaint_mode,department,complaint_group,official_name,official_mobilenum) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)"; |
||||
|
jdbcTemplate.update(insertQuery,detailField1, detailField2,detailField3,detailField4,detailField5,detailField6,detailField7,detailField8,detailField9,detailField10,detailField11,call_status,remarks); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String,Object>> getPreviousDayDashboardCounts() |
||||
|
{ |
||||
|
String sqlQuery = "SELECT \r\n" |
||||
|
+ " COUNT(DISTINCT assigned_stats.agent_id) AS TotalAgents, \r\n" |
||||
|
+ " SUM(COALESCE(assigned_stats.Assigned, 0)) AS TotalAssigned, \r\n" |
||||
|
+ " SUM(COALESCE(completed_stats.TotalCompleted, 0)) AS TotalCompleted, \r\n" |
||||
|
+ " SUM(COALESCE(assigned_stats.Assigned, 0) - COALESCE(completed_stats.TotalCompleted, 0)) AS TotalPending \r\n" |
||||
|
+ "FROM \r\n" |
||||
|
+ " (SELECT al.agent_id AS agent_id, SUM(aa.data_count) AS Assigned \r\n" |
||||
|
+ " FROM agent_assigned aa \r\n" |
||||
|
+ " JOIN agents_list al ON aa.agent_id = al.agent_id \r\n" |
||||
|
+ " WHERE DATE(aa.created_date) = DATE(SUBDATE(CURDATE(), 1)) \r\n" |
||||
|
+ " GROUP BY al.agent_id) AS assigned_stats \r\n" |
||||
|
+ "LEFT JOIN \r\n" |
||||
|
+ " (SELECT agent_id, COUNT(DISTINCT (complaint_number)) AS TotalCompleted \r\n" |
||||
|
+ " FROM qaqc_call_logs \r\n" |
||||
|
+ " WHERE DATE(created_date) = DATE(SUBDATE(CURDATE(), 1)) \r\n" |
||||
|
+ " GROUP BY agent_id) AS completed_stats \r\n" |
||||
|
+ "ON assigned_stats.agent_id = completed_stats.agent_id;"; |
||||
|
|
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
// public List<Map<String,Object>> getAgentPreviousDayCount() |
||||
|
// { |
||||
|
// String sqlQuery = "SELECT DISTINCT \r\n" |
||||
|
// + " assigned_stats.agent_id, \r\n" |
||||
|
// + " assigned_stats.agent_name as agent_name, -- Use the alias assigned_stats here instead of aa\r\n" |
||||
|
// + " COALESCE(assigned_stats.Assigned, 0) AS Assigned, \r\n" |
||||
|
// + " COALESCE(completed_stats.TotalCompleted, 0) AS TotalCompleted, \r\n" |
||||
|
// + " COALESCE(assigned_stats.Assigned, 0) - COALESCE(completed_stats.TotalCompleted, 0) AS Pending, \r\n" |
||||
|
// + " CASE \r\n" |
||||
|
// + " WHEN COALESCE(assigned_stats.Assigned, 0) = 0 THEN 0 \r\n" |
||||
|
// + " ELSE ROUND(COALESCE(completed_stats.TotalCompleted, 0) * 100.0 / COALESCE(assigned_stats.Assigned, 1)) \r\n" |
||||
|
// + " END AS CompletionPercentage, \r\n" |
||||
|
// + " COALESCE(call_stats.Completed_count, 0) AS Completed_count, \r\n" |
||||
|
// + " COALESCE(call_stats.Reopened_count, 0) AS Reopened_count, \r\n" |
||||
|
// + " COALESCE(call_stats.Followup_count, 0) AS Followup_count, \r\n" |
||||
|
// + " COALESCE(call_stats.Other_count, 0) AS Other_count \r\n" |
||||
|
// + "FROM \r\n" |
||||
|
// + " (SELECT al.agent_id AS agent_id, al.agent_name AS agent_name, SUM(aa.data_count) AS Assigned \r\n" |
||||
|
// + " FROM agent_assigned aa \r\n" |
||||
|
// + " JOIN agents_list al ON aa.agent_id = al.agent_id \r\n" |
||||
|
// + " WHERE DATE(aa.created_date) = DATE(SUBDATE(CURDATE(), 1)) \r\n" |
||||
|
// + " GROUP BY al.agent_id,al.agent_name) AS assigned_stats -- The alias 'assigned_stats' is used here\r\n" |
||||
|
// + "LEFT JOIN \r\n" |
||||
|
// + " (SELECT agent_id, COUNT(qaqc_id) AS TotalCompleted \r\n" |
||||
|
// + " FROM qaqc_call_logs \r\n" |
||||
|
// + " WHERE DATE(created_date) = DATE(SUBDATE(CURDATE(), 1)) \r\n" |
||||
|
// + " GROUP BY agent_id) AS completed_stats ON assigned_stats.agent_id = completed_stats.agent_id \r\n" |
||||
|
// + "LEFT JOIN \r\n" |
||||
|
// + " (SELECT agent_id, \r\n" |
||||
|
// + " SUM(CASE WHEN call_status IN ('COMPLETED', 'FOLLOWUP_COMPLETED') THEN 1 ELSE 0 END) AS Completed_count, \r\n" |
||||
|
// + " SUM(CASE WHEN call_status = 'REOPEN' THEN 1 ELSE 0 END) AS Reopened_count, \r\n" |
||||
|
// + " SUM(CASE WHEN call_status = 'FOLLOWUP' THEN 1 ELSE 0 END) AS Followup_count, \r\n" |
||||
|
// + " SUM(CASE WHEN call_status NOT IN ('COMPLETED', 'FOLLOWUP_COMPLETED', 'REOPEN', 'FOLLOWUP') THEN 1 ELSE 0 END) AS Other_count \r\n" |
||||
|
// + " FROM qaqc_call_logs \r\n" |
||||
|
// + " WHERE DATE(created_date) = DATE(SUBDATE(CURDATE(), 1)) \r\n" |
||||
|
// + " GROUP BY agent_id) AS call_stats ON assigned_stats.agent_id = call_stats.agent_id;\r\n"; |
||||
|
// |
||||
|
// return jdbcTemplate.queryForList(sqlQuery); |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
public List<Map<String,Object>> getAgentPreviousDayCount() |
||||
|
{ |
||||
|
String sqlQuery = "SELECT DISTINCT \r\n" |
||||
|
+ " assigned_stats.agent_id, \r\n" |
||||
|
+ " assigned_stats.agent_name as agent_name, -- Use the alias assigned_stats here instead of aa\r\n" |
||||
|
+ " COALESCE(assigned_stats.Assigned, 0) AS Assigned, \r\n" |
||||
|
+ " COALESCE(completed_stats.TotalCompleted, 0) AS TotalCompleted, \r\n" |
||||
|
+ " COALESCE(assigned_stats.Assigned, 0) - COALESCE(completed_stats.TotalCompleted, 0) AS Pending, \r\n" |
||||
|
+ " CASE \r\n" |
||||
|
+ " WHEN COALESCE(assigned_stats.Assigned, 0) = 0 THEN 0 \r\n" |
||||
|
+ " ELSE ROUND(COALESCE(completed_stats.TotalCompleted, 0) * 100.0 / COALESCE(assigned_stats.Assigned, 1)) \r\n" |
||||
|
+ " END AS CompletionPercentage, \r\n" |
||||
|
+ " COALESCE(call_stats.Completed_count, 0) AS Completed_count, \r\n" |
||||
|
+ " COALESCE(call_stats.Reopened_count, 0) AS Reopened_count, \r\n" |
||||
|
+ " COALESCE(call_stats.Followup_count, 0) AS Followup_count, \r\n" |
||||
|
+ " COALESCE(call_stats.Other_count, 0) AS Other_count \r\n" |
||||
|
+ "FROM \r\n" |
||||
|
+ " (SELECT al.agent_id AS agent_id, al.agent_name AS agent_name, SUM(aa.data_count) AS Assigned \r\n" |
||||
|
+ " FROM agent_assigned aa \r\n" |
||||
|
+ " JOIN agents_list al ON aa.agent_id = al.agent_id \r\n" |
||||
|
+ " WHERE DATE(aa.created_date) = DATE(SUBDATE(CURDATE(), 1)) \r\n" |
||||
|
+ " GROUP BY al.agent_id,al.agent_name) AS assigned_stats -- The alias 'assigned_stats' is used here\r\n" |
||||
|
+ "LEFT JOIN \r\n" |
||||
|
+ " (SELECT agent_id, count(DISTINCT (complaint_number)) AS TotalCompleted \r\n" |
||||
|
+ " FROM qaqc_call_logs \r\n" |
||||
|
+ " WHERE DATE(created_date) = DATE(SUBDATE(CURDATE(), 1)) \r\n" |
||||
|
+ " GROUP BY agent_id) AS completed_stats ON assigned_stats.agent_id = completed_stats.agent_id \r\n" |
||||
|
+ "LEFT JOIN \r\n" |
||||
|
+ " (SELECT agent_id, \r\n" |
||||
|
+ " SUM(CASE WHEN call_status IN ('COMPLETED', 'FOLLOWUP_COMPLETED') THEN 1 ELSE 0 END) AS Completed_count, \r\n" |
||||
|
+ " SUM(CASE WHEN call_status = 'REOPEN' THEN 1 ELSE 0 END) AS Reopened_count, \r\n" |
||||
|
+ " SUM(CASE WHEN call_status = 'FOLLOWUP' THEN 1 ELSE 0 END) AS Followup_count, \r\n" |
||||
|
+ " SUM(CASE WHEN call_status NOT IN ('COMPLETED', 'FOLLOWUP_COMPLETED', 'REOPEN', 'FOLLOWUP') THEN 1 ELSE 0 END) AS Other_count \r\n" |
||||
|
+ " FROM qaqc_call_logs \r\n" |
||||
|
+ " WHERE DATE(created_date) = DATE(SUBDATE(CURDATE(), 1)) \r\n" |
||||
|
+ " GROUP BY agent_id) AS call_stats ON assigned_stats.agent_id = call_stats.agent_id \r\n" |
||||
|
+ " ORDER BY agent_name \r\n;"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getAgentDashboard(int userId, String startDate, String endDate) { |
||||
|
String sql = "SELECT " + |
||||
|
" COALESCE(SUM(aa.data_count), 0) AS Total_Calls_assigned, " + |
||||
|
" COALESCE(SUM(CASE WHEN qr.call_category = 'closed' THEN aa.data_count ELSE 0 END), 0) AS Closed_Call_count, " + |
||||
|
" COALESCE(SUM(CASE WHEN qr.call_category IN ('inprogress', 'redressed', 'reopened','processing') THEN aa.data_count ELSE 0 END), 0) AS Inprogress_Call_count, " + |
||||
|
" COALESCE(SUM(CASE WHEN qr.call_category = 'officialfollowup' THEN aa.data_count ELSE 0 END), 0) AS Followup_Call_count, " + |
||||
|
" COALESCE(SUM(CASE WHEN qr.call_category = 'publicfollowup' THEN aa.data_count ELSE 0 END), 0) AS PublicFollowup_Call_count " + |
||||
|
"FROM agent_assigned aa " + |
||||
|
"LEFT JOIN qaqc_request qr ON aa.qaqc_id = qr.qaqc_id " + |
||||
|
"WHERE aa.agent_id = ? " + |
||||
|
"AND DATE(qr.created_date) BETWEEN ? AND ?"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sql, userId, startDate, endDate); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getAgentPerformanceData(int agentId, String startDate, String endDate) { |
||||
|
// String sql = "SELECT \n" |
||||
|
// + " COALESCE(total_data_count, 0) AS total_data_count,\n" // Ensure total_data_count is 0 if null |
||||
|
// + " COALESCE(completed_count, 0) AS completed_count,\n" // Ensure completed_count is 0 if null |
||||
|
// + " COALESCE((total_data_count - completed_count), 0) AS pending_count,\n" // Ensure pending_count is 0 |
||||
|
// + " CASE \n" |
||||
|
// + " WHEN COALESCE(total_data_count, 0) > 0 THEN ROUND((COALESCE(completed_count, 0) / total_data_count) * 100, 1)\n" |
||||
|
// + " ELSE 0\n" |
||||
|
// + " END AS completed_percentage\n" |
||||
|
// + "FROM \n" |
||||
|
// + " (\n" |
||||
|
// + " SELECT \n" |
||||
|
// + " (SELECT COALESCE(SUM(aa.data_count), 0) \n" |
||||
|
// + " FROM agent_assigned aa \n" |
||||
|
// + " WHERE aa.agent_id = ? AND DATE(aa.created_date) BETWEEN ? AND ?) AS total_data_count,\n" |
||||
|
// + " \n" |
||||
|
// + " (SELECT COALESCE(COUNT(*), 0) \n" |
||||
|
// + " FROM qaqc_call_logs cl \n" |
||||
|
// + " WHERE cl.agent_id = ?\n" |
||||
|
// + " AND DATE(cl.created_date) BETWEEN ? AND ? \n" |
||||
|
// + " AND cl.call_status IS NOT NULL) AS completed_count\n" |
||||
|
// + " ) AS combined"; |
||||
|
|
||||
|
// return jdbcTemplate.queryForList(sql, agentId, startDate, endDate, agentId, startDate, endDate); |
||||
|
|
||||
|
String sql="SELECT " |
||||
|
+ " total_data_count," |
||||
|
+ " completed_count," |
||||
|
+ " (total_data_count - completed_count) AS pending_count," |
||||
|
+ " CASE " |
||||
|
+ " WHEN total_data_count > 0 " |
||||
|
+ " THEN ROUND((completed_count / total_data_count) * 100, 1)" |
||||
|
+ " ELSE 0" |
||||
|
+ " END AS completed_percentage" |
||||
|
+ " FROM (" |
||||
|
+ " SELECT " |
||||
|
+ " COUNT(*) AS total_data_count," |
||||
|
+ " COUNT(call_status) AS completed_count" |
||||
|
+ " FROM qaqc_upload_data_history" |
||||
|
+ " WHERE created_date >= ? " |
||||
|
+ " AND created_date < DATE_ADD( ? , INTERVAL 1 DAY)" |
||||
|
+ " AND agent_id = ? " |
||||
|
+ ") t"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sql, startDate, endDate, agentId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getAgentTaskDetails(int userId, String startDate, String endDate) { |
||||
|
String sql = "WITH LatestCallLogs AS ( " + |
||||
|
" SELECT " + |
||||
|
" cl.qaqc_id, " + |
||||
|
" cl.agent_id, " + |
||||
|
" cl.complaint_number, " + |
||||
|
" cl.call_status, " + |
||||
|
" cl.created_date, " + |
||||
|
" ROW_NUMBER() OVER (PARTITION BY cl.qaqc_id, cl.agent_id, cl.complaint_number ORDER BY cl.created_date DESC) AS row_num " + |
||||
|
" FROM " + |
||||
|
" qaqc_call_logs cl " + |
||||
|
") " + |
||||
|
"SELECT DISTINCT " + |
||||
|
" qr.taskid AS taskid, " + |
||||
|
" qr.call_category AS call_category, " + |
||||
|
" DATE(aa.created_date) AS cdate, " + |
||||
|
" aa.data_count AS assigned, " + |
||||
|
" COUNT(lcl.agent_id) AS callstaken, " + |
||||
|
" (aa.data_count - COUNT(lcl.agent_id)) AS pending, " + |
||||
|
" ROUND((CASE WHEN aa.data_count > 0 THEN (COUNT(lcl.agent_id) / aa.data_count) * 100 ELSE 0 END), 2) AS percentage, " + |
||||
|
" COUNT(CASE WHEN lcl.call_status IN ('COMPLETED', 'FOLLOWUP_COMPLETED') THEN 1 END) AS Completed, " + |
||||
|
" COUNT(CASE WHEN lcl.call_status = 'REOPEN' THEN 1 END) AS Reopened, " + |
||||
|
" COUNT(CASE WHEN lcl.call_status = 'FOLLOWUP' THEN 1 END) AS Followup, " + |
||||
|
" COUNT(CASE WHEN lcl.call_status NOT IN ('COMPLETED', 'FOLLOWUP_COMPLETED', 'REOPEN', 'FOLLOWUP') THEN 1 END) AS Others " + |
||||
|
"FROM " + |
||||
|
" qaqc_request qr " + |
||||
|
"JOIN " + |
||||
|
" agent_assigned aa ON aa.qaqc_id = qr.qaqc_id " + |
||||
|
"JOIN " + |
||||
|
" agents_list al ON al.agent_id = aa.agent_id " + |
||||
|
"LEFT JOIN " + |
||||
|
" LatestCallLogs lcl ON qr.qaqc_id = lcl.qaqc_id AND al.agent_id = lcl.agent_id AND lcl.row_num = 1 " + |
||||
|
"WHERE " + |
||||
|
" al.agent_id = ? AND aa.data_count != 0 " + |
||||
|
" AND DATE(aa.created_date) BETWEEN ? AND ? " + |
||||
|
"GROUP BY " + |
||||
|
" taskid, cdate, assigned, call_category"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sql, userId, startDate, endDate); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getAgentPerformanceCount(String startDate, String endDate) { |
||||
|
String sql = "SELECT " + |
||||
|
"t2.total_calls, " + |
||||
|
"t3.completed_calls, " + |
||||
|
"t2.total_calls - t3.completed_calls AS pending_calls, " + |
||||
|
"t4.no_of_agents " + |
||||
|
"FROM " + |
||||
|
"( " + |
||||
|
" SELECT " + |
||||
|
" SUM(aa.data_count) AS total_calls " + |
||||
|
" FROM " + |
||||
|
" agent_assigned aa " + |
||||
|
" INNER JOIN " + |
||||
|
" qaqc_request qr " + |
||||
|
" ON " + |
||||
|
" aa.qaqc_id = qr.qaqc_id " + |
||||
|
" WHERE " + |
||||
|
" (? IS NULL OR date(qr.created_date) BETWEEN ? AND ?) " + |
||||
|
") AS t2, " + |
||||
|
"( " + |
||||
|
" SELECT " + |
||||
|
" SUM(qr.total_data) AS total_data, " + |
||||
|
" COUNT(CASE WHEN qcl.call_status IS NOT NULL THEN qcl.qaqc_id END) AS completed_calls" + |
||||
|
" FROM " + |
||||
|
" qaqc_request qr " + |
||||
|
" LEFT JOIN " + |
||||
|
" qaqc_upload_data_history qcl " + |
||||
|
" ON " + |
||||
|
" qr.qaqc_id = qcl.qaqc_id " + |
||||
|
" WHERE " + |
||||
|
" (? IS NULL OR date(qr.created_date) BETWEEN ? AND ?) " + |
||||
|
") AS t3, " + |
||||
|
"( " + |
||||
|
" SELECT " + |
||||
|
" COUNT(DISTINCT aa.agent_id) AS no_of_agents " + |
||||
|
" FROM " + |
||||
|
" agent_assigned aa " + |
||||
|
" WHERE " + |
||||
|
" (? IS NULL OR date(aa.created_date) BETWEEN ? AND ?) " + |
||||
|
") AS t4"; |
||||
|
|
||||
|
// Prepare the parameters for the query |
||||
|
Object[] params = new Object[] { |
||||
|
startDate, startDate, endDate, // For t2 |
||||
|
startDate, startDate, endDate, // For t3 |
||||
|
startDate, startDate, endDate // For t4 |
||||
|
}; |
||||
|
|
||||
|
// Execute the query and return the results as a List of Maps |
||||
|
return jdbcTemplate.queryForList(sql, params); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getAgentPerformanceList(String startDate, String endDate) { |
||||
|
// Base query with subqueries for Assigned, Completed, and Pending |
||||
|
StringBuilder query = new StringBuilder( |
||||
|
"SELECT DISTINCT " + |
||||
|
" assigned_stats.agent_id, " + |
||||
|
" assigned_stats.agent_name, " + |
||||
|
" COALESCE(assigned_stats.Assigned, 0) AS Assigned, " + |
||||
|
" COALESCE(completed_stats.TotalCompleted, 0) AS TotalCompleted, " + |
||||
|
" COALESCE(assigned_stats.Assigned, 0) - COALESCE(completed_stats.TotalCompleted, 0) AS Pending, " + |
||||
|
" CASE WHEN COALESCE(assigned_stats.Assigned, 0) = 0 THEN 0 ELSE " + |
||||
|
" ROUND(COALESCE(completed_stats.TotalCompleted, 0) * 100.0 / COALESCE(assigned_stats.Assigned, 1), 2) " + |
||||
|
" END AS CompletionPercentage, " + |
||||
|
" COALESCE(call_stats.Completed_count, 0) AS Completed_count, " + |
||||
|
" COALESCE(call_stats.Reopened_count, 0) AS Reopened_count, " + |
||||
|
" COALESCE(call_stats.Followup_count, 0) AS Followup_count, " + |
||||
|
" COALESCE(call_stats.Other_count, 0) AS Other_count " + |
||||
|
"FROM " + |
||||
|
" (SELECT al.agent_id as agent_id, al.agent_name as agent_name,SUM(aa.data_count) AS Assigned " + |
||||
|
" FROM agent_assigned aa JOIN agents_list al ON aa.agent_id=al.agent_id " + |
||||
|
" WHERE (? IS NULL OR DATE(aa.created_date) >= STR_TO_DATE(?, '%Y-%m-%d')) " + // Conditional date filtering |
||||
|
" AND (? IS NULL OR DATE(aa.created_date) <= STR_TO_DATE(?, '%Y-%m-%d')) " + |
||||
|
" GROUP BY al.agent_id,al.agent_name) AS assigned_stats " + // The alias 'assigned_stats' is used here |
||||
|
"LEFT JOIN " + |
||||
|
" (SELECT agent_id, COUNT(call_status) AS TotalCompleted " + |
||||
|
" FROM qaqc_upload_data_history " + |
||||
|
" WHERE (? IS NULL OR DATE(created_date) >= STR_TO_DATE(?, '%Y-%m-%d')) " + // Conditional date filtering |
||||
|
" AND (? IS NULL OR DATE(created_date) <= STR_TO_DATE(?, '%Y-%m-%d')) " + |
||||
|
" GROUP BY agent_id) AS completed_stats ON assigned_stats.agent_id = completed_stats.agent_id " + |
||||
|
"LEFT JOIN " + |
||||
|
" (SELECT agent_id, " + |
||||
|
" SUM(CASE WHEN call_status IN ('COMPLETED', 'FOLLOWUP_COMPLETED') THEN 1 ELSE 0 END) AS Completed_count, " + |
||||
|
" SUM(CASE WHEN call_status = 'REOPEN' THEN 1 ELSE 0 END) AS Reopened_count, " + |
||||
|
" SUM(CASE WHEN call_status = 'FOLLOWUP' THEN 1 ELSE 0 END) AS Followup_count, " + |
||||
|
" SUM(CASE WHEN call_status NOT IN ('COMPLETED', 'FOLLOWUP_COMPLETED', 'REOPEN', 'FOLLOWUP') THEN 1 ELSE 0 END) AS Other_count " + |
||||
|
" FROM qaqc_upload_data_history " + |
||||
|
" WHERE (? IS NULL OR DATE(created_date) >= STR_TO_DATE(?, '%Y-%m-%d')) " + // Conditional date filtering |
||||
|
" AND (? IS NULL OR DATE(created_date) <= STR_TO_DATE(?, '%Y-%m-%d')) " + |
||||
|
" GROUP BY agent_id) AS call_stats ON assigned_stats.agent_id = call_stats.agent_id" |
||||
|
); |
||||
|
|
||||
|
// Execute query with date range parameters |
||||
|
return jdbcTemplate.queryForList( |
||||
|
query.toString(), |
||||
|
startDate, startDate, endDate, endDate, // Parameters for assigned_stats |
||||
|
startDate, startDate, endDate, endDate, // Parameters for completed_stats |
||||
|
startDate, startDate, endDate, endDate // Parameters for call_stats |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getAgentTaskwiseData(String agentId,String startDate, String endDate) { |
||||
|
|
||||
|
String query="WITH LatestCallLogs AS (\r\n" |
||||
|
+ " SELECT \r\n" |
||||
|
+ " cl.qaqc_id,\r\n" |
||||
|
+ " cl.agent_id,\r\n" |
||||
|
+ " cl.complaint_number,\r\n" |
||||
|
+ " cl.call_status,\r\n" |
||||
|
+ " cl.created_date,\r\n" |
||||
|
+ " ROW_NUMBER() OVER (PARTITION BY cl.qaqc_id, cl.agent_id, cl.complaint_number ORDER BY cl.created_date DESC) AS row_num\r\n" |
||||
|
+ " FROM \r\n" |
||||
|
+ " qaqc_call_logs cl\r\n" |
||||
|
+ ")\r\n" |
||||
|
+ "SELECT DISTINCT \r\n" |
||||
|
+ " qr.taskid as taskid,\r\n" |
||||
|
+ " date(aa.created_date) as cdate,\r\n" |
||||
|
+ " aa.data_count AS assigned,\r\n" |
||||
|
+ " COUNT(lcl.agent_id) AS callstaken,\r\n" |
||||
|
+ " (aa.data_count - COUNT(lcl.agent_id)) AS pending,\r\n" |
||||
|
+ " ROUND((COUNT(lcl.agent_id) / aa.data_count) * 100, 2) AS percentage,\r\n" |
||||
|
+ " COUNT(CASE WHEN lcl.call_status IN ('COMPLETED', 'FOLLOWUP_COMPLETED') THEN 1 END) AS Completed,\r\n" |
||||
|
+ " COUNT(CASE WHEN lcl.call_status = 'REOPEN' THEN 1 END) AS Reopened,\r\n" |
||||
|
+ " COUNT(CASE WHEN lcl.call_status = 'FOLLOWUP' THEN 1 END) AS Followup,\r\n" |
||||
|
+ " COUNT(CASE WHEN lcl.call_status NOT IN ('COMPLETED', 'FOLLOWUP_COMPLETED', 'REOPEN', 'FOLLOWUP') THEN 1 END) AS Others\r\n" |
||||
|
+ "FROM \r\n" |
||||
|
+ " qaqc_request qr\r\n" |
||||
|
+ "JOIN \r\n" |
||||
|
+ " agent_assigned aa ON aa.qaqc_id = qr.qaqc_id\r\n" |
||||
|
+ "JOIN \r\n" |
||||
|
+ " agents_list al ON al.agent_id = aa.agent_id\r\n" |
||||
|
+ "LEFT JOIN \r\n" |
||||
|
+ " LatestCallLogs lcl ON qr.qaqc_id = lcl.qaqc_id AND al.agent_id = lcl.agent_id AND lcl.row_num = 1\r\n" |
||||
|
+ "WHERE \r\n" |
||||
|
+ " al.agent_id = ? AND DATE(qr.created_date) >= ? AND DATE(qr.created_date) <= ? \r\n" |
||||
|
+ "GROUP BY \r\n" |
||||
|
+ " taskid, cdate, assigned"; |
||||
|
|
||||
|
|
||||
|
return jdbcTemplate.queryForList(query, agentId,startDate,endDate); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getAttendedComplaintStatus( |
||||
|
String startDate, String endDate, String complaintNumber, String complaintMobileNumber) { |
||||
|
|
||||
|
// Base query with JOIN to include agent_name |
||||
|
StringBuilder query = new StringBuilder( |
||||
|
"SELECT qcl.*,date(qcl.created_date) as updated_date, al.agent_name " + |
||||
|
"FROM qaqc_call_logs qcl " + |
||||
|
"LEFT JOIN agents_list al ON qcl.agent_id = al.agent_id " + |
||||
|
"WHERE 1=1 "); |
||||
|
|
||||
|
// List to store query parameters |
||||
|
List<Object> params = new ArrayList<>(); |
||||
|
|
||||
|
// Add date range condition if provided |
||||
|
if (startDate != null && !startDate.isEmpty()) { |
||||
|
query.append("AND DATE(qcl.created_date) >= ? "); |
||||
|
params.add(startDate); |
||||
|
} |
||||
|
if (endDate != null && !endDate.isEmpty()) { |
||||
|
query.append("AND DATE(qcl.created_date) <= ? "); |
||||
|
params.add(endDate); |
||||
|
} |
||||
|
|
||||
|
// Add complaint number condition if provided |
||||
|
if (complaintNumber != null && !complaintNumber.isEmpty()) { |
||||
|
query.append("AND qcl.complaint_number = ? "); |
||||
|
params.add(complaintNumber); |
||||
|
} |
||||
|
|
||||
|
// Add complaint mobile number condition if provided |
||||
|
if (complaintMobileNumber != null && !complaintMobileNumber.isEmpty()) { |
||||
|
query.append("AND qcl.complaint_mobilenumber = ? "); |
||||
|
params.add(complaintMobileNumber); |
||||
|
} |
||||
|
|
||||
|
// Add ORDER BY clause |
||||
|
query.append("ORDER BY qcl.created_date DESC "); |
||||
|
|
||||
|
// Add LIMIT clause only if complaintNumber is provided |
||||
|
if (complaintNumber != null && !complaintNumber.isEmpty()) { |
||||
|
query.append("LIMIT 1 "); |
||||
|
} |
||||
|
|
||||
|
// Execute the query with dynamic parameters |
||||
|
return jdbcTemplate.queryForList(query.toString(), params.toArray()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// public List<Map<String, Object>> getAttendedComplainthistory( |
||||
|
// String startDate, String endDate, String complaintNumber, String complaintMobileNumber) { |
||||
|
// |
||||
|
// // Base query with JOIN to include agent_name |
||||
|
// StringBuilder query = new StringBuilder( |
||||
|
// "SELECT qcl.*, al.agent_name " + |
||||
|
// "FROM qaqc_call_logs qcl " + |
||||
|
// "LEFT JOIN agents_list al ON qcl.agent_id = al.agent_id " + |
||||
|
// "WHERE 1=1 "); |
||||
|
// |
||||
|
// // List to store query parameters |
||||
|
// List<Object> params = new ArrayList<>(); |
||||
|
// |
||||
|
// // Add date range condition if provided |
||||
|
// if (startDate != null && !startDate.isEmpty()) { |
||||
|
// query.append("AND DATE(qcl.created_date) >= ? "); |
||||
|
// params.add(startDate); |
||||
|
// } |
||||
|
// if (endDate != null && !endDate.isEmpty()) { |
||||
|
// query.append("AND DATE(qcl.created_date) <= ? "); |
||||
|
// params.add(endDate); |
||||
|
// } |
||||
|
// |
||||
|
// // Add complaint number condition if provided |
||||
|
// if (complaintNumber != null && !complaintNumber.isEmpty()) { |
||||
|
// query.append("AND qcl.complaint_number = ? "); |
||||
|
// params.add(complaintNumber); |
||||
|
// } |
||||
|
// |
||||
|
// // Add complaint mobile number condition if provided |
||||
|
// if (complaintMobileNumber != null && !complaintMobileNumber.isEmpty()) { |
||||
|
// query.append("AND qcl.complaint_mobilenumber = ? "); |
||||
|
// params.add(complaintMobileNumber); |
||||
|
// } |
||||
|
// |
||||
|
// // Group by qcl.id and agent_name to avoid SQL error |
||||
|
// query.append("GROUP BY qcl.id, al.agent_name "); |
||||
|
// |
||||
|
// // Add ordering clause |
||||
|
// query.append("ORDER BY qcl.created_date DESC"); |
||||
|
// |
||||
|
// // Execute the query with dynamic parameters |
||||
|
// return jdbcTemplate.queryForList(query.toString(), params.toArray()); |
||||
|
// } |
||||
|
|
||||
|
public List<Map<String, Object>> getAttendedComplainthistory( |
||||
|
String startDate, |
||||
|
String endDate, |
||||
|
String complaintNumber, |
||||
|
String complaintMobileNumber) { |
||||
|
|
||||
|
StringBuilder query = new StringBuilder( |
||||
|
|
||||
|
"SELECT * FROM ( " + |
||||
|
|
||||
|
// ================= QAQC CALL LOGS ================= |
||||
|
"SELECT " + |
||||
|
"qcl.id, " + |
||||
|
"qcl.qaqc_id, " + |
||||
|
"qcl.call_category, " + |
||||
|
"qcl.agent_id, " + |
||||
|
"qcl.complaint_number, " + |
||||
|
"qcl.complaint_date, " + |
||||
|
"qcl.complaint_person_name, " + |
||||
|
"qcl.complaint_mobilenumber, " + |
||||
|
"qcl.complaint_type, " + |
||||
|
"qcl.complaint_mode, " + |
||||
|
"qcl.department, " + |
||||
|
"qcl.complaint_group, " + |
||||
|
"qcl.official_name, " + |
||||
|
"qcl.official_mobilenum, " + |
||||
|
"qcl.call_status, " + |
||||
|
"qcl.remainder_date, " + |
||||
|
"qcl.remarks, " + |
||||
|
"qcl.created_date, " + |
||||
|
"qcl.is_processed, " + |
||||
|
"qcl.updated_agent, " + |
||||
|
"al.agent_name, " + |
||||
|
"'QAQC' AS source_table " + |
||||
|
|
||||
|
"FROM qaqc_call_logs qcl " + |
||||
|
"LEFT JOIN agents_list al ON qcl.agent_id = al.agent_id " + |
||||
|
|
||||
|
"UNION ALL " + |
||||
|
|
||||
|
// ================= SOCIAL MEDIA ================= |
||||
|
"SELECT " + |
||||
|
"smc.id, " + |
||||
|
"NULL AS qaqc_id, " + |
||||
|
"NULL AS call_category, " + |
||||
|
"smc.updated_by AS agent_id, " + |
||||
|
"smc.complaint_number, " + |
||||
|
"smc.complaint_date, " + |
||||
|
"smc.complaint_person_name, " + |
||||
|
"smc.complaint_mobilenumber, " + |
||||
|
"smc.complaint_type, " + |
||||
|
"smc.complaint_mode, " + |
||||
|
"smc.department, " + |
||||
|
"NULL AS complaint_group, " + |
||||
|
"smc.official_name, " + |
||||
|
"smc.official_mobilenum, " + |
||||
|
"smc.call_status, " + |
||||
|
"smc.remainder_date AS remainder_date, " + |
||||
|
"smc.remarks, " + |
||||
|
"smc.created_date, " + |
||||
|
"smc.is_processed AS is_processed, " + |
||||
|
"smc.updated_by AS updated_agent, " + |
||||
|
"al.agent_name, " + |
||||
|
"'SOCIAL_MEDIA' AS source_table " + |
||||
|
|
||||
|
"FROM social_media_completed smc " + |
||||
|
"LEFT JOIN agents_list al ON smc.updated_by = al.agent_id " + |
||||
|
|
||||
|
") x WHERE 1=1 " |
||||
|
); |
||||
|
|
||||
|
List<Object> params = new ArrayList<>(); |
||||
|
|
||||
|
// ================= DATE FILTER ================= |
||||
|
if (startDate != null && !startDate.isEmpty()) { |
||||
|
query.append("AND DATE(x.created_date) >= ? "); |
||||
|
params.add(startDate); |
||||
|
} |
||||
|
|
||||
|
if (endDate != null && !endDate.isEmpty()) { |
||||
|
query.append("AND DATE(x.created_date) <= ? "); |
||||
|
params.add(endDate); |
||||
|
} |
||||
|
|
||||
|
// ================= COMPLAINT NUMBER ================= |
||||
|
if (complaintNumber != null && !complaintNumber.isEmpty()) { |
||||
|
query.append("AND x.complaint_number = ? "); |
||||
|
params.add(complaintNumber); |
||||
|
} |
||||
|
|
||||
|
// ================= MOBILE NUMBER ================= |
||||
|
if (complaintMobileNumber != null && !complaintMobileNumber.isEmpty()) { |
||||
|
query.append("AND x.complaint_mobilenumber = ? "); |
||||
|
params.add(complaintMobileNumber); |
||||
|
} |
||||
|
|
||||
|
// ================= ORDER ================= |
||||
|
query.append("ORDER BY x.created_date DESC"); |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query.toString(), params.toArray()); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getAgentTaskwiseAssign(String agentId) { |
||||
|
String query="SELECT * FROM qaqc_upload_data_history where agent_id=? "; |
||||
|
return jdbcTemplate.queryForList(query, agentId); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getAgentName(int userId) { |
||||
|
String query="SELECT agent_name \r\n" |
||||
|
+ "FROM agents_list\r\n" |
||||
|
+ "where agent_id=?"; |
||||
|
return jdbcTemplate.queryForList(query, userId); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,391 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import java.time.LocalDateTime; |
||||
|
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.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import java.io.InputStream; |
||||
|
import java.net.HttpURLConnection; |
||||
|
import java.net.URL; |
||||
|
import java.net.URLConnection; |
||||
|
import java.net.URLEncoder; |
||||
|
import java.nio.charset.StandardCharsets; |
||||
|
|
||||
|
@Service |
||||
|
@Transactional |
||||
|
public class QaqcCallsService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getClosedComplaints(int agent_id) { |
||||
|
String query = "SELECT data_id, complaint_number, complaint_date,complaint_person_name, complaint_mobilenumber, complaint_type,official_name, official_mobilenum,complaint_mode, department,call_category " + |
||||
|
"FROM gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
"WHERE call_category = 'CLOSED' " + |
||||
|
" AND is_processed = FALSE " + // Fetch only unprocessed entries |
||||
|
" AND agent_id = ?"; |
||||
|
return jdbcTemplate.queryForList(query, agent_id); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getCallCategories() |
||||
|
{ |
||||
|
String query = "SELECT call_status " + |
||||
|
"FROM gcc_1913_qaqc.call_status WHERE call_category_id ='1' and isactive='1'"; |
||||
|
return jdbcTemplate.queryForList(query); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public int uploadComplaintDetailsInLogs(Map<String, Object> logDetails, String action, String complaintNumber, String remainderDate) { |
||||
|
//System.out.println("Complaint Details: " + logDetails); |
||||
|
// Extract other field values from complaintDetails |
||||
|
int qaqcid = (int) logDetails.get("qaqc_id"); |
||||
|
String ccategory = logDetails.get("call_category").toString(); |
||||
|
String complaintDate = logDetails.get("complaint_date").toString(); |
||||
|
String personName = logDetails.get("complaint_person_name").toString(); |
||||
|
String personMobNo = logDetails.get("complaint_mobilenumber").toString(); |
||||
|
String cType = logDetails.get("complaint_type").toString(); |
||||
|
String cMode = logDetails.get("complaint_mode").toString(); |
||||
|
String department = logDetails.get("department").toString(); |
||||
|
String cGroup = logDetails.get("complaint_group").toString(); |
||||
|
String officialName = logDetails.get("official_name").toString(); |
||||
|
String officialMobileNum = logDetails.get("official_mobilenum").toString(); |
||||
|
String callStatus = logDetails.get("call_status").toString(); |
||||
|
String remarks = logDetails.get("remarks").toString(); |
||||
|
int agentId = (int) logDetails.get("agent_id"); |
||||
|
int updated_agent=(int)logDetails.get("updated_agent"); |
||||
|
boolean isProcessed = (boolean)logDetails.get("is_processed"); |
||||
|
LocalDateTime currentDate = LocalDateTime.now(); |
||||
|
|
||||
|
// Determine which table to insert into based on the action |
||||
|
if (action.equals("FOLLOWUP")) { |
||||
|
String query = "INSERT INTO gcc_1913_qaqc.qaqc_followup_call_logs (qaqc_id, call_category, agent_id, complaint_number,complaint_date, complaint_person_name, " |
||||
|
+ "complaint_mobilenumber, complaint_type, complaint_mode, department, complaint_group, official_name, remainder_date,official_mobilenum, call_status, remarks,created_date,updated_agent) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?)"; |
||||
|
|
||||
|
int rowsAffected = jdbcTemplate.update(query, qaqcid, ccategory, agentId, complaintNumber, complaintDate,personName, |
||||
|
personMobNo, cType, cMode, department, cGroup, officialName,remainderDate, officialMobileNum,callStatus, |
||||
|
remarks,currentDate,updated_agent); |
||||
|
//System.out.println("Rows Inserted in qaqc_followup_call_logs : " + rowsAffected); |
||||
|
|
||||
|
String query1 = "INSERT INTO gcc_1913_qaqc.qaqc_call_logs (qaqc_id, call_category, agent_id, complaint_number,complaint_date, complaint_person_name, " |
||||
|
+ "complaint_mobilenumber, complaint_type, complaint_mode, department, complaint_group, official_name,remainder_date, official_mobilenum, call_status, remarks, is_processed,updated_agent) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?)"; |
||||
|
|
||||
|
int rowsAffected1 = jdbcTemplate.update(query1, qaqcid, ccategory, agentId, complaintNumber, complaintDate,personName, |
||||
|
personMobNo, cType, cMode, department, cGroup, officialName,remainderDate, officialMobileNum, callStatus, remarks, |
||||
|
isProcessed,updated_agent); |
||||
|
//System.out.println("Rows Inserted in qaqc_call_logs : " + rowsAffected1); |
||||
|
|
||||
|
|
||||
|
return rowsAffected + rowsAffected1; |
||||
|
|
||||
|
} else { |
||||
|
String query = "INSERT INTO gcc_1913_qaqc.qaqc_call_logs (qaqc_id, call_category, agent_id, complaint_number, complaint_date,complaint_person_name, " |
||||
|
+ "complaint_mobilenumber, complaint_type, complaint_mode, department, complaint_group, official_name, official_mobilenum, call_status, remarks, is_processed,updated_agent) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?)"; |
||||
|
|
||||
|
int rowsAffected = jdbcTemplate.update(query, qaqcid, ccategory, agentId, complaintNumber,complaintDate, personName, |
||||
|
personMobNo, cType, cMode, department, cGroup, officialName, officialMobileNum, callStatus, remarks, |
||||
|
isProcessed,updated_agent); |
||||
|
|
||||
|
//System.out.println("Rows Inserted in qaqc_call_logs: " + rowsAffected); |
||||
|
|
||||
|
return rowsAffected; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void updateComplaintDetails(String complaintNumber,int dataId, String action, String remarks,int updated_agent) |
||||
|
{ |
||||
|
String query = "UPDATE gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
"SET call_status = ?, " + " remarks = ?,updated_agent=?, " + |
||||
|
" updated_date = CURRENT_TIMESTAMP, " + " is_processed = TRUE " + |
||||
|
"WHERE data_id = ? " +" AND complaint_number = ? " +" AND call_category = 'CLOSED'"; |
||||
|
|
||||
|
int rowsUpdated = jdbcTemplate.update(query, action, remarks,updated_agent, dataId,complaintNumber); |
||||
|
|
||||
|
//System.out.println("Rows Updated in upload data: " + rowsUpdated); |
||||
|
} |
||||
|
|
||||
|
public Map<String, Object> getComplaintDetails(int dataId) { |
||||
|
String query = "Select * from gcc_1913_qaqc.qaqc_upload_data where data_id = ?"; |
||||
|
return jdbcTemplate.queryForMap(query, dataId); |
||||
|
} |
||||
|
|
||||
|
public Map<String, Object> getErpnameById(Integer agentId) { |
||||
|
String query = "Select erp_username from agents_list where agent_id = ?"; |
||||
|
return jdbcTemplate.queryForMap(query, agentId); |
||||
|
} |
||||
|
|
||||
|
// public boolean ChangeStatusInErp(String complaintNumber, String remarks, String action,String Erpname) { |
||||
|
// String urlString = ""; |
||||
|
// |
||||
|
// if(remarks.isEmpty()) { |
||||
|
// remarks="N/A"; |
||||
|
// } |
||||
|
// |
||||
|
// if("COMPLETED".equals(action) || "WRONG_ASSIGN".equals(action)) { |
||||
|
// |
||||
|
// urlString="https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=UpdateComplaint&ComplaintId="+complaintNumber+"&Message="+remarks+"&UserType=Official&Status=11&erp_username="+Erpname; |
||||
|
// System.out.println(urlString); |
||||
|
// //urlencode |
||||
|
// try { |
||||
|
// |
||||
|
// URL url = new URL(urlString); |
||||
|
// URLConnection urlcon=url.openConnection(); |
||||
|
// InputStream stream=urlcon.getInputStream(); |
||||
|
// StringBuilder responseBuilder = new StringBuilder(); |
||||
|
// int i; |
||||
|
// while((i=stream.read())!=-1){ |
||||
|
// responseBuilder.append((char) i); |
||||
|
// } |
||||
|
// stream.close(); |
||||
|
// |
||||
|
// // Parse the response |
||||
|
// String response = responseBuilder.toString(); |
||||
|
// System.out.println("Raw Response from ERP if Completed: " + response); // Debug: Print the raw response |
||||
|
// |
||||
|
// // Check ResultStatus in the response |
||||
|
// if (response.contains("\"ResultStatus\": true")) { |
||||
|
// System.out.println("ResultStatus is true in the response."); // Debug: Positive ResultStatus |
||||
|
// return true; |
||||
|
// } |
||||
|
// else { |
||||
|
// System.out.println("ResultStatus is false or not present in the response."); // Debug: Negative or missing ResultStatus |
||||
|
// return false; |
||||
|
// } |
||||
|
// } catch (Exception e) { |
||||
|
// e.printStackTrace(); |
||||
|
// return false; |
||||
|
// } |
||||
|
// } |
||||
|
// |
||||
|
// if("REOPEN".equals(action)) { |
||||
|
// urlString="https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=UpdateComplaint&ComplaintId="+complaintNumber+"&Message="+remarks+"&UserType=Official&Status=9&Comp_Image=64baseString&erp_username="+Erpname; |
||||
|
// System.out.println(urlString); |
||||
|
// try { |
||||
|
// URL url = new URL(urlString); |
||||
|
// URLConnection urlcon=url.openConnection(); |
||||
|
// InputStream stream=urlcon.getInputStream(); |
||||
|
// StringBuilder responseBuilder = new StringBuilder(); |
||||
|
// int i; |
||||
|
// while((i=stream.read())!=-1){ |
||||
|
// responseBuilder.append((char) i); |
||||
|
// } |
||||
|
// stream.close(); |
||||
|
// |
||||
|
// // Parse the response |
||||
|
// String response = responseBuilder.toString(); |
||||
|
// System.out.println("Raw Response from ERP if Reopen: " + response); |
||||
|
// |
||||
|
// // Check ResultStatus in the response |
||||
|
// if (response.contains("\"ResultStatus\": true")) { |
||||
|
// System.out.println("ResultStatus is true in the response."); // Debug: Positive ResultStatus |
||||
|
// return true; |
||||
|
// } |
||||
|
// else { |
||||
|
// System.out.println("ResultStatus is false or not present in the response."); // Debug: Negative or missing ResultStatus |
||||
|
// return false; |
||||
|
// } |
||||
|
// } catch (Exception e) { |
||||
|
// e.printStackTrace(); |
||||
|
// return false; |
||||
|
// } |
||||
|
// } |
||||
|
// return false; |
||||
|
// |
||||
|
// } |
||||
|
|
||||
|
// public boolean ChangeStatusInErp(String complaintNumber, String remarks, String action, String Erpname) { |
||||
|
// String urlString = ""; |
||||
|
// |
||||
|
// if (remarks.isEmpty()) { |
||||
|
// remarks = "N/A"; |
||||
|
// } |
||||
|
// |
||||
|
// try { |
||||
|
// // Encode parameters |
||||
|
// String encodedComplaintNumber = URLEncoder.encode(complaintNumber, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
// String encodedRemarks = URLEncoder.encode(remarks, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
// String encodedErpname = URLEncoder.encode(Erpname, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
// |
||||
|
// if ("COMPLETED".equals(action) || "WRONG_ASSIGN".equals(action)) { |
||||
|
// urlString = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?" |
||||
|
// + "serviceId=UpdateComplaint" |
||||
|
// + "&ComplaintId=" + encodedComplaintNumber |
||||
|
// + "&Message=" + encodedRemarks |
||||
|
// + "&UserType=Official" |
||||
|
// + "&Status=11" |
||||
|
// + "&erp_username=" + encodedErpname; |
||||
|
// |
||||
|
// System.out.println(urlString); |
||||
|
// |
||||
|
// return sendRequest(urlString); |
||||
|
// } |
||||
|
// |
||||
|
// if ("REOPEN".equals(action)) { |
||||
|
// urlString = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?" |
||||
|
// + "serviceId=UpdateComplaint" |
||||
|
// + "&ComplaintId=" + encodedComplaintNumber |
||||
|
// + "&Message=" + encodedRemarks |
||||
|
// + "&UserType=Official" |
||||
|
// + "&Status=9" |
||||
|
// + "&Comp_Image=64baseString" |
||||
|
// + "&erp_username=" + encodedErpname; |
||||
|
// |
||||
|
// System.out.println(urlString); |
||||
|
// |
||||
|
// return sendRequest(urlString); |
||||
|
// } |
||||
|
// } catch (Exception e) { |
||||
|
// e.printStackTrace(); |
||||
|
// return false; |
||||
|
// } |
||||
|
// |
||||
|
// return false; |
||||
|
// } |
||||
|
|
||||
|
public boolean ChangeStatusInErp(String complaintNumber, String remarks, String action, String Erpname) { |
||||
|
String baseUrl = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?"; |
||||
|
String status = ""; |
||||
|
|
||||
|
if (remarks.isEmpty()) { |
||||
|
remarks = "N/A"; |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
// Encode parameters |
||||
|
String encodedComplaintNumber = URLEncoder.encode(complaintNumber, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
String encodedRemarks = URLEncoder.encode(remarks, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
String encodedErpname = URLEncoder.encode(Erpname, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
|
||||
|
// Determine status based on action |
||||
|
if ("COMPLETED".equals(action) || "WRONG_ASSIGN".equals(action)) { |
||||
|
status = "11"; |
||||
|
} else if ("REOPEN".equals(action)) { |
||||
|
status = "9"; |
||||
|
} else { |
||||
|
return false; // Invalid action, return false |
||||
|
} |
||||
|
|
||||
|
// Construct the URL |
||||
|
String urlString = baseUrl |
||||
|
+ "serviceId=UpdateComplaint" |
||||
|
+ "&ComplaintId=" + encodedComplaintNumber |
||||
|
+ "&Message=" + encodedRemarks |
||||
|
+ "&UserType=Official" |
||||
|
+ "&Status=" + status |
||||
|
+ "&Comp_Image=" |
||||
|
+ "&erp_username=" + encodedErpname; |
||||
|
|
||||
|
System.out.println(urlString); |
||||
|
|
||||
|
// Send the request |
||||
|
return sendRequest(urlString); |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private boolean sendRequest(String urlString) { |
||||
|
try { |
||||
|
URL url = new URL(urlString); |
||||
|
URLConnection urlcon = url.openConnection(); |
||||
|
InputStream stream = urlcon.getInputStream(); |
||||
|
StringBuilder responseBuilder = new StringBuilder(); |
||||
|
int i; |
||||
|
while ((i = stream.read()) != -1) { |
||||
|
responseBuilder.append((char) i); |
||||
|
} |
||||
|
stream.close(); |
||||
|
|
||||
|
// Parse the response |
||||
|
String response = responseBuilder.toString(); |
||||
|
//System.out.println("Raw Response: " + response); |
||||
|
|
||||
|
// Check ResultStatus in the response |
||||
|
if (response.contains("\"ResultStatus\": true")) { |
||||
|
//System.out.println("ResultStatus is true in the response."); |
||||
|
return true; |
||||
|
} else { |
||||
|
System.out.println("ResultStatus is false or not present in the response."); |
||||
|
return false; |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public void saveMobileNumDetails(String complaintNumber, String remarks) { |
||||
|
String query = "insert into officer_mobileno (complaint_number,remarks) values(?,?)"; |
||||
|
int rowsUpdated = jdbcTemplate.update(query, complaintNumber, remarks); |
||||
|
//System.out.println("Rows Updated: " + rowsUpdated); |
||||
|
} |
||||
|
|
||||
|
public Map<String,Object> checkComplaintDetail(String complaintNumber) { |
||||
|
String query = "select id,complaint_number from qaqc_followup_call_logs where complaint_number = ?"; |
||||
|
try { |
||||
|
return jdbcTemplate.queryForMap(query, complaintNumber); |
||||
|
} catch (Exception e) { |
||||
|
System.out.println("Complaint number not found"); |
||||
|
return null; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void updateFollowupCallLogs(String complaintNumber, String action, String remarks, int followupid) { |
||||
|
//System.out.println(complaintNumber+action+remarks); |
||||
|
|
||||
|
String query = "update gcc_1913_qaqc.qaqc_followup_call_logs set call_status = ?,remarks = ? where complaint_number= ? and id =?"; |
||||
|
|
||||
|
int rowsUpdated = jdbcTemplate.update(query, action, remarks, complaintNumber, followupid); |
||||
|
//System.out.println("Rows Updated in followup: " + rowsUpdated); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getSubmitDetails(int userId) { |
||||
|
|
||||
|
String query = "SELECT complaint_number, complaint_date,complaint_person_name, complaint_mobilenumber, " + |
||||
|
"complaint_type, call_status, remarks " + |
||||
|
"FROM gcc_1913_qaqc.qaqc_upload_data " + |
||||
|
"WHERE agent_id = ? AND call_category = 'CLOSED' AND is_processed = '1'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query,userId); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public void updateComplaintHistoryDetails(String complaintNumber, int dataId, String action, String remarks,int updated_agent, |
||||
|
String remainderDate) { |
||||
|
|
||||
|
String query = "UPDATE gcc_1913_qaqc.qaqc_upload_data_history \r\n" |
||||
|
+ "SET call_status = ?, remarks = ?, updated_date = CURRENT_TIMESTAMP, remainder_date = ?,updated_agent=?\r\n" |
||||
|
+ "WHERE data_id = ? AND complaint_number = ? AND call_category = 'CLOSED'"; |
||||
|
|
||||
|
int rowsUpdated = jdbcTemplate.update(query, action, remarks, remainderDate,updated_agent, dataId, complaintNumber); |
||||
|
|
||||
|
//System.out.println("Rows Updated in upload history: " + rowsUpdated); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
@ -0,0 +1,357 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import java.io.InputStream; |
||||
|
import java.net.URL; |
||||
|
import java.net.URLConnection; |
||||
|
import java.net.URLEncoder; |
||||
|
import java.nio.charset.StandardCharsets; |
||||
|
import java.sql.Connection; |
||||
|
import java.sql.PreparedStatement; |
||||
|
import java.sql.SQLException; |
||||
|
import java.time.LocalDate; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
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.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
public class QaqcService { |
||||
|
|
||||
|
|
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getFollowUpDetailsByStatus(String callStatus, LocalDate fromDate, LocalDate toDate) { |
||||
|
// Start the SQL query |
||||
|
String sql = "SELECT " + |
||||
|
"f.id, " + |
||||
|
"f.qaqc_id, " + |
||||
|
"f.call_category, " + |
||||
|
"f.complaint_number, " + |
||||
|
"f.agent_id, " + |
||||
|
"f.complaint_person_name, " + |
||||
|
"f.complaint_mobilenumber, " + |
||||
|
"f.complaint_type, " + |
||||
|
"f.complaint_mode, " + |
||||
|
"f.department, " + |
||||
|
"f.complaint_group, " + |
||||
|
"f.official_name, " + |
||||
|
"f.official_mobilenum, " + |
||||
|
"f.call_status, " + |
||||
|
"f.remainder_date, " + |
||||
|
"f.remarks, " + |
||||
|
"f.created_date, " + |
||||
|
"r.taskid " + |
||||
|
"FROM qaqc_followup_call_logs f " + |
||||
|
"LEFT JOIN qaqc_request r ON f.qaqc_id = r.qaqc_id "; |
||||
|
|
||||
|
// List to hold the query parameters |
||||
|
List<Object> params = new ArrayList<>(); |
||||
|
boolean hasCondition = false; |
||||
|
|
||||
|
// Filter by callStatus if provided |
||||
|
if (callStatus != null && !callStatus.isEmpty()) { |
||||
|
sql += " WHERE f.call_status = ?"; |
||||
|
params.add(callStatus); |
||||
|
hasCondition = true; |
||||
|
} |
||||
|
|
||||
|
// Filter by date range (fromDate to toDate) if both are provided |
||||
|
if (fromDate != null && toDate != null) { |
||||
|
if (hasCondition) { |
||||
|
sql += " AND f.remainder_date BETWEEN ? AND ?"; |
||||
|
} else { |
||||
|
sql += " WHERE f.remainder_date BETWEEN ? AND ?"; |
||||
|
hasCondition = true; |
||||
|
} |
||||
|
params.add(fromDate); |
||||
|
params.add(toDate); |
||||
|
} |
||||
|
// If only fromDate is provided |
||||
|
else if (fromDate != null) { |
||||
|
if (hasCondition) { |
||||
|
sql += " AND f.remainder_date >= ?"; |
||||
|
} else { |
||||
|
sql += " WHERE f.remainder_date >= ?"; |
||||
|
hasCondition = true; |
||||
|
} |
||||
|
params.add(fromDate); |
||||
|
} |
||||
|
// If only toDate is provided (include records with remainder_date greater than toDate) |
||||
|
else if (toDate != null) { |
||||
|
if (hasCondition) { |
||||
|
sql += " AND (f.remainder_date <= ? OR f.remainder_date > ?)"; |
||||
|
} else { |
||||
|
sql += " WHERE (f.remainder_date <= ? OR f.remainder_date > ?)"; |
||||
|
hasCondition = true; |
||||
|
} |
||||
|
params.add(toDate); // <= toDate condition |
||||
|
params.add(toDate); // > toDate condition |
||||
|
} |
||||
|
|
||||
|
// Final debugging: print the query and parameters |
||||
|
//System.out.println("Final SQL Query: " + sql); |
||||
|
//System.out.println("Query Parameters: " + params); |
||||
|
|
||||
|
// Execute the query with the dynamically added parameters |
||||
|
return jdbcTemplate.queryForList(sql, params.toArray()); |
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
|
||||
|
public Map<String, Long> countFollowUpsByDateAndStatus(LocalDate today, String followupStatus) { |
||||
|
String sqlNotClosed = "SELECT COUNT(*) FROM qaqc_followup_call_logs " + |
||||
|
"WHERE call_status = ? AND DATE(remainder_date) = ? AND call_category NOT IN ('CLOSED')"; |
||||
|
|
||||
|
String sqlClosed = "SELECT COUNT(*) FROM qaqc_followup_call_logs " + |
||||
|
"WHERE call_status = ? AND DATE(remainder_date) = ? AND call_category IN ('CLOSED')"; |
||||
|
|
||||
|
long countNotClosed = jdbcTemplate.queryForObject(sqlNotClosed, new Object[]{followupStatus, today}, Long.class); |
||||
|
long countClosed = jdbcTemplate.queryForObject(sqlClosed, new Object[]{followupStatus, today}, Long.class); |
||||
|
|
||||
|
Map<String, Long> result = new HashMap<>(); |
||||
|
result.put("officialfollowup", countNotClosed); |
||||
|
result.put("publicfollowup", countClosed); |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
*/ |
||||
|
public Map<String, Long> countFollowUpsByDateAndStatus(LocalDate today, String followupStatus) { |
||||
|
String sqlNotClosed = "SELECT COUNT(*) FROM qaqc_followup_call_logs " + |
||||
|
"WHERE call_status = ? AND DATE(remainder_date) = ? AND call_category NOT IN ('CLOSED','PUBLICFOLLOWUP')"; |
||||
|
|
||||
|
String sqlClosed = "SELECT COUNT(*) FROM qaqc_followup_call_logs " + |
||||
|
"WHERE call_status = ? AND DATE(remainder_date) = ? AND call_category IN ('CLOSED','PUBLICFOLLOWUP')"; |
||||
|
|
||||
|
long countNotClosed = jdbcTemplate.queryForObject(sqlNotClosed, new Object[]{followupStatus, today}, Long.class); |
||||
|
long countClosed = jdbcTemplate.queryForObject(sqlClosed, new Object[]{followupStatus, today}, Long.class); |
||||
|
|
||||
|
Map<String, Long> result = new HashMap<>(); |
||||
|
result.put("officialfollowup", countNotClosed); |
||||
|
result.put("publicfollowup", countClosed); |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getUnattendedlist(Integer ucount) { |
||||
|
|
||||
|
String query1="SELECT \r\n" |
||||
|
+ " MIN(complaint_date) AS complaint_date, \r\n" |
||||
|
+ " MIN(call_category) AS call_category, \r\n" |
||||
|
+ " MIN(complaint_person_name) AS complaint_person_name, \r\n" |
||||
|
+ " MIN(complaint_mobilenumber) AS complaint_mobilenumber, \r\n" |
||||
|
+ " complaint_number AS complaint_number, \r\n" |
||||
|
+ " MIN(complaint_group) AS complaint_group, \r\n" |
||||
|
+ " MIN(complaint_type) AS complaint_type, \r\n" |
||||
|
+ " MIN(complaint_mode) AS complaint_mode \r\n" |
||||
|
+ " FROM qaqc_upload_data_history \r\n" |
||||
|
+ " WHERE unattended_msg = 0 \r\n" |
||||
|
+ " AND call_status = 'UNATTENDED' \r\n" |
||||
|
+ " AND call_category IN ('CLOSED', 'PUBLICFOLLOWUP') \r\n" |
||||
|
+ " GROUP BY complaint_number \r\n" |
||||
|
+ " HAVING COUNT(*) >= ? \r\n" |
||||
|
+ " LIMIT 100"; |
||||
|
|
||||
|
|
||||
|
// Log query and parameters for debugging |
||||
|
//System.out.println("Executing query: " + query1); |
||||
|
//System.out.println("With parameters: " + ucount); |
||||
|
|
||||
|
List<Map<String, Object>> results = jdbcTemplate.queryForList(query1, ucount); |
||||
|
|
||||
|
// Log results for debugging |
||||
|
//System.out.println("Query results: " + results); |
||||
|
|
||||
|
return results.isEmpty() ? Collections.emptyList() : results; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
public boolean ChangeStatusInErp(String complaintNumber,String erp_name,String remarks) { |
||||
|
String baseUrl = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?"; |
||||
|
String status = "11"; |
||||
|
|
||||
|
//String Erpname ="QAops1"; |
||||
|
|
||||
|
try { |
||||
|
// Encode parameters |
||||
|
String encodedComplaintNumber = URLEncoder.encode(complaintNumber, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
String encodedRemarks = URLEncoder.encode(remarks, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
String encodedErpname = URLEncoder.encode(erp_name, StandardCharsets.UTF_8.toString()).replace("+", "%20"); |
||||
|
|
||||
|
//System.out.println("encodedComplaintNumber===="+encodedComplaintNumber); |
||||
|
//System.out.println("encodedErpname===="+encodedErpname); |
||||
|
//System.out.println("encodedRemarks===="+encodedRemarks); |
||||
|
|
||||
|
// Construct the URL |
||||
|
String urlString = baseUrl |
||||
|
+ "serviceId=UpdateComplaint" |
||||
|
+ "&ComplaintId=" + encodedComplaintNumber |
||||
|
+ "&Message=" + encodedRemarks |
||||
|
+ "&UserType=Official" |
||||
|
+ "&Status=" + status |
||||
|
+ "&Comp_Image=" |
||||
|
+ "&erp_username=" + encodedErpname; |
||||
|
|
||||
|
System.out.println("ERP Hitting URL="+urlString); |
||||
|
|
||||
|
// Send the request |
||||
|
return sendRequest(urlString); |
||||
|
|
||||
|
//return true; |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private boolean sendRequest(String urlString) { |
||||
|
try { |
||||
|
URL url = new URL(urlString); |
||||
|
URLConnection urlcon = url.openConnection(); |
||||
|
InputStream stream = urlcon.getInputStream(); |
||||
|
StringBuilder responseBuilder = new StringBuilder(); |
||||
|
int i; |
||||
|
while ((i = stream.read()) != -1) { |
||||
|
responseBuilder.append((char) i); |
||||
|
} |
||||
|
stream.close(); |
||||
|
|
||||
|
// Parse the response |
||||
|
String response = responseBuilder.toString(); |
||||
|
//System.out.println("Raw Response: " + response); |
||||
|
|
||||
|
// Check ResultStatus in the response |
||||
|
if (response.contains("\"ResultStatus\": true")) { |
||||
|
//System.out.println("ResultStatus is true in the response."); |
||||
|
return true; |
||||
|
} else { |
||||
|
System.out.println("ResultStatus is false or not present in the response."); |
||||
|
return false; |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public String getErpusernamebyId(String userId) { |
||||
|
|
||||
|
String query="SELECT erp_username FROM gcc_1913_qaqc.agents_list\r\n" |
||||
|
+ "where calling_type='1913ADMIN' and agent_id=?"; |
||||
|
|
||||
|
//System.out.println("query"+query); |
||||
|
|
||||
|
//String erpUsername = jdbcTemplate.queryForObject(query,new Object[]{userId},String.class); |
||||
|
String erpUsername = jdbcTemplate.queryForObject(query,String.class,userId); |
||||
|
|
||||
|
return erpUsername; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public int UpdateInHistoryTable(List<String> completedComplaints) { |
||||
|
int totalUpdated = 0; |
||||
|
|
||||
|
for (String cnum : completedComplaints) { |
||||
|
String query = "UPDATE qaqc_upload_data_history SET unattended_msg = 1 WHERE complaint_number = ?"; |
||||
|
|
||||
|
// Update using JdbcTemplate and accumulate the count |
||||
|
int rowsUpdated = jdbcTemplate.update(query, cnum); |
||||
|
|
||||
|
// Accumulate the number of successfully updated rows |
||||
|
totalUpdated += rowsUpdated; |
||||
|
} |
||||
|
|
||||
|
return totalUpdated; // Return the total number of updated rows |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public int insertInLogs(List<String> completedComplaints,String remarks,String userId) { |
||||
|
|
||||
|
int totalUpdated = 0; |
||||
|
int rowsUpdated=0; |
||||
|
|
||||
|
for (String cnum : completedComplaints) { |
||||
|
|
||||
|
List<Map<String,Object>>details=getComplaintsLatestDetails(cnum); |
||||
|
|
||||
|
if(!details.isEmpty()) { |
||||
|
|
||||
|
for (Map<String, Object> detail : details) { |
||||
|
int qaqc_id = Integer.parseInt(detail.get("qaqc_id").toString()); |
||||
|
String call_category = "UNATTENDED"; |
||||
|
int agent_id = Integer.parseInt(detail.get("agent_id").toString()); |
||||
|
|
||||
|
// # id, qaqc_id, call_category, agent_id, complaint_number, complaint_date, complaint_person_name, |
||||
|
// complaint_mobilenumber, complaint_type, complaint_mode, department, complaint_group, official_name, official_mobilenum, |
||||
|
// call_status, remainder_date, remarks, created_date, is_processed, updated_agent |
||||
|
String complaint_number = detail.get("complaint_number").toString(); |
||||
|
String complaint_date = detail.get("complaint_date").toString(); |
||||
|
String complaint_person_name = detail.get("complaint_person_name").toString(); |
||||
|
String complaint_mobilenumber = detail.get("complaint_mobilenumber").toString(); |
||||
|
String complaint_type = detail.get("complaint_type").toString(); |
||||
|
String complaint_mode = detail.get("complaint_mode").toString(); |
||||
|
String department = detail.get("department").toString(); |
||||
|
String complaint_group = detail.get("complaint_group").toString(); |
||||
|
String official_name = detail.get("official_name").toString(); |
||||
|
String official_mobilenum = detail.get("official_mobilenum").toString(); |
||||
|
String call_status = "COMPLETED"; |
||||
|
String upremarks=remarks; |
||||
|
int is_processed=1; |
||||
|
int updated_agent = Integer.parseInt(userId); |
||||
|
|
||||
|
String query = "INSERT INTO gcc_1913_qaqc.qaqc_call_logs (qaqc_id, call_category, agent_id, complaint_number, complaint_date,complaint_person_name, " |
||||
|
+ "complaint_mobilenumber, complaint_type, complaint_mode, department, complaint_group, official_name, official_mobilenum, call_status, remarks, is_processed,updated_agent) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?)"; |
||||
|
|
||||
|
rowsUpdated = jdbcTemplate.update(query, qaqc_id, call_category, agent_id, complaint_number,complaint_date, complaint_person_name, |
||||
|
complaint_mobilenumber, complaint_type, complaint_mode, department, complaint_group, official_name, official_mobilenum, call_status, upremarks, |
||||
|
is_processed,updated_agent); |
||||
|
|
||||
|
totalUpdated += rowsUpdated; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
else { |
||||
|
return 0; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
return totalUpdated; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String,Object>> getComplaintsLatestDetails(String complaint_number){ |
||||
|
|
||||
|
String query = "SELECT * FROM qaqc_upload_data_history WHERE complaint_number = ? ORDER BY created_date DESC LIMIT 1"; |
||||
|
|
||||
|
List<Map<String,Object>> getCompNumber = jdbcTemplate.queryForList(query, complaint_number); |
||||
|
|
||||
|
return getCompNumber; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,291 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
|
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
import javax.transaction.Transactional; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
public class QaqcTaskListService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
// old overalltaskcount wise method |
||||
|
|
||||
|
// public List<Map<String, Object>> getComplaintAndCallStatusCounts(String startDate, String endDate) { |
||||
|
// String sql = "SELECT " + |
||||
|
// "t1.total_tasks, " + |
||||
|
// "t2.total_calls, " + |
||||
|
// "t3.completed_calls, " + |
||||
|
// "t2.total_calls - t3.completed_calls AS pending_calls " + |
||||
|
// "FROM " + |
||||
|
// "( " + |
||||
|
// " SELECT " + |
||||
|
// " COUNT(qaqc_id) AS total_tasks " + |
||||
|
// " FROM " + |
||||
|
// " qaqc_request " + |
||||
|
// " WHERE " + |
||||
|
// " (? IS NULL OR created_date BETWEEN ? AND ?) " + |
||||
|
// ") AS t1, " + |
||||
|
// "( " + |
||||
|
// " SELECT " + |
||||
|
// " SUM(total_data) AS total_calls " + |
||||
|
// " FROM " + |
||||
|
// " qaqc_request " + |
||||
|
// " WHERE " + |
||||
|
// " (? IS NULL OR created_date BETWEEN ? AND ?) " + |
||||
|
// ") AS t2, " + |
||||
|
// "( " + |
||||
|
// " SELECT " + |
||||
|
// " SUM(qr.total_data) AS total_data, " + |
||||
|
// " COUNT(CASE WHEN qcl.qaqc_id IS NOT NULL THEN qcl.qaqc_id END) AS completed_calls " + |
||||
|
// " FROM " + |
||||
|
// " qaqc_request qr " + |
||||
|
// " LEFT JOIN " + |
||||
|
// " qaqc_call_logs qcl " + |
||||
|
// " ON " + |
||||
|
// " qr.qaqc_id = qcl.qaqc_id " + |
||||
|
// " WHERE " + |
||||
|
// " (? IS NULL OR qcl.created_date BETWEEN ? AND ?) " + |
||||
|
// ") AS t3;"; |
||||
|
// |
||||
|
// // Prepare the parameters for the query |
||||
|
// Object[] params = new Object[] { |
||||
|
// startDate, startDate, endDate, |
||||
|
// startDate, startDate, endDate, |
||||
|
// startDate, startDate, endDate |
||||
|
// }; |
||||
|
// |
||||
|
// // Execute the query and return the results as a List of Maps |
||||
|
// return jdbcTemplate.queryForList(sql, params); |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
|
||||
|
//updated overalltaskcount method |
||||
|
public List<Map<String, Object>> getComplaintAndCallStatusCounts(String startDate, String endDate) { |
||||
|
// Start constructing the SQL query dynamically |
||||
|
StringBuilder sql = new StringBuilder(); |
||||
|
sql.append("SELECT ") |
||||
|
.append("t1.total_tasks, ") |
||||
|
.append("t2.total_calls, ") |
||||
|
.append("t3.completed_calls, ") |
||||
|
.append("t2.total_calls - t3.completed_calls AS pending_calls, ") |
||||
|
.append("t4.no_of_agents ") |
||||
|
.append("FROM ") |
||||
|
.append("( ") |
||||
|
.append(" SELECT ") |
||||
|
.append(" COUNT(qaqc_id) AS total_tasks ") |
||||
|
.append(" FROM ") |
||||
|
.append(" qaqc_request qr "); |
||||
|
|
||||
|
// Adding dynamic WHERE conditions for date range if provided |
||||
|
if (startDate != null && endDate != null) { |
||||
|
sql.append("WHERE DATE(qr.created_date) >= ? AND DATE(qr.created_date) <= ? "); |
||||
|
} |
||||
|
|
||||
|
sql.append(") AS t1, ") |
||||
|
.append("( ") |
||||
|
.append(" SELECT ") |
||||
|
.append(" SUM(aa.data_count) AS total_calls ") |
||||
|
.append(" FROM ") |
||||
|
.append(" agent_assigned aa ") |
||||
|
.append(" INNER JOIN ") |
||||
|
.append(" qaqc_request qr ") |
||||
|
.append(" ON ") |
||||
|
.append(" aa.qaqc_id = qr.qaqc_id "); |
||||
|
|
||||
|
if (startDate != null && endDate != null) { |
||||
|
sql.append("WHERE DATE(qr.created_date) >= ? AND DATE(qr.created_date) <= ? "); |
||||
|
} |
||||
|
|
||||
|
sql.append(") AS t2, ") |
||||
|
.append("( ") |
||||
|
.append(" SELECT ") |
||||
|
.append(" SUM(qr.total_data) AS total_data, ") |
||||
|
.append(" COUNT(CASE WHEN qcl.call_status IS NOT NULL THEN qcl.qaqc_id END) AS completed_calls ") |
||||
|
.append(" FROM ") |
||||
|
.append(" qaqc_request qr ") |
||||
|
.append(" LEFT JOIN ") |
||||
|
.append(" qaqc_upload_data_history qcl ") |
||||
|
.append(" ON ") |
||||
|
.append(" qr.qaqc_id = qcl.qaqc_id "); |
||||
|
|
||||
|
if (startDate != null && endDate != null) { |
||||
|
sql.append("WHERE DATE(qcl.created_date) >= ? AND DATE(qcl.created_date) <= ? "); |
||||
|
} |
||||
|
|
||||
|
sql.append(") AS t3, ") |
||||
|
.append("( ") |
||||
|
.append(" SELECT ") |
||||
|
.append(" COUNT(DISTINCT aa.agent_id) AS no_of_agents ") |
||||
|
.append(" FROM ") |
||||
|
.append(" agent_assigned aa "); |
||||
|
|
||||
|
if (startDate != null && endDate != null) { |
||||
|
sql.append("WHERE DATE(aa.created_date) >= ? AND DATE(aa.created_date) <= ? "); |
||||
|
} |
||||
|
|
||||
|
sql.append(") AS t4;"); |
||||
|
|
||||
|
// Prepare the parameters dynamically based on the presence of the date range |
||||
|
List<Object> params = new ArrayList<>(); |
||||
|
if (startDate != null && endDate != null) { |
||||
|
params.add(startDate); |
||||
|
params.add(endDate); |
||||
|
params.add(startDate); |
||||
|
params.add(endDate); |
||||
|
params.add(startDate); |
||||
|
params.add(endDate); |
||||
|
params.add(startDate); |
||||
|
params.add(endDate); |
||||
|
} |
||||
|
|
||||
|
// Execute the query and return the results as a List of Maps |
||||
|
return jdbcTemplate.queryForList(sql.toString(), params.toArray()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
//old taskwise querymethod |
||||
|
|
||||
|
// public List<Map<String, Object>> getTaskwiseData(String startDate, String endDate) { |
||||
|
// // Base query |
||||
|
// StringBuilder query = new StringBuilder( |
||||
|
// "SELECT " + |
||||
|
// " qr.taskid, " + |
||||
|
// " MAX(qr.total_data) AS Assigned, " + |
||||
|
// " MAX(qr.created_date) AS TaskCreatedDate, " + |
||||
|
// " COUNT(CASE WHEN acl.qaqc_id IS NOT NULL THEN qr.qaqc_id END) AS TotalCompleted, " + |
||||
|
// " MAX(qr.total_data) - COUNT(CASE WHEN acl.qaqc_id IS NOT NULL THEN qr.qaqc_id END) AS Pending, " + // Pending calculated as Assigned - TotalCompleted |
||||
|
// " COUNT(CASE WHEN acl.call_status = 'COMPLETED' THEN 1 END) AS Completed, " + |
||||
|
// " COUNT(CASE WHEN acl.call_status = 'REOPENED' THEN 1 END) AS Reopened, " + |
||||
|
// " COUNT(CASE WHEN acl.call_status = 'FOLLOWUP' THEN 1 END) AS Followup " + |
||||
|
// "FROM qaqc_request qr " + |
||||
|
// "LEFT JOIN qaqc_call_logs acl " + |
||||
|
// "ON qr.qaqc_id = acl.qaqc_id " |
||||
|
// ); |
||||
|
// |
||||
|
// // Adding dynamic WHERE conditions for date range |
||||
|
// if (startDate != null && endDate != null) { |
||||
|
// query.append("WHERE qr.created_date BETWEEN ? AND ? "); |
||||
|
// } |
||||
|
// |
||||
|
// // Grouping by taskid |
||||
|
// query.append("GROUP BY qr.taskid"); |
||||
|
// |
||||
|
// // Query Execution |
||||
|
// if (startDate != null && endDate != null) { |
||||
|
// return jdbcTemplate.queryForList(query.toString(), startDate, endDate); |
||||
|
// } else { |
||||
|
// return jdbcTemplate.queryForList(query.toString()); |
||||
|
// } |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
//updated taskwisedata query method |
||||
|
|
||||
|
public List<Map<String, Object>> getTaskwiseData(String startDate, String endDate) { |
||||
|
// Base query with subqueries for Assigned and Pending calculations |
||||
|
StringBuilder query = new StringBuilder( |
||||
|
"SELECT " + |
||||
|
" qr.qaqc_id, " + |
||||
|
" qr.taskid, " + |
||||
|
" qr.call_category, " + |
||||
|
" qr.description, " + |
||||
|
" (" + |
||||
|
" SELECT SUM(aa.data_count) " + |
||||
|
" FROM agent_assigned aa " + |
||||
|
" WHERE aa.qaqc_id = qr.qaqc_id" + |
||||
|
" ) AS Assigned, " + |
||||
|
" MAX(DATE(qr.created_date)) AS TaskCreatedDate, " + |
||||
|
" COUNT(CASE WHEN acl.call_status IS NOT NULL THEN acl.qaqc_id END) AS TotalCompleted, " + |
||||
|
" (" + |
||||
|
" SELECT SUM(aa.data_count) " + |
||||
|
" FROM agent_assigned aa " + |
||||
|
" WHERE aa.qaqc_id = qr.qaqc_id" + |
||||
|
" ) - COUNT(CASE WHEN acl.call_status IS NOT NULL THEN acl.qaqc_id END) AS Pending, " + |
||||
|
" COUNT(CASE WHEN acl.call_status IN ('COMPLETED', 'FOLLOWUP_COMPLETED') THEN 1 END) AS Completed, " + |
||||
|
" COUNT(CASE WHEN acl.call_status = 'REOPEN' THEN 1 END) AS Reopened, " + |
||||
|
" COUNT(CASE WHEN acl.call_status = 'FOLLOWUP' THEN 1 END) AS Followup, " + |
||||
|
" COUNT(CASE WHEN acl.call_status NOT IN ('COMPLETED', 'FOLLOWUP_COMPLETED', 'REOPEN', 'FOLLOWUP') THEN 1 ELSE NULL END) AS Others " + |
||||
|
"FROM qaqc_request qr " + |
||||
|
"LEFT JOIN qaqc_upload_data_history acl " + |
||||
|
"ON qr.qaqc_id = acl.qaqc_id " |
||||
|
); |
||||
|
|
||||
|
// Adding dynamic WHERE conditions for date range if provided |
||||
|
if (startDate != null && endDate != null) { |
||||
|
query.append("WHERE DATE(qr.created_date) >= ? AND DATE(qr.created_date) <= ? "); |
||||
|
} |
||||
|
|
||||
|
// Grouping by taskid and qaqc_id to calculate Assigned and Pending |
||||
|
query.append("GROUP BY qr.taskid, qr.qaqc_id "); |
||||
|
|
||||
|
// Adding ORDER BY clause for descending order of created_date |
||||
|
query.append("ORDER BY TaskCreatedDate DESC, qr.qaqc_id DESC"); |
||||
|
|
||||
|
// Query execution with parameters for start and end dates if available |
||||
|
if (startDate != null && endDate != null) { |
||||
|
return jdbcTemplate.queryForList(query.toString(), startDate, endDate); |
||||
|
} else { |
||||
|
return jdbcTemplate.queryForList(query.toString()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getAgentwiseData(String qaqc_id) { |
||||
|
|
||||
|
String query= "SELECT DISTINCT \r\n" |
||||
|
+ " al.agent_id,\r\n" |
||||
|
+ " al.agent_name AS agentName,\r\n" |
||||
|
+ " qr.taskid AS taskId,\r\n" |
||||
|
+ " qr.fromdate AS fromdate,\r\n" |
||||
|
+ " qr.todate AS todate,\r\n" |
||||
|
+ " qr.description AS description,\r\n" |
||||
|
+ " qr.call_category AS call_category,\r\n" |
||||
|
+ " qr.complaint_region AS complaint_region,\r\n" |
||||
|
+ " qr.complaint_group AS complaint_group,\r\n" |
||||
|
+ " qr.complaint_type AS complaint_type,\r\n" |
||||
|
+ " qr.complaint_mode AS complaint_mode,\r\n" |
||||
|
+ " qr.complaint_zone AS complaint_zone,\r\n" |
||||
|
+ " DATE(qr.created_date) AS TaskCreatedDate,\r\n" |
||||
|
+ " aa.data_count AS assigned,\r\n" |
||||
|
+ " COUNT(lcl.call_status) AS callstaken,\r\n" |
||||
|
+ " (aa.data_count - COUNT(lcl.call_status)) AS pending,\r\n" |
||||
|
+ " ROUND((COUNT(lcl.call_status) / aa.data_count) * 100, 2) AS percentage,\r\n" |
||||
|
+ " COUNT(CASE WHEN lcl.call_status IN ('COMPLETED', 'FOLLOWUP_COMPLETED') THEN 1 END) AS Completed,\r\n" |
||||
|
+ " COUNT(CASE WHEN lcl.call_status = 'REOPEN' THEN 1 END) AS Reopened,\r\n" |
||||
|
+ " COUNT(CASE WHEN lcl.call_status = 'FOLLOWUP' THEN 1 END) AS Followup,\r\n" |
||||
|
+ " COUNT(CASE WHEN lcl.call_status NOT IN ('COMPLETED', 'FOLLOWUP_COMPLETED', 'REOPEN', 'FOLLOWUP') THEN 1 END) AS Others\r\n" |
||||
|
+ "FROM qaqc_request qr\r\n" |
||||
|
+ "JOIN agent_assigned aa ON aa.qaqc_id = qr.qaqc_id\r\n" |
||||
|
+ "JOIN agents_list al ON al.agent_id = aa.agent_id\r\n" |
||||
|
+ "LEFT JOIN qaqc_upload_data_history lcl ON qr.qaqc_id = lcl.qaqc_id AND al.agent_id = lcl.agent_id \r\n" |
||||
|
+ "WHERE qr.qaqc_id = ?\r\n" |
||||
|
+ "GROUP BY al.agent_id, al.agent_name, aa.data_count"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query, qaqc_id); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,361 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.HashSet; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.Objects; |
||||
|
import java.util.Set; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
public class ScpService { |
||||
|
|
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysqlScpDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// Method to enrich report data with questions_part |
||||
|
public List<Map<String, Object>> enrichScpReportWithQuestions(List<Map<String, Object>> reportData) { |
||||
|
|
||||
|
// Step 1: Fetch all questions |
||||
|
String questionSql = "SELECT id AS question_id, questions AS question, answer_type, isactive, isdelete FROM questions WHERE isactive=1 AND isdelete=0"; |
||||
|
List<Map<String, Object>> questionList = jdbcTemplate.queryForList(questionSql); |
||||
|
|
||||
|
// Step 2: Fetch all answers (master answers) |
||||
|
String answerSql = "SELECT question_id, answer FROM answers WHERE isactive=1 AND isdelete=0"; |
||||
|
List<Map<String, Object>> answerList = jdbcTemplate.queryForList(answerSql); |
||||
|
|
||||
|
// Convert answerList to Map<question_id, List<String>> for easy mapping |
||||
|
Map<Integer, List<String>> answerMasterMap = new HashMap<>(); |
||||
|
for (Map<String, Object> ans : answerList) { |
||||
|
Integer qid = (Integer) ans.get("question_id"); |
||||
|
String answerVal = (String) ans.get("answer"); |
||||
|
answerMasterMap.computeIfAbsent(qid, k -> new ArrayList<>()).add(answerVal); |
||||
|
} |
||||
|
/* |
||||
|
// Step 3: Fetch all scp_report entries for these scp_ids |
||||
|
List<Long> scpIds = reportData.stream() |
||||
|
.map(d -> ((Number) d.get("id")).longValue()) |
||||
|
.collect(Collectors.toList()); |
||||
|
|
||||
|
// Step 4: Get existing scp_ids from scp_report |
||||
|
Set<Long> existingScpIds = new HashSet<>(); |
||||
|
if (!scpIds.isEmpty()) { |
||||
|
String inClause = scpIds.stream().map(id -> "?").collect(Collectors.joining(",")); |
||||
|
String sql = "SELECT DISTINCT scp_id FROM scp_report WHERE isactive=1 AND isdelete=0 AND scp_id IN (" + inClause + ")"; |
||||
|
List<Map<String, Object>> existingList = jdbcTemplate.queryForList(sql, scpIds.toArray()); |
||||
|
for (Map<String, Object> row : existingList) { |
||||
|
existingScpIds.add(((Number) row.get("scp_id")).longValue()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Step 5: Filter out already answered scp_ids |
||||
|
List<Map<String, Object>> filteredReportData = reportData.stream() |
||||
|
.filter(d -> !existingScpIds.contains(((Number) d.get("id")).longValue())) |
||||
|
.collect(Collectors.toList()); |
||||
|
*/ |
||||
|
// Step 3: Fetch all scp_report entries for these scp_ids |
||||
|
List<Long> scpIds = new ArrayList<Long>(); |
||||
|
for (Map<String, Object> d : reportData) { |
||||
|
Object idObj = d.get("id"); |
||||
|
if (idObj instanceof Number) { |
||||
|
scpIds.add(((Number) idObj).longValue()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Step 4: Get existing scp_ids from scp_report |
||||
|
Set<Long> existingScpIds = new HashSet<Long>(); |
||||
|
if (!scpIds.isEmpty()) { |
||||
|
// Build the IN clause placeholders |
||||
|
StringBuilder inClause = new StringBuilder(); |
||||
|
for (int i = 0; i < scpIds.size(); i++) { |
||||
|
if (i > 0) inClause.append(","); |
||||
|
inClause.append("?"); |
||||
|
} |
||||
|
|
||||
|
String sql = "SELECT DISTINCT scp_id FROM scp_report WHERE isactive=1 AND isdelete=0 AND scp_id IN (" |
||||
|
+ inClause.toString() + ")"; |
||||
|
List<Map<String, Object>> existingList = jdbcTemplate.queryForList(sql, scpIds.toArray()); |
||||
|
for (Map<String, Object> row : existingList) { |
||||
|
Object scpIdObj = row.get("scp_id"); |
||||
|
if (scpIdObj instanceof Number) { |
||||
|
existingScpIds.add(((Number) scpIdObj).longValue()); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Step 5: Filter out already answered scp_ids |
||||
|
List<Map<String, Object>> filteredReportData = new ArrayList<Map<String, Object>>(); |
||||
|
for (Map<String, Object> d : reportData) { |
||||
|
Object idObj = d.get("id"); |
||||
|
if (idObj instanceof Number) { |
||||
|
Long id = ((Number) idObj).longValue(); |
||||
|
if (!existingScpIds.contains(id)) { |
||||
|
filteredReportData.add(d); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Step 6: Attach questions only to the filtered list |
||||
|
for (Map<String, Object> report : filteredReportData) { |
||||
|
Long scpId = ((Number) report.get("id")).longValue(); |
||||
|
List<Map<String, Object>> questionsPart = new ArrayList<>(); |
||||
|
|
||||
|
for (Map<String, Object> question : questionList) { |
||||
|
Integer qid = (Integer) question.get("question_id"); |
||||
|
|
||||
|
Map<String, Object> questionPart = new HashMap<>(); |
||||
|
questionPart.put("question_id", qid); |
||||
|
questionPart.put("question", question.get("question")); |
||||
|
questionPart.put("answer_type", question.get("answer_type")); |
||||
|
questionPart.put("answer_master", answerMasterMap.getOrDefault(qid, Collections.emptyList())); |
||||
|
|
||||
|
// Empty answers since these scp_ids don’t exist yet |
||||
|
Map<String, Object> answersMap = new HashMap<>(); |
||||
|
answersMap.put("scp_id", scpId); |
||||
|
answersMap.put("question_id", qid); |
||||
|
answersMap.put("answer", null); |
||||
|
answersMap.put("agent_id", null); |
||||
|
|
||||
|
questionPart.put("answers", answersMap); |
||||
|
questionsPart.add(questionPart); |
||||
|
} |
||||
|
|
||||
|
report.put("questions_part", questionsPart); |
||||
|
} |
||||
|
|
||||
|
return filteredReportData; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// public boolean saveAnswers(List<Map<String, Object>> answers) { |
||||
|
// if (answers == null || answers.isEmpty()) return false; |
||||
|
// |
||||
|
// String sql = "INSERT INTO scp_report (scp_id, question_id, answer, agent_id, zone, ward, streetid, street_name, last_feedback_date) " |
||||
|
// + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
||||
|
// |
||||
|
// int[][] result = jdbcTemplate.batchUpdate(sql, answers, answers.size(), (ps, answer) -> { |
||||
|
// |
||||
|
// // Convert safely to String or Integer |
||||
|
// String scpIdStr = getSafeString(answer.get("scp_id")); |
||||
|
// String questionIdStr = getSafeString(answer.get("question_id")); |
||||
|
// String answerStr = getSafeString(answer.get("answer")); |
||||
|
// String agentIdStr = getSafeString(answer.get("agent_id")); |
||||
|
// String zone = getSafeString(answer.get("zone")); |
||||
|
// String ward = getSafeString(answer.get("ward")); |
||||
|
// String streetId = getSafeString(answer.get("street_id")); |
||||
|
// String streetName = getSafeString(answer.get("street_name")); |
||||
|
// String lastFeedback = getSafeString(answer.get("lastfeedback")); |
||||
|
// |
||||
|
// // Parse integers only if not null |
||||
|
// Integer scpId = (scpIdStr != null) ? Integer.parseInt(scpIdStr) : null; |
||||
|
// Integer questionId = (questionIdStr != null) ? Integer.parseInt(questionIdStr) : null; |
||||
|
// Integer agentId = (agentIdStr != null) ? Integer.parseInt(agentIdStr) : null; |
||||
|
// |
||||
|
// // Set parameters |
||||
|
// ps.setObject(1, scpId); |
||||
|
// ps.setObject(2, questionId); |
||||
|
// ps.setObject(3, answerStr); |
||||
|
// ps.setObject(4, agentId); |
||||
|
// ps.setObject(5, zone); |
||||
|
// ps.setObject(6, ward); |
||||
|
// ps.setObject(7, streetId); |
||||
|
// ps.setObject(8, streetName); |
||||
|
// ps.setObject(9, lastFeedback); |
||||
|
// }); |
||||
|
// |
||||
|
// return result.length > 0; |
||||
|
// } |
||||
|
|
||||
|
public String saveAnswers(List<Map<String, Object>> answers) { |
||||
|
if (answers == null || answers.isEmpty()) return "error"; |
||||
|
/* |
||||
|
// Step 1: Extract unique scp_ids from the list |
||||
|
List<Integer> scpIds = answers.stream() |
||||
|
.map(a -> { |
||||
|
String idStr = getSafeString(a.get("scp_id")); |
||||
|
return (idStr != null) ? Integer.parseInt(idStr) : null; |
||||
|
}) |
||||
|
.filter(Objects::nonNull) |
||||
|
.distinct() |
||||
|
.toList(); |
||||
|
*/ |
||||
|
// Step 1: Extract unique scp_ids from the list |
||||
|
List<Integer> scpIds = new ArrayList<Integer>(); |
||||
|
Set<Integer> uniqueIds = new HashSet<Integer>(); |
||||
|
|
||||
|
for (Map<String, Object> a : answers) { |
||||
|
Object scpIdObj = a.get("scp_id"); |
||||
|
String idStr = getSafeString(scpIdObj); |
||||
|
if (idStr != null) { |
||||
|
try { |
||||
|
Integer id = Integer.parseInt(idStr); |
||||
|
if (!uniqueIds.contains(id)) { |
||||
|
uniqueIds.add(id); |
||||
|
scpIds.add(id); |
||||
|
} |
||||
|
} catch (NumberFormatException e) { |
||||
|
// Skip invalid numbers |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Step 2: Check if any of these scp_ids already exist in DB |
||||
|
String checkSql = "SELECT COUNT(*) FROM scp_report WHERE scp_id IN (:ids)"; |
||||
|
Map<String, Object> params = new HashMap<>(); |
||||
|
params.put("ids", scpIds); |
||||
|
|
||||
|
NamedParameterJdbcTemplate namedJdbc = new NamedParameterJdbcTemplate(jdbcTemplate); |
||||
|
Integer count = namedJdbc.queryForObject(checkSql, params, Integer.class); |
||||
|
|
||||
|
if (count != null && count > 0) { |
||||
|
// Duplicate found — stop processing |
||||
|
return "duplicate"; |
||||
|
} |
||||
|
|
||||
|
// Step 3: Insert new answers |
||||
|
String insertSql = "INSERT INTO scp_report (scp_id, question_id, answer, agent_id, zone, ward, streetid, street_name, last_feedback_date) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
||||
|
|
||||
|
int[][] result = jdbcTemplate.batchUpdate(insertSql, answers, answers.size(), (ps, answer) -> { |
||||
|
String scpIdStr = getSafeString(answer.get("scp_id")); |
||||
|
String questionIdStr = getSafeString(answer.get("question_id")); |
||||
|
String answerStr = getSafeString(answer.get("answer")); |
||||
|
String agentIdStr = getSafeString(answer.get("agent_id")); |
||||
|
String zone = getSafeString(answer.get("zone")); |
||||
|
String ward = getSafeString(answer.get("ward")); |
||||
|
String streetId = getSafeString(answer.get("street_id")); |
||||
|
String streetName = getSafeString(answer.get("street_name")); |
||||
|
String lastFeedback = getSafeString(answer.get("lastfeedback")); |
||||
|
|
||||
|
Integer scpId = (scpIdStr != null) ? Integer.parseInt(scpIdStr) : null; |
||||
|
Integer questionId = (questionIdStr != null) ? Integer.parseInt(questionIdStr) : null; |
||||
|
Integer agentId = (agentIdStr != null) ? Integer.parseInt(agentIdStr) : null; |
||||
|
|
||||
|
ps.setObject(1, scpId); |
||||
|
ps.setObject(2, questionId); |
||||
|
ps.setObject(3, answerStr); |
||||
|
ps.setObject(4, agentId); |
||||
|
ps.setObject(5, zone); |
||||
|
ps.setObject(6, ward); |
||||
|
ps.setObject(7, streetId); |
||||
|
ps.setObject(8, streetName); |
||||
|
ps.setObject(9, lastFeedback); |
||||
|
}); |
||||
|
|
||||
|
return (result.length > 0) ? "success" : "error"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// Helper method |
||||
|
private String getSafeString(Object val) { |
||||
|
if (val == null) return null; |
||||
|
String s = val.toString().trim(); |
||||
|
return s.isEmpty() ? null : s; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getZoneWiseReportData() { |
||||
|
String sql = "SELECT " |
||||
|
+ "sr.zone," |
||||
|
+ " COALESCE(COUNT(DISTINCT sr.scp_id), 0) AS Completed," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Yes' THEN 1 ELSE 0 END) AS YesCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'No' THEN 1 ELSE 0 END) AS NoCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Available' THEN 1 ELSE 0 END) AS AvailableCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Not Available' THEN 1 ELSE 0 END) AS NotAvailableCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Image Not Clear' THEN 1 ELSE 0 END) AS ImageNotClearCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Yes,it is in good condition' THEN 1 ELSE 0 END) AS LidGoodYesCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'No,it is not in good condition' THEN 1 ELSE 0 END) AS LidGoodNoCount" |
||||
|
+ " FROM scp_report sr" |
||||
|
+ " WHERE sr.isactive = 1 AND sr.isdelete = 0" |
||||
|
+ " GROUP BY sr.zone" |
||||
|
+ " ORDER BY sr.zone"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sql); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getWardWiseReportData(String zone) { |
||||
|
String sql = "SELECT " |
||||
|
+ "sr.zone," |
||||
|
+ "sr.ward," |
||||
|
+ " COALESCE(COUNT(DISTINCT sr.scp_id), 0) AS Completed," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Yes' THEN 1 ELSE 0 END) AS YesCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'No' THEN 1 ELSE 0 END) AS NoCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Available' THEN 1 ELSE 0 END) AS AvailableCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Not Available' THEN 1 ELSE 0 END) AS NotAvailableCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Image Not Clear' THEN 1 ELSE 0 END) AS ImageNotClearCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Yes,it is in good condition' THEN 1 ELSE 0 END) AS LidGoodYesCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'No,it is not in good condition' THEN 1 ELSE 0 END) AS LidGoodNoCount" |
||||
|
+ " FROM scp_report sr" |
||||
|
+ " WHERE sr.isactive = 1 AND sr.isdelete = 0 AND sr.zone= ?" |
||||
|
+ " GROUP BY sr.zone,sr.ward" |
||||
|
+ " ORDER BY sr.zone,sr.ward"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sql,zone); |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getStreetWiseReportData(String zone,String ward) { |
||||
|
String sql = "SELECT " |
||||
|
+ "sr.zone," |
||||
|
+ "sr.ward," |
||||
|
+ "sr.streetid," |
||||
|
+ " COALESCE(COUNT(DISTINCT sr.scp_id), 0) AS Completed," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Yes' THEN 1 ELSE 0 END) AS YesCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'No' THEN 1 ELSE 0 END) AS NoCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Available' THEN 1 ELSE 0 END) AS AvailableCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Not Available' THEN 1 ELSE 0 END) AS NotAvailableCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Image Not Clear' THEN 1 ELSE 0 END) AS ImageNotClearCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Yes,it is in good condition' THEN 1 ELSE 0 END) AS LidGoodYesCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'No,it is not in good condition' THEN 1 ELSE 0 END) AS LidGoodNoCount" |
||||
|
+ " FROM scp_report sr" |
||||
|
+ " WHERE sr.isactive = 1 AND sr.isdelete = 0 AND sr.zone=? AND sr.ward=?" |
||||
|
+ " GROUP BY sr.streetid, sr.street_name,sr.zone,sr.ward" |
||||
|
+ " ORDER BY sr.zone,sr.ward,sr.streetid"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sql,zone,ward); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String,Object>> getdetailreport(String startDate, String endDate) { |
||||
|
|
||||
|
|
||||
|
String sql = "SELECT " |
||||
|
+ "sr.zone," |
||||
|
+ "sr.ward," |
||||
|
+ "sr.street_name," |
||||
|
+ " COALESCE(COUNT(DISTINCT sr.scp_id), 0) AS Completed," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Yes' THEN 1 ELSE 0 END) AS YesCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'No' THEN 1 ELSE 0 END) AS NoCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Available' THEN 1 ELSE 0 END) AS AvailableCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Not Available' THEN 1 ELSE 0 END) AS NotAvailableCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Image Not Clear' THEN 1 ELSE 0 END) AS ImageNotClearCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'Yes,it is in good condition' THEN 1 ELSE 0 END) AS LidGoodYesCount," |
||||
|
+ " SUM(CASE WHEN sr.answer = 'No,it is not in good condition' THEN 1 ELSE 0 END) AS LidGoodNoCount" |
||||
|
+ " FROM scp_report sr" |
||||
|
+ " WHERE sr.isactive = 1 AND sr.isdelete = 0 AND DATE(sr.created_date) BETWEEN ? AND ?" |
||||
|
+ " GROUP BY sr.streetid, sr.street_name,sr.zone,sr.ward" |
||||
|
+ " ORDER BY sr.zone,sr.ward,sr.streetid"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sql,startDate,endDate); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,822 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import java.time.LocalDateTime; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Base64; |
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.awt.image.BufferedImage; |
||||
|
import java.io.BufferedReader; |
||||
|
import java.io.ByteArrayInputStream; |
||||
|
import java.io.ByteArrayOutputStream; |
||||
|
import java.io.IOException; |
||||
|
import java.io.InputStream; |
||||
|
import java.io.InputStreamReader; |
||||
|
import java.io.OutputStream; |
||||
|
import java.net.HttpURLConnection; |
||||
|
import java.net.URL; |
||||
|
import java.net.URLConnection; |
||||
|
import java.net.URLEncoder; |
||||
|
import java.nio.charset.StandardCharsets; |
||||
|
import java.nio.file.Files; |
||||
|
import java.nio.file.Path; |
||||
|
import java.nio.file.Paths; |
||||
|
import java.sql.Timestamp; |
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.time.LocalDate; |
||||
|
import java.util.HashMap; |
||||
|
|
||||
|
import javax.imageio.ImageIO; |
||||
|
import javax.imageio.ImageWriteParam; |
||||
|
import javax.imageio.ImageWriter; |
||||
|
import javax.imageio.stream.ImageOutputStream; |
||||
|
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.transaction.annotation.Transactional; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import com.fasterxml.jackson.databind.JsonNode; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.vendor.service.DateTimeUtil; |
||||
|
|
||||
|
@Service |
||||
|
@Transactional |
||||
|
public class SocialMediaService { |
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysql1913QAQCDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
@Qualifier("vendorDateTimeUtil") |
||||
|
private DateTimeUtil dateTimeUtil; |
||||
|
|
||||
|
private final Environment environment; |
||||
|
|
||||
|
private String fileBaseUrl; |
||||
|
|
||||
|
public SocialMediaService(Environment environment,RestTemplate restTemplate) { |
||||
|
this.restTemplate=restTemplate; |
||||
|
this.environment = environment; |
||||
|
this.fileBaseUrl = environment.getProperty("fileBaseUrl"); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public int uploadComplaintDetailsInLogs(Map<String, Object> details,String action,String remarks,int updated_agent,String remainderDate) { |
||||
|
//System.out.println("Complaint Details: " + details); |
||||
|
// Extract other field values from complaintDetails |
||||
|
String complaintNumber = details.get("complaintid").toString(); |
||||
|
String complaintDate = details.get("complaintdate").toString(); |
||||
|
String personName = details.get("complainantName").toString(); |
||||
|
String personMobNo = details.get("mobileNumber").toString(); |
||||
|
String cType = details.get("complaintType").toString(); |
||||
|
String cMode = details.get("compmode").toString(); |
||||
|
String department = details.get("deptname").toString(); |
||||
|
String officialName = details.get("Officialname").toString(); |
||||
|
String officialMobileNum = details.get("OfficialMobile").toString(); |
||||
|
String callStatus = action; |
||||
|
String remarksfield = remarks; |
||||
|
String zone = details.get("Zone").toString(); |
||||
|
int updated_by=updated_agent; |
||||
|
String cur_status = details.get("currentStatus").toString(); |
||||
|
|
||||
|
String finalremainderDate=null; |
||||
|
if(!remainderDate.isEmpty()) { |
||||
|
finalremainderDate=remainderDate; |
||||
|
} |
||||
|
|
||||
|
LocalDateTime currentDate = LocalDateTime.now(); |
||||
|
|
||||
|
String query = "INSERT INTO gcc_1913_qaqc.social_media_completed (complaint_number,zone,complaint_date, complaint_person_name,remarks, " |
||||
|
+ "complaint_mobilenumber, complaint_type, complaint_mode, department, official_name,official_mobilenum, call_status,created_date,updated_by,cur_status,remainder_date) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?)"; |
||||
|
|
||||
|
int rowsAffected = jdbcTemplate.update(query, complaintNumber,zone, complaintDate,personName,remarksfield, |
||||
|
personMobNo, cType, cMode, department, officialName, officialMobileNum,callStatus, |
||||
|
currentDate,updated_by,cur_status,finalremainderDate); |
||||
|
//System.out.println("Rows Inserted in table : " + rowsAffected); |
||||
|
|
||||
|
return rowsAffected; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getdetails(String formattedFromDate, String formattedToDate, String status, String zone) { |
||||
|
StringBuilder query = new StringBuilder("SELECT *,DATE_FORMAT(remainder_date, '%d/%m/%Y') as formatted_fdate FROM gcc_1913_qaqc.social_media_completed WHERE DATE(created_date) BETWEEN ? AND ? "); |
||||
|
List<Object> params = new ArrayList<>(); |
||||
|
params.add(formattedFromDate); |
||||
|
params.add(formattedToDate); |
||||
|
|
||||
|
if (zone != null && !zone.isEmpty()) { |
||||
|
query.append(" AND zone = ?"); |
||||
|
params.add(zone); |
||||
|
} |
||||
|
|
||||
|
if (status != null && !status.equals("ALL")) { |
||||
|
query.append(" AND call_status = ?"); |
||||
|
params.add(status); |
||||
|
} |
||||
|
|
||||
|
// Execute the query |
||||
|
List<Map<String, Object>> results = jdbcTemplate.queryForList(query.toString(), params.toArray()); |
||||
|
|
||||
|
|
||||
|
return results.isEmpty() ? null : results; |
||||
|
} |
||||
|
|
||||
|
public String getErpusernamebyId(String userId) { |
||||
|
|
||||
|
String query="SELECT erp_username FROM gcc_1913_qaqc.agents_list " |
||||
|
+ "where calling_type='SOCIALMEDIA' and agent_id=?"; |
||||
|
|
||||
|
//System.out.println("query====="+query); |
||||
|
|
||||
|
//String erpUsername = jdbcTemplate.queryForObject(query,new Object[]{userId},String.class); |
||||
|
String erpUsername = jdbcTemplate.queryForObject(query,String.class,userId); |
||||
|
|
||||
|
return erpUsername; |
||||
|
} |
||||
|
|
||||
|
public String get1913AdminErpusernamebyId(String userId) { |
||||
|
|
||||
|
String query="SELECT erp_username FROM gcc_1913_qaqc.agents_list " |
||||
|
+ "where agent_id=?"; |
||||
|
|
||||
|
//System.out.println("query====="+query); |
||||
|
|
||||
|
//String erpUsername = jdbcTemplate.queryForObject(query,new Object[]{userId},String.class); |
||||
|
String erpUsername = jdbcTemplate.queryForObject(query,String.class,userId); |
||||
|
|
||||
|
return erpUsername; |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getA1dropdowns() { |
||||
|
String sql="SELECT * FROM call_status WHERE isactive=1 AND isdelete=0 AND call_category_id=5"; |
||||
|
try { |
||||
|
return jdbcTemplate.queryForList(sql); |
||||
|
} catch (Exception ex) { |
||||
|
ex.printStackTrace(); |
||||
|
return new ArrayList<>(); // return empty list on error |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getA2dropdowns() { |
||||
|
String sql="SELECT * FROM call_status WHERE isactive=1 AND isdelete=0 AND call_category_id=6"; |
||||
|
try { |
||||
|
return jdbcTemplate.queryForList(sql); |
||||
|
} catch (Exception ex) { |
||||
|
ex.printStackTrace(); |
||||
|
return new ArrayList<>(); // return empty list on error |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public List<Map<String, Object>> getfiltreddetails(List<Map<String, Object>> details) { |
||||
|
|
||||
|
List<Map<String, Object>> followupData = getFollowupData(); |
||||
|
|
||||
|
if (followupData == null || followupData.isEmpty()) { |
||||
|
return details; |
||||
|
} |
||||
|
|
||||
|
// if(details.isEmpty()) { |
||||
|
// return details; |
||||
|
// } |
||||
|
|
||||
|
LocalDate currentDate = LocalDate.now(); |
||||
|
|
||||
|
// Store complaint_number -> followup row |
||||
|
Map<String, Map<String, Object>> followupMap = new HashMap<>(); |
||||
|
|
||||
|
for (Map<String, Object> followup : followupData) { |
||||
|
|
||||
|
String complaintNumber = String.valueOf(followup.get("complaint_number")); |
||||
|
|
||||
|
followupMap.put(complaintNumber, followup); |
||||
|
} |
||||
|
|
||||
|
List<Map<String, Object>> filteredDetails = new ArrayList<>(); |
||||
|
|
||||
|
for (Map<String, Object> detail : details) { |
||||
|
|
||||
|
String complaintNumber =String.valueOf(detail.get("Complaint Number")); |
||||
|
|
||||
|
// If complaint not in followup table |
||||
|
if (!followupMap.containsKey(complaintNumber)) { |
||||
|
|
||||
|
filteredDetails.add(detail); |
||||
|
continue; |
||||
|
} |
||||
|
|
||||
|
Map<String, Object> followupRow =followupMap.get(complaintNumber); |
||||
|
|
||||
|
String remainderDateStr =String.valueOf(followupRow.get("remainder_date")); |
||||
|
|
||||
|
LocalDate remainderDate = LocalDate.parse(remainderDateStr); |
||||
|
|
||||
|
// remainder_date <= current date |
||||
|
if (!remainderDate.isAfter(currentDate)) { |
||||
|
|
||||
|
// UPDATE is_processed = 0 |
||||
|
Integer id = (Integer) followupRow.get("id"); |
||||
|
|
||||
|
updateFollowupProcessed(id); |
||||
|
|
||||
|
filteredDetails.add(detail); |
||||
|
} |
||||
|
|
||||
|
// ELSE: |
||||
|
// remainder_date > currentDate |
||||
|
// skip / eliminate from frontend |
||||
|
} |
||||
|
|
||||
|
return filteredDetails; |
||||
|
} |
||||
|
|
||||
|
private void updateFollowupProcessed(Integer id) { |
||||
|
|
||||
|
String sql = |
||||
|
"UPDATE social_media_completed " + |
||||
|
"SET is_processed = 0 " + |
||||
|
"WHERE id = ?"; |
||||
|
|
||||
|
jdbcTemplate.update(sql, id); |
||||
|
} |
||||
|
|
||||
|
private List<Map<String, Object>> getFollowupData() { |
||||
|
String sqlQuery = "select id, complaint_number,call_status, remainder_date from social_media_completed where is_processed=1 AND call_status='FOLLOWUP'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sqlQuery); |
||||
|
} |
||||
|
|
||||
|
public Map<String, Object> checkRegisteredComplaint(String complaintNumber) { |
||||
|
|
||||
|
Map<String, Object> result = new HashMap<>(); |
||||
|
|
||||
|
String sql = "SELECT is_processed " |
||||
|
+ " FROM socialmedia_reg_completed " |
||||
|
+ " WHERE complaint_number = ? AND isactive=1 AND isdelete=0 " |
||||
|
+ " LIMIT 1"; |
||||
|
|
||||
|
List<Map<String, Object>> list = |
||||
|
jdbcTemplate.queryForList(sql, complaintNumber); |
||||
|
|
||||
|
// Case 1 |
||||
|
if (list.isEmpty()) { |
||||
|
result.put("status", "NOT_FOUND"); |
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
Boolean isProcessed = (Boolean) list.get(0).get("is_processed"); |
||||
|
|
||||
|
if (!isProcessed) { |
||||
|
result.put("status", "PENDING_APPROVAL"); |
||||
|
} else { |
||||
|
result.put("status", "PROCESSED"); |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
public Map<String, Object> submitRegClosingComplaint( |
||||
|
String complaintNumber, |
||||
|
String remarks, |
||||
|
MultipartFile resolvedImage, |
||||
|
String cby) { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
Integer loginId = Integer.parseInt(cby); |
||||
|
|
||||
|
String imagePath = fileUpload(resolvedImage, "resolved_img"); |
||||
|
|
||||
|
String sql = "INSERT INTO socialmedia_reg_completed " |
||||
|
+ "(complaint_number, resolved_img, remarks, cby) " |
||||
|
+ "VALUES (?, ?, ?, ?)"; |
||||
|
|
||||
|
int rows = jdbcTemplate.update( |
||||
|
sql, |
||||
|
complaintNumber, |
||||
|
imagePath, |
||||
|
remarks, |
||||
|
loginId |
||||
|
); |
||||
|
|
||||
|
if (rows > 0) { |
||||
|
response.put("status", "SUCCESS"); |
||||
|
response.put("message", "Complaint submitted successfully for admin approval."); |
||||
|
} else { |
||||
|
response.put("status", "FAILED"); |
||||
|
response.put("message", "Unable to submit complaint."); |
||||
|
} |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
|
||||
|
e.printStackTrace(); |
||||
|
|
||||
|
response.put("status", "error"); |
||||
|
response.put("message", e.getMessage() != null |
||||
|
? e.getMessage() |
||||
|
: "Something went wrong while submitting complaint."); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
public String fileUpload(MultipartFile file, String name) { |
||||
|
|
||||
|
// Set the file path where you want to save it |
||||
|
String uploadDirectory = environment.getProperty("file.upload.directory"); |
||||
|
String serviceFolderName = environment.getProperty("socialmedia_1913_regcomp_foldername"); |
||||
|
var year = DateTimeUtil.getCurrentYear(); |
||||
|
var month = DateTimeUtil.getCurrentMonth(); |
||||
|
|
||||
|
uploadDirectory = uploadDirectory + serviceFolderName + "/" + year + "/" + month; |
||||
|
|
||||
|
try { |
||||
|
// Create directory if it doesn't exist |
||||
|
Path directoryPath = Paths.get(uploadDirectory); |
||||
|
if (!Files.exists(directoryPath)) { |
||||
|
Files.createDirectories(directoryPath); |
||||
|
} |
||||
|
|
||||
|
// Datetime string |
||||
|
String datetimetxt = DateTimeUtil.getCurrentDateTime(); |
||||
|
|
||||
|
// File name |
||||
|
String fileName = name + "_" + datetimetxt + "_" + file.getOriginalFilename(); |
||||
|
fileName = fileName.replaceAll("\\s+", ""); // Remove space on filename |
||||
|
|
||||
|
String filePath = uploadDirectory + "/" + fileName; |
||||
|
|
||||
|
String filepath_txt = "/" + serviceFolderName + "/" + year + "/" + month + "/" + fileName; |
||||
|
|
||||
|
// Create a new Path object |
||||
|
Path path = Paths.get(filePath); |
||||
|
|
||||
|
// Get the bytes of the file |
||||
|
byte[] bytes = file.getBytes(); |
||||
|
|
||||
|
|
||||
|
BufferedImage image = ImageIO.read(new ByteArrayInputStream(bytes)); |
||||
|
byte[] compressedBytes = compressImage(image, 0.5f); // Compress with 50%quality |
||||
|
|
||||
|
// Write the bytes to the file |
||||
|
Files.write(path, bytes); |
||||
|
|
||||
|
// Write the bytes to the file |
||||
|
Files.write(path, compressedBytes); |
||||
|
|
||||
|
|
||||
|
//System.out.println(filePath); |
||||
|
return filepath_txt; |
||||
|
|
||||
|
} catch (IOException e) { |
||||
|
e.printStackTrace(); |
||||
|
return "Failed to save file " + file.getOriginalFilename(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private byte[] compressImage(BufferedImage image, float quality) throws IOException { |
||||
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
||||
|
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(byteArrayOutputStream); |
||||
|
|
||||
|
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next(); |
||||
|
writer.setOutput(imageOutputStream); |
||||
|
|
||||
|
ImageWriteParam param = writer.getDefaultWriteParam(); |
||||
|
if (param.canWriteCompressed()) { |
||||
|
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); |
||||
|
param.setCompressionQuality(quality); |
||||
|
} |
||||
|
|
||||
|
writer.write(null, new javax.imageio.IIOImage(image, null, null), param); |
||||
|
|
||||
|
writer.dispose(); |
||||
|
imageOutputStream.close(); |
||||
|
|
||||
|
return byteArrayOutputStream.toByteArray(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public Map<String, Object> getDetailsByComplaintNumber(String complaintNumber) { |
||||
|
|
||||
|
Map<String, Object> resultMap = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
String url = "https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=getComplaintByID&ComplaintId=" |
||||
|
+ complaintNumber + "&imgUrlonly=yes&isQcuser=Yes&jsonResp=Yes"; |
||||
|
//System.out.println("Request URL: " + url); |
||||
|
|
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); |
||||
|
|
||||
|
if (responseEntity.getStatusCode().is2xxSuccessful()) { |
||||
|
String responseBody = responseEntity.getBody(); |
||||
|
//System.out.println("Response Body: " + responseBody); |
||||
|
|
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
JsonNode rootNode = mapper.readTree(responseBody); |
||||
|
|
||||
|
JsonNode complaintDetails = rootNode.path(0).path("ComplaintListHistory").path(0); |
||||
|
|
||||
|
String registerDate=complaintDetails.path("complaintopendate").asText("N/A"); |
||||
|
//System.out.println("registerdate====="+registerDate); |
||||
|
|
||||
|
String formattedDate = "N/A"; // Default value if parsing fails |
||||
|
|
||||
|
if (!registerDate.equals("N/A") && !registerDate.isEmpty()) { |
||||
|
try { |
||||
|
// Parse the input date string |
||||
|
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); |
||||
|
Date date = inputFormat.parse(registerDate); |
||||
|
|
||||
|
// Format the date to dd-MM-yyyy |
||||
|
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy"); |
||||
|
formattedDate = outputFormat.format(date); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); // Log exception for debugging |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (!complaintDetails.isMissingNode()) { |
||||
|
// Existing fields |
||||
|
resultMap.put("complaintid", complaintDetails.path("complaintid").asText("N/A")); |
||||
|
resultMap.put("complaintdate", formattedDate); |
||||
|
resultMap.put("complainantName", complaintDetails.path("CustomerName").asText("N/A")); |
||||
|
resultMap.put("mobileNumber", complaintDetails.path("CustomerMobile").asText("N/A")); |
||||
|
resultMap.put("complaintType", complaintDetails.path("complainttype").asText("N/A")); |
||||
|
resultMap.put("description", complaintDetails.path("complaintdetails").asText("N/A")); |
||||
|
resultMap.put("currentStatus", complaintDetails.path("complaintcurrentstatus").asText("N/A")); |
||||
|
resultMap.put("Street", complaintDetails.path("Street").asText("N/A")); |
||||
|
resultMap.put("Area", complaintDetails.path("Area").asText("N/A")); |
||||
|
resultMap.put("Landmark", complaintDetails.path("Landmark").asText("N/A")); |
||||
|
resultMap.put("Location", complaintDetails.path("Location").asText("N/A")); |
||||
|
resultMap.put("Zone", complaintDetails.path("Zone").asText("N/A")); |
||||
|
resultMap.put("Division", complaintDetails.path("Division").asText("N/A")); |
||||
|
resultMap.put("OfficialMobile", complaintDetails.path("OfficialMobile").asText("N/A")); |
||||
|
resultMap.put("gender", complaintDetails.path("GENDER").asText("N/A")); |
||||
|
resultMap.put("deptname",complaintDetails.path("DEPT_NAME").asText("N/A")); |
||||
|
resultMap.put("compmode", complaintDetails.path("COMP_MODE").asText("N/A")); |
||||
|
resultMap.put("Officialname", complaintDetails.path("Officialname").asText("N/A")); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
} else { |
||||
|
resultMap.put("error", "Failed to retrieve complaint details."); |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
resultMap.put("error", "Error processing request"); |
||||
|
} |
||||
|
|
||||
|
return resultMap; |
||||
|
} |
||||
|
|
||||
|
public Map<String, Object> getFilteredRegComps() { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
String sql = |
||||
|
"SELECT src.complaint_number, src.created_date,CONCAT('" + fileBaseUrl + "/gcc/files',src.resolved_img) AS img_full_path,al.agent_name as agent_name,src.remarks as remarks" + |
||||
|
" FROM socialmedia_reg_completed src " |
||||
|
+ " LEFT JOIN agents_list al ON al.agent_id=src.cby " + |
||||
|
"WHERE src.is_processed = 0 " + |
||||
|
"AND src.isactive = 1 " + |
||||
|
"AND src.isdelete = 0"; |
||||
|
|
||||
|
List<Map<String, Object>> dbList = jdbcTemplate.queryForList(sql); |
||||
|
|
||||
|
List<Map<String, Object>> finalList = new ArrayList<>(); |
||||
|
|
||||
|
for (Map<String, Object> row : dbList) { |
||||
|
|
||||
|
String complaintNumber = |
||||
|
String.valueOf(row.get("complaint_number")); |
||||
|
|
||||
|
Map<String, Object> complaintDetails = |
||||
|
getDetailsByComplaintNumber(complaintNumber); |
||||
|
|
||||
|
String currentStatus = |
||||
|
String.valueOf( |
||||
|
complaintDetails.getOrDefault( |
||||
|
"currentStatus", |
||||
|
"" |
||||
|
) |
||||
|
); |
||||
|
|
||||
|
//System.out.println("currentStatus==="+currentStatus); |
||||
|
|
||||
|
if ("REGISTERED".equalsIgnoreCase(currentStatus) |
||||
|
|| "FORWARDED".equalsIgnoreCase(currentStatus)) { |
||||
|
|
||||
|
Map<String, Object> resultRow = new HashMap<>(); |
||||
|
|
||||
|
resultRow.put("complaintnumber", complaintNumber); |
||||
|
//resultRow.put("submitted_date", row.get("created_date")); |
||||
|
Timestamp ts = (Timestamp) row.get("created_date"); |
||||
|
|
||||
|
SimpleDateFormat sdf = |
||||
|
new SimpleDateFormat("dd/MM/yyyy HH:mm"); |
||||
|
|
||||
|
resultRow.put("submitted_date", sdf.format(ts)); |
||||
|
|
||||
|
String img = (String) row.get("img_full_path"); |
||||
|
resultRow.put("img_full_path", img); |
||||
|
|
||||
|
String agent_name = (String) row.get("agent_name"); |
||||
|
resultRow.put("agent_name", agent_name); |
||||
|
|
||||
|
String remarks = (String) row.get("remarks"); |
||||
|
resultRow.put("remarks", remarks); |
||||
|
|
||||
|
finalList.add(resultRow); |
||||
|
|
||||
|
} else { |
||||
|
|
||||
|
String updateSql = |
||||
|
"UPDATE socialmedia_reg_completed " + |
||||
|
"SET updated_by = ?, " + |
||||
|
"updated_date = NOW(), " + |
||||
|
"isactive = 0, " + |
||||
|
"isdelete = 1 " + |
||||
|
"WHERE complaint_number = ?"; |
||||
|
|
||||
|
jdbcTemplate.update( |
||||
|
updateSql, |
||||
|
0, |
||||
|
complaintNumber |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (finalList.isEmpty()) { |
||||
|
|
||||
|
response.put("status", "nodata"); |
||||
|
response.put("message", "No registered complaints found."); |
||||
|
|
||||
|
} else { |
||||
|
|
||||
|
response.put("status", "success"); |
||||
|
response.put("details", finalList); |
||||
|
} |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
|
||||
|
e.printStackTrace(); |
||||
|
|
||||
|
response.put("status", "error"); |
||||
|
response.put("message", e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
public Map<String, Object> approveComplaint(String complaintId, String remarks, String imgFullPath, String userid) { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
Integer updated_by = Integer.parseInt(userid); |
||||
|
|
||||
|
String erp_name=get1913AdminErpusernamebyId(userid); |
||||
|
|
||||
|
boolean statusUpdated = |
||||
|
ChangeStatusInErp( |
||||
|
complaintId, |
||||
|
"ActionLevel1", |
||||
|
remarks, |
||||
|
erp_name, |
||||
|
imgFullPath); |
||||
|
|
||||
|
if (!statusUpdated) { |
||||
|
response.put("status", "FAILED"); |
||||
|
response.put("message", "Unable to move complaint to Action Level 1."); |
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
boolean statusUpdated1 = |
||||
|
ChangeStatusInErp( |
||||
|
complaintId, |
||||
|
"Close", |
||||
|
remarks, |
||||
|
erp_name, |
||||
|
""); |
||||
|
|
||||
|
if (!statusUpdated1) { |
||||
|
response.put("status", "FAILED"); |
||||
|
response.put("message", "Unable to move complaint to Close."); |
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
String sql="UPDATE socialmedia_reg_completed " |
||||
|
+ "SET is_processed = 1, " |
||||
|
+ " updated_by = ?, " |
||||
|
+ " updated_date = NOW() " |
||||
|
+ "WHERE complaint_number = ? AND isactive=1 AND isdelete=0"; |
||||
|
|
||||
|
int rows=jdbcTemplate.update(sql,updated_by,complaintId); |
||||
|
|
||||
|
if (rows > 0) { |
||||
|
response.put("status", "SUCCESS"); |
||||
|
response.put("message", "Complaint Closed successfully."); |
||||
|
} else { |
||||
|
response.put("status", "FAILED"); |
||||
|
response.put("message", "Complaint Closed,Unable to insert in logs."); |
||||
|
} |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
|
||||
|
e.printStackTrace(); |
||||
|
|
||||
|
response.put("status", "error"); |
||||
|
response.put("message", e.getMessage() != null |
||||
|
? e.getMessage() |
||||
|
: "Something went wrong while submitting complaint."); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
public boolean ChangeStatusInErp(String complaintNumber,String action ,String remarks,String erp_name,String imgFullPath) { |
||||
|
String baseUrl = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice"; |
||||
|
String status = ""; |
||||
|
|
||||
|
|
||||
|
try { |
||||
|
|
||||
|
// Determine status based on action |
||||
|
if ("ActionLevel1".equals(action)) { |
||||
|
status = "5"; |
||||
|
} else if ("Close".equals(action)) { |
||||
|
status = "11"; |
||||
|
} else { |
||||
|
return false; // Invalid action, return false |
||||
|
} |
||||
|
|
||||
|
//String img="https://gccservices.in/gccofficialapp/files/app_icon/menu/gcc_survey_icons/Cow.png"; |
||||
|
|
||||
|
// Convert image to Base64 |
||||
|
String base64Image = ""; |
||||
|
|
||||
|
if (imgFullPath != null && !imgFullPath.trim().isEmpty()) { |
||||
|
|
||||
|
URL imageUrl = new URL(imgFullPath); |
||||
|
|
||||
|
try (InputStream inputStream = imageUrl.openStream()) { |
||||
|
|
||||
|
byte[] imageBytes = inputStream.readAllBytes(); |
||||
|
|
||||
|
base64Image = |
||||
|
Base64.getEncoder().encodeToString(imageBytes); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
String postData = |
||||
|
"serviceId=" + URLEncoder.encode("UpdateComplaint", "UTF-8") |
||||
|
+ "&ComplaintId=" + URLEncoder.encode(complaintNumber, "UTF-8") |
||||
|
+ "&Message=" + URLEncoder.encode(remarks, "UTF-8") |
||||
|
+ "&UserType=Official" |
||||
|
+ "&Status=" + status |
||||
|
+ "&Comp_Image=" + URLEncoder.encode(base64Image, "UTF-8") |
||||
|
+ "&erp_username=" + URLEncoder.encode(erp_name, "UTF-8"); |
||||
|
|
||||
|
|
||||
|
System.out.println("Complaint = " + complaintNumber); |
||||
|
System.out.println("Action = " + action); |
||||
|
System.out.println("Base64 Length = " + base64Image.length()); |
||||
|
System.out.println("Post Data Length = " + postData.length()); |
||||
|
|
||||
|
return sendRequest(baseUrl, postData); |
||||
|
// return true; |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private boolean sendRequest(String urlString, String postData) { |
||||
|
|
||||
|
try { |
||||
|
URL url = new URL(urlString); |
||||
|
|
||||
|
HttpURLConnection connection = |
||||
|
(HttpURLConnection) url.openConnection(); |
||||
|
|
||||
|
|
||||
|
connection.setRequestMethod("POST"); |
||||
|
connection.setDoOutput(true); |
||||
|
|
||||
|
connection.setRequestProperty( |
||||
|
"Content-Type", |
||||
|
"application/x-www-form-urlencoded" |
||||
|
); |
||||
|
|
||||
|
//System.out.println("Method = " + connection.getRequestMethod()); |
||||
|
try (OutputStream os = connection.getOutputStream()) { |
||||
|
|
||||
|
byte[] input = postData.getBytes(StandardCharsets.UTF_8); |
||||
|
|
||||
|
os.write(input, 0, input.length); |
||||
|
} |
||||
|
|
||||
|
int responseCode = connection.getResponseCode(); |
||||
|
|
||||
|
System.out.println("Response Code = " + responseCode); |
||||
|
System.out.println("Response Message = " + connection.getResponseMessage()); |
||||
|
|
||||
|
InputStream stream; |
||||
|
|
||||
|
if (responseCode >= 200 && responseCode < 300) { |
||||
|
stream = connection.getInputStream(); |
||||
|
} else { |
||||
|
stream = connection.getErrorStream(); |
||||
|
} |
||||
|
|
||||
|
StringBuilder responseBuilder = new StringBuilder(); |
||||
|
|
||||
|
if (stream != null) { |
||||
|
|
||||
|
BufferedReader reader = |
||||
|
new BufferedReader( |
||||
|
new InputStreamReader(stream)); |
||||
|
|
||||
|
String line; |
||||
|
|
||||
|
while ((line = reader.readLine()) != null) { |
||||
|
responseBuilder.append(line); |
||||
|
} |
||||
|
|
||||
|
reader.close(); |
||||
|
} |
||||
|
|
||||
|
String response = responseBuilder.toString(); |
||||
|
|
||||
|
System.out.println("ERP Response = " + response); |
||||
|
|
||||
|
return response.contains("\"ResultStatus\": true"); |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
|
||||
|
e.printStackTrace(); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public Map<String, Object> rejectComplaint(String complaintId, String userid) { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
try { |
||||
|
Integer updated_by = Integer.parseInt(userid); |
||||
|
|
||||
|
String sql="UPDATE socialmedia_reg_completed " |
||||
|
+ "SET isactive=0,isdelete=1, " |
||||
|
+ " updated_by = ?, " |
||||
|
+ " updated_date = NOW() " |
||||
|
+ "WHERE complaint_number = ? AND isactive=1 AND isdelete=0"; |
||||
|
|
||||
|
int rows=jdbcTemplate.update(sql,updated_by,complaintId); |
||||
|
|
||||
|
|
||||
|
if (rows > 0) { |
||||
|
response.put("status", "SUCCESS"); |
||||
|
response.put("message", "Complaint Rejected successfully."); |
||||
|
} else { |
||||
|
response.put("status", "FAILED"); |
||||
|
response.put("message", "Unable to Reject the Complaint."); |
||||
|
} |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
|
||||
|
e.printStackTrace(); |
||||
|
|
||||
|
response.put("status", "error"); |
||||
|
response.put("message", e.getMessage() != null |
||||
|
? e.getMessage() |
||||
|
: "Something went wrong while submitting complaint."); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,274 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.callcenterqaqc.service; |
||||
|
|
||||
|
import java.time.LocalDate; |
||||
|
import java.time.format.DateTimeFormatter; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import com.fasterxml.jackson.databind.JsonNode; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
|
||||
|
@Service |
||||
|
public class StatusCountService { |
||||
|
|
||||
|
private RestTemplate restTemplate; |
||||
|
private ObjectMapper objectMapper; |
||||
|
@Autowired |
||||
|
private AppConfig appconfig; |
||||
|
|
||||
|
public StatusCountService(RestTemplate restTemplate, ObjectMapper objectMapper) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.objectMapper = objectMapper; |
||||
|
} |
||||
|
|
||||
|
public Map<String, Object> fetchComplaintCounts(String fromDate, String toDate, String compType, String zoneName, String compMode, String compGroup, String region) { |
||||
|
//https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=common_api&jsonResp=Yes&subService=dashboardAbs&fromDate=&toDate=&compType=&zoneName=&compMode=&compGroup= |
||||
|
String apiUrl; |
||||
|
if ("SOCIAL MEDIA".equalsIgnoreCase(compMode)) { |
||||
|
|
||||
|
apiUrl = appconfig.qaqcurl+"serviceId=common_api&jsonResp=Yes" |
||||
|
+ "&subService=dashboardAbs" |
||||
|
+ "&fromDate=" + fromDate |
||||
|
+ "&toDate=" + toDate; |
||||
|
} |
||||
|
|
||||
|
else { |
||||
|
apiUrl = appconfig.qaqcurl+"serviceId=common_api&jsonResp=Yes" |
||||
|
+ "&subService=dashboardAbs" |
||||
|
+ "&fromDate=" + fromDate |
||||
|
+ "&toDate=" + toDate |
||||
|
+"&excludeMode=7"; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
// Append parameters based on their availability |
||||
|
if (!compType.isEmpty()) { |
||||
|
apiUrl += "&compType=" + compType; |
||||
|
} |
||||
|
|
||||
|
if (!zoneName.isEmpty()) { |
||||
|
apiUrl += "&zoneName=" + zoneName; |
||||
|
} |
||||
|
|
||||
|
if (!compMode.isEmpty()) { |
||||
|
apiUrl += "&compMode=" + compMode; |
||||
|
} |
||||
|
|
||||
|
if (!compGroup.isEmpty()) { |
||||
|
apiUrl += "&compGroup=" + compGroup; |
||||
|
} |
||||
|
|
||||
|
if (!region.isEmpty()) { |
||||
|
apiUrl += "®ion=" + region; |
||||
|
} |
||||
|
|
||||
|
Map<String, Object> counts = new HashMap<>(); |
||||
|
System.out.println("url: " + apiUrl); |
||||
|
|
||||
|
try { |
||||
|
// Get the raw response |
||||
|
String response = restTemplate.getForObject(apiUrl, String.class); |
||||
|
//System.out.println("API Response: " + response); // Log the response for debugging |
||||
|
|
||||
|
JsonNode jsonResponse = objectMapper.readTree(response); |
||||
|
|
||||
|
// Check if "ListResult" exists and is an array |
||||
|
JsonNode listResult = jsonResponse.path("ListResult"); |
||||
|
|
||||
|
if (listResult.isArray() && !listResult.isEmpty()) { |
||||
|
JsonNode resultNode = listResult.get(0); |
||||
|
if (resultNode != null && !resultNode.isNull()) { |
||||
|
counts.put("Total Complaints", resultNode.path("RECEIVED").asText("")); |
||||
|
counts.put("In Progress", resultNode.path("PENDING").asText("")); |
||||
|
counts.put("Redressed", resultNode.path("REDRESSED").asText("")); |
||||
|
counts.put("Reopened", resultNode.path("REOPEN").asText("")); |
||||
|
counts.put("Closed", resultNode.path("CLOSED").asText("")); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//System.out.println(fromDate); |
||||
|
//System.out.println(toDate); |
||||
|
|
||||
|
String url="https://erp.chennaicorporation.gov.in/pgr/newmobileservice?serviceId=ms_dashboard_details&From_date="+fromDate+"&To_date="+toDate+"&jsonResp=Yes&Status=closed&isQcuser=Yes&ComplaintType="+compType+"&ComplaintGroupId="+compGroup+"&compmode="+compMode+"&Zoneid="+zoneName+"&RegionId="+region; |
||||
|
System.out.println("url==="+url); |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
ResponseEntity<String> response1 = restTemplate.getForEntity(url, String.class); |
||||
|
String rawResponse = response1.getBody(); |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
Map<String, Object> responseMap = objectMapper.readValue(rawResponse, Map.class); |
||||
|
List<Map<String, Object>> details = (List<Map<String, Object>>) responseMap.get("Details"); |
||||
|
/* |
||||
|
long completedCount = (details == null || details.isEmpty()) ? 0 : |
||||
|
details.stream().filter(entry -> "Completed".equals(entry.get("Current Status"))).count(); |
||||
|
*/ |
||||
|
long completedCount = 0; |
||||
|
|
||||
|
if (details != null && !details.isEmpty()) { |
||||
|
for (Map<String, Object> entry : details) { |
||||
|
Object statusObj = entry.get("Current Status"); |
||||
|
if ("Completed".equals(statusObj)) { |
||||
|
completedCount++; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
counts.put("Withdraw", String.valueOf(completedCount)); |
||||
|
|
||||
|
int closedCount = Integer.parseInt(String.valueOf(counts.getOrDefault("Closed", "0"))); |
||||
|
closedCount -= completedCount; // Adjust closed count |
||||
|
counts.put("Closed", String.valueOf(closedCount)); |
||||
|
|
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
|
||||
|
return counts; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<String> fetchComplaintTypes(String compGroup) { |
||||
|
// Construct the API URL with the compGroup parameter |
||||
|
String apiUrl = appconfig.qaqcurl + |
||||
|
"serviceId=common_api&jsonResp=Yes&subService=compTypelist&compGroup=" + compGroup; |
||||
|
List<String> complaintTypes = new ArrayList<>(); |
||||
|
|
||||
|
try { |
||||
|
// Call the external API |
||||
|
ResponseEntity<String> response = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
|
||||
|
if (response.getStatusCode() == HttpStatus.OK) { |
||||
|
// Parse the response JSON |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
JsonNode rootNode = objectMapper.readTree(response.getBody()); |
||||
|
|
||||
|
// Navigate to "ListResult" and extract "COMPLAINTTYPENAME" |
||||
|
JsonNode listResultNode = rootNode.path("ListResult"); |
||||
|
if (listResultNode.isArray()) { |
||||
|
for (JsonNode item : listResultNode) { |
||||
|
String complaintTypeName = item.path("COMPLAINTTYPENAME").asText().trim(); |
||||
|
complaintTypes.add(complaintTypeName); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
System.err.println("Error fetching complaint types for compGroup " + compGroup + ": " + e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return complaintTypes; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
//for complaintgroup api |
||||
|
public List<String> fetchComplaintGroup() { |
||||
|
String apiUrl = appconfig.qaqcurl+"serviceId=common_api&jsonResp=Yes&subService=compGrouplist"; |
||||
|
List<String> complaintGroup = new ArrayList(); |
||||
|
|
||||
|
try { |
||||
|
// Call the external API |
||||
|
ResponseEntity<String> response = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
|
||||
|
if (response.getStatusCode() == HttpStatus.OK) { |
||||
|
// Parse the response JSON |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
JsonNode rootNode = objectMapper.readTree(response.getBody()); |
||||
|
|
||||
|
// Navigate to "ListResult" and extract "COMPLAINTTYPENAME" |
||||
|
JsonNode listResultNode = rootNode.path("ListResult"); |
||||
|
if (listResultNode.isArray()) { |
||||
|
for (JsonNode item : listResultNode) { |
||||
|
String complaintTypeName = item.path("COMPLAINTGROUPNAME").asText().trim(); |
||||
|
complaintGroup.add(complaintTypeName); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
System.err.println("Error fetching complaint types: " + e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return complaintGroup; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
//for modes api |
||||
|
public List<String> fetchModes() { |
||||
|
String apiUrl = appconfig.qaqcurl+"serviceId=common_api&jsonResp=Yes&subService=compModelist"; |
||||
|
List<String> modes = new ArrayList(); |
||||
|
|
||||
|
try { |
||||
|
// Call the external API |
||||
|
ResponseEntity<String> response = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
|
||||
|
if (response.getStatusCode() == HttpStatus.OK) { |
||||
|
// Parse the response JSON |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
JsonNode rootNode = objectMapper.readTree(response.getBody()); |
||||
|
|
||||
|
// Navigate to "ListResult" and extract "COMPLAINTTYPENAME" |
||||
|
JsonNode listResultNode = rootNode.path("ListResult"); |
||||
|
if (listResultNode.isArray()) { |
||||
|
for (JsonNode item : listResultNode) { |
||||
|
String complaintModeName = item.path("COMP_MODE").asText().trim(); |
||||
|
modes.add(complaintModeName); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
System.err.println("Error fetching complaint types: " + e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return modes; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// for zones api |
||||
|
public List<String> fetchZones() { |
||||
|
String apiUrl = appconfig.qaqcurl+"serviceId=common_api&jsonResp=Yes&subService=zoneNamelist"; |
||||
|
List<String> zones = new ArrayList(); |
||||
|
|
||||
|
try { |
||||
|
// Call the external API |
||||
|
ResponseEntity<String> response = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
|
||||
|
if (response.getStatusCode() == HttpStatus.OK) { |
||||
|
// Parse the response JSON |
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
JsonNode rootNode = objectMapper.readTree(response.getBody()); |
||||
|
|
||||
|
// Navigate to "ListResult" and extract "COMPLAINTTYPENAME" |
||||
|
JsonNode listResultNode = rootNode.path("ListResult"); |
||||
|
if (listResultNode.isArray()) { |
||||
|
for (JsonNode item : listResultNode) { |
||||
|
String complaintzone = item.path("NAME").asText().trim(); |
||||
|
zones.add(complaintzone); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
System.err.println("Error fetching complaint types: " + e.getMessage()); |
||||
|
} |
||||
|
|
||||
|
return zones; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,271 @@ |
|||||
|
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(); |
||||
|
|
||||
|
|
||||
|
response.append("English Message Response: ").append(sendWhatsAppMessage(msgUrl)).append("\n"); |
||||
|
|
||||
|
|
||||
|
response.append("Tamil Message Response: ").append(sendWhatsAppMessage(tamilmsgUrl)); |
||||
|
|
||||
|
return response.toString(); |
||||
|
} |
||||
|
|
||||
|
private String sendWhatsAppMessage(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(); |
||||
|
} |
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public String sendSMS(String SMS_Url) { |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
String response =restTemplate.getForObject(SMS_Url,String.class); |
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
public Map<String, Object> checkforwhatsappmsg(String complaintNumber, String action) { |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
|
||||
|
boolean result = false; |
||||
|
|
||||
|
if ("COMPLETED".equalsIgnoreCase(action)) { |
||||
|
|
||||
|
String sql = |
||||
|
"SELECT call_status " + |
||||
|
"FROM qaqc_upload_data_history " + |
||||
|
"WHERE complaint_number=? AND call_category='CLOSED' " + |
||||
|
"ORDER BY id DESC " + |
||||
|
"LIMIT 20"; |
||||
|
|
||||
|
List<String> 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=? AND call_category='CLOSED' " + |
||||
|
"ORDER BY id DESC " + |
||||
|
"LIMIT 5"; |
||||
|
|
||||
|
List<String> 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 getErpusername() { |
||||
|
|
||||
|
String query="SELECT erp_username FROM agents_list " |
||||
|
+ "where calling_type='WHATSAPP_MSG'"; |
||||
|
|
||||
|
return jdbcTemplate.queryForObject(query,String.class); |
||||
|
} |
||||
|
|
||||
|
public String getclosefromuser(String complaintNumber) { |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
Map<String, Object> complaintDetails =socialMediaService.getDetailsByComplaintNumber(complaintNumber); |
||||
|
String currentStatus = |
||||
|
String.valueOf( |
||||
|
complaintDetails.getOrDefault( |
||||
|
"currentStatus", |
||||
|
"" |
||||
|
) |
||||
|
); |
||||
|
|
||||
|
|
||||
|
|
||||
|
String Erpname=getErpusername(); |
||||
|
|
||||
|
System.out.println("Erpname="+Erpname); |
||||
|
|
||||
|
if ("Action Taken - Level 2".equalsIgnoreCase(currentStatus)) { |
||||
|
|
||||
|
boolean statusUpdated=qaqcCallsService.ChangeStatusInErp(complaintNumber, "COMPLAINT CLOSED BY WHATSAPP MESSAGE", "COMPLETED",Erpname); |
||||
|
if (statusUpdated) |
||||
|
{ |
||||
|
return "Your "+complaintNumber+ " PGR Complaint has been closed Successfully.\n If you need further assistance,\n Please contact GCC 1913 Helpline."; |
||||
|
} |
||||
|
else { |
||||
|
return "We are unable to process your request at the moment.\n Please try again later."; |
||||
|
} |
||||
|
} |
||||
|
else { |
||||
|
if("FINAL_CLOSURE".equalsIgnoreCase(currentStatus)){ |
||||
|
|
||||
|
return "Your " + complaintNumber + " complaint has already been closed.\n\n" |
||||
|
+ "If you need further assistance, please contact GCC 1913 Helpline."; |
||||
|
|
||||
|
} |
||||
|
else if("REOPENED".equalsIgnoreCase(currentStatus)) { |
||||
|
return "Your "+complaintNumber+" complaint has already been reopened. Once it is resolved, we will reach you by GCC’s 1913 helpline. If you need further assistance, please contact GCC 1913 Helpline."; |
||||
|
} |
||||
|
else { |
||||
|
return "Your "+complaintNumber+" complaint is Under Progress.\n Once it is resolved, \n we will reach you by GCC’s 1913 helpline."; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return "We are unable to process your request at the moment.\n Please try again later."; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
public String getreopenfromuser(String complaintNumber) { |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
Map<String, Object> complaintDetails =socialMediaService.getDetailsByComplaintNumber(complaintNumber); |
||||
|
String currentStatus = |
||||
|
String.valueOf( |
||||
|
complaintDetails.getOrDefault( |
||||
|
"currentStatus", |
||||
|
"" |
||||
|
) |
||||
|
); |
||||
|
|
||||
|
String Erpname=getErpusername(); |
||||
|
|
||||
|
System.out.println("Erpname="+Erpname); |
||||
|
|
||||
|
if ("Action Taken - Level 2".equalsIgnoreCase(currentStatus)) { |
||||
|
|
||||
|
boolean statusUpdated=qaqcCallsService.ChangeStatusInErp(complaintNumber, "COMPLAINT REOPENED BY WHATSAPP MESSAGE", "REOPEN",Erpname); |
||||
|
if (statusUpdated) |
||||
|
{ |
||||
|
return "Your "+complaintNumber+ " PGR complaint has been reopened Successfully.\n Once it is resolved , we will reach you by GCC’s 1913 helpline.If you need further assistance , please contact GCC 1913 Helpline."; |
||||
|
} |
||||
|
else { |
||||
|
return "We are unable to process your request at the moment.\n Please try again later."; |
||||
|
} |
||||
|
} |
||||
|
else { |
||||
|
|
||||
|
if("FINAL_CLOSURE".equalsIgnoreCase(currentStatus)){ |
||||
|
|
||||
|
return "Your " + complaintNumber + " complaint has already been closed.\n\n" |
||||
|
+ "If you need further assistance, please contact GCC 1913 Helpline."; |
||||
|
} |
||||
|
else if("REOPENED".equalsIgnoreCase(currentStatus)) { |
||||
|
return "Your "+complaintNumber+" complaint has already been reopened. Once it is resolved, we will reach you by GCC’s 1913 helpline. If you have any further assistance, please contact GCC 1913 Helpline."; |
||||
|
} |
||||
|
else { |
||||
|
return "Your "+complaintNumber+" complaint is Under Progress.\n Once it is resolved, \n we will reach you by GCC’s 1913 helpline."; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return "We are unable to process your request at the moment.\n Please try again later."; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,174 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.cdwaste.controller; |
||||
|
|
||||
|
import java.time.LocalDate; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
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.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.cdwaste.service.OfficerService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
|
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/gcc/api/dumpregistration") |
||||
|
public class DumpRegistrationAPIController { |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
private OfficerService officerService; |
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
private final AppConfig appConfig; |
||||
|
|
||||
|
@Autowired |
||||
|
public DumpRegistrationAPIController(RestTemplate restTemplate, AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/wastecollectorlist") |
||||
|
public ResponseEntity<String> getWasteCollectorList( |
||||
|
@RequestParam(required = false) Long mobileNo, |
||||
|
@RequestParam(required = false) Long refId) { |
||||
|
|
||||
|
StringBuilder apiUrl = new StringBuilder(appConfig.dumpregister + "/dumpregistration/api/wastecollectorlist"); |
||||
|
|
||||
|
// If at least one param is present, append '?' |
||||
|
if (mobileNo != null || refId != null) { |
||||
|
apiUrl.append("?"); |
||||
|
} |
||||
|
|
||||
|
// Append parameters |
||||
|
List<String> params = new ArrayList<>(); |
||||
|
if (mobileNo != null) { |
||||
|
params.add("mobileNo=" + mobileNo); |
||||
|
} |
||||
|
if (refId != null) { |
||||
|
params.add("refId=" + refId); |
||||
|
} |
||||
|
|
||||
|
apiUrl.append(String.join("&", params)); |
||||
|
|
||||
|
try { |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl.toString(), String.class); |
||||
|
return ResponseEntity.ok(responseEntity.getBody()); |
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body("Failed to fetch data: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getallcharges") |
||||
|
public ResponseEntity<String> getpaymentcharges() { |
||||
|
String apiUrl = appConfig.dumpregister + "/dumpregistration/dropdown/api/getallcharges"; |
||||
|
|
||||
|
try { |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
return ResponseEntity.ok(responseEntity.getBody()); // Return the real response, not a fixed string |
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body("Failed to fetch data: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@PostMapping("/saveWasteRequest") |
||||
|
public ResponseEntity<String> saveWasteRequest(@RequestBody Map<String, Object> payload) { |
||||
|
try { |
||||
|
officerService.saveRequestDetails(payload); |
||||
|
return ResponseEntity.ok("Saved successfully"); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error saving request"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/getless1tonlist") |
||||
|
public ResponseEntity<String> getWasteCollectorLess1TonList() { |
||||
|
StringBuilder apiUrl = new StringBuilder(appConfig.dumpregister + "/dumpregistration/api/getless1tonlist"); |
||||
|
|
||||
|
try { |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl.toString(), String.class); |
||||
|
return ResponseEntity.ok(responseEntity.getBody()); |
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body("Failed to fetch data: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getless1tonlistbyId") |
||||
|
public ResponseEntity<String> getWasteCollectorLess1TonListbyId(@RequestParam(required = true) Long refId) { |
||||
|
if (refId == null) { |
||||
|
return ResponseEntity.badRequest().body("refId is required"); |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
String apiUrl = appConfig.dumpregister + "/dumpregistration/api/getless1tonlistbyid?refId=" + refId; |
||||
|
|
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
return ResponseEntity.ok(responseEntity.getBody()); |
||||
|
|
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body("Failed to fetch data: " + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/getAllDetails") |
||||
|
public ResponseEntity<?> getAllRequestDetails( |
||||
|
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate fromDate, |
||||
|
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate toDate, |
||||
|
@RequestParam(required = false) String wastequantity, |
||||
|
@RequestParam(required = false) String zone) { |
||||
|
try { |
||||
|
|
||||
|
List<Map<String, Object>> response = officerService.getAllRequestDetails(fromDate, toDate, wastequantity, zone); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body(Collections.singletonMap("error", "Failed to fetch data: " + e.getMessage())); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getquantity") |
||||
|
public List<Map<String, Object>> getwastequantity() { |
||||
|
return officerService.getAllwastequantity(); |
||||
|
} |
||||
|
|
||||
|
//fetch all zones |
||||
|
|
||||
|
@GetMapping("/getzones") |
||||
|
public ResponseEntity<?> getAllZones() { |
||||
|
try { |
||||
|
List<Map<String, Object>> response = officerService.getZonesList(); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} catch (Exception e) { |
||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
|
.body(Collections.singletonMap("error", "Failed to fetch data: " + e.getMessage())); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
@ -0,0 +1,75 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.cdwaste.controller; |
||||
|
|
||||
|
|
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("/gcc/dumpregistration") |
||||
|
@Controller("dumpregistrationMainController") |
||||
|
public class MainController { |
||||
|
|
||||
|
private final LoginUserInfo loginUserInfo; |
||||
|
private final RestTemplate restTemplate; |
||||
|
private final AppConfig appConfig; |
||||
|
|
||||
|
@Autowired |
||||
|
public MainController(RestTemplate restTemplate,LoginUserInfo loginUserInfo, |
||||
|
AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
this.loginUserInfo = loginUserInfo; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/officer") |
||||
|
public String viewOfficer(Model model) |
||||
|
{ |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
|
||||
|
return "modules/cdwastecollect/officer"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@GetMapping("/lessthanoneton") |
||||
|
public String viewLessoneTonList(Model model) |
||||
|
{ |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
|
||||
|
return "modules/cdwastecollect/lessoneton"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/overallreport") |
||||
|
public String wasteCollectionReports(Model model) |
||||
|
{ |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
|
||||
|
String UserRole = LoginUserInfo.getUserRole(); |
||||
|
model.addAttribute("UserRole", UserRole); |
||||
|
return "modules/cdwastecollect/reports"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,195 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.cdwaste.service; |
||||
|
|
||||
|
import java.net.URLEncoder; |
||||
|
import java.nio.charset.StandardCharsets; |
||||
|
import java.time.LocalDate; |
||||
|
import java.time.LocalDateTime; |
||||
|
import java.time.LocalTime; |
||||
|
import java.util.ArrayList; |
||||
|
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.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
@Service |
||||
|
public class OfficerService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
private RestTemplate restTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
private SMSService smsService; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSourcemysql(@Qualifier("mysqlCDManagerSystemDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Transactional |
||||
|
public void saveRequestDetails(Map<String, Object> payload) { |
||||
|
double actualWeight = Double.parseDouble(payload.get("actualWeight").toString()); |
||||
|
String paymentType = payload.get("paymentType").toString(); |
||||
|
/* |
||||
|
* double processingCharge = |
||||
|
* Double.parseDouble(payload.get("processingCharge").toString()); double |
||||
|
* wasteCharge = Double.parseDouble(payload.get("wasteCharge").toString()); |
||||
|
*/ |
||||
|
|
||||
|
double processingCharge = payload.get("processingCharge") != null |
||||
|
? Double.parseDouble(payload.get("processingCharge").toString()) |
||||
|
: 0.0; |
||||
|
|
||||
|
double wasteCharge = payload.get("wasteCharge") != null |
||||
|
? Double.parseDouble(payload.get("wasteCharge").toString()) |
||||
|
: 0.0; |
||||
|
double totalCharge = Double.parseDouble(payload.get("totalCharge").toString()); |
||||
|
String paymentMobNo = payload.get("paymentMobileNo") != null ? payload.get("paymentMobileNo").toString() : null; |
||||
|
String refId = payload.get("refId") != null ? payload.get("refId").toString() : null; |
||||
|
|
||||
|
// ✅ Check if record exists |
||||
|
String checkSql = "SELECT COUNT(*) FROM waste_collectors_request WHERE refid = ?"; |
||||
|
Integer count = jdbcTemplate.queryForObject(checkSql, new Object[]{refId}, Integer.class); |
||||
|
|
||||
|
if (count != null && count > 0) { |
||||
|
// ✅ Update the existing record |
||||
|
String updateSql = "UPDATE waste_collectors_request SET actual_weight = ?, payment_type = ?, processing_charge = ?, waste_collection_charge = ?, total_charge = ?, payment_mobile_no = ? WHERE refid = ?"; |
||||
|
jdbcTemplate.update(updateSql, actualWeight, paymentType, processingCharge, wasteCharge, totalCharge, paymentMobNo, refId); |
||||
|
|
||||
|
// ✅ Send WhatsApp message if payment type is 'generateLink' and mobile number is provided |
||||
|
if ("generateLink".equalsIgnoreCase(paymentType) && paymentMobNo != null && !paymentMobNo.isBlank()) { |
||||
|
sendWhatsappMessage(refId, actualWeight, totalCharge, paymentMobNo); |
||||
|
} |
||||
|
} else { |
||||
|
throw new RuntimeException("No request found for Ref ID: " + refId); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
// public void sendWhatsappMessage(String refId, double actualWeight, double totalCharge, String mobileNumber) { |
||||
|
// try { |
||||
|
// String message = String.format( |
||||
|
// "Your request (Request ID: *%s*) has been processed. Please proceed with the payment.\n\nActual Weight: *%.0f kg*\nAmount Payable: *%.0f*", |
||||
|
// refId, actualWeight, totalCharge |
||||
|
// ); |
||||
|
// |
||||
|
// String encodedMessage = URLEncoder.encode(message, StandardCharsets.UTF_8); |
||||
|
// String encodedHeader = URLEncoder.encode("C&D Waste Collection – Payment Request", StandardCharsets.UTF_8); |
||||
|
// String encodedFooter = URLEncoder.encode("Greater Chennai Corporation", StandardCharsets.UTF_8); |
||||
|
// |
||||
|
// String redirectUrlParam = URLEncoder.encode("dumpregistration/paymentform?requestId=" + refId, StandardCharsets.UTF_8); |
||||
|
// |
||||
|
// String apiUrl = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507" + |
||||
|
// "&password=h2YjFNcJ" + |
||||
|
// "&send_to=" + mobileNumber + |
||||
|
// "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE" + |
||||
|
// "&msg=" + encodedMessage + |
||||
|
// "&isTemplate=true" + |
||||
|
// "&header=" + encodedHeader + |
||||
|
// "&footer=" + encodedFooter + |
||||
|
// "&buttonUrlParam=" + redirectUrlParam; |
||||
|
// |
||||
|
// // Optional: log URL before hitting for debugging |
||||
|
// System.out.println("WhatsApp API URL: " + apiUrl); |
||||
|
// |
||||
|
// // Make API call |
||||
|
// // restTemplate.getForObject(apiUrl, String.class); |
||||
|
// smsService.sendMsg(apiUrl); |
||||
|
// } catch (Exception e) { |
||||
|
// e.printStackTrace(); |
||||
|
// // Optionally log or alert failure |
||||
|
// } |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
public void sendWhatsappMessage(String refId, double actualWeight, double totalCharge, String mobileNumber) { |
||||
|
try { |
||||
|
|
||||
|
String apikey = "5c995535-6244-11f0-98fc-02c8a5e042bd"; |
||||
|
String from = "919445061913"; |
||||
|
String placeholders = ""; |
||||
|
String button_placeholder=""; |
||||
|
|
||||
|
// String apiUrl ="https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to="+mobileNumber+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Thank+you%21+Your+request+has+been+successfully+submitted.%0ARequest+Id+%3A+"+refId+"&isTemplate=true&header=C%26D+Waste+Collection+Request+Registered&footer=Greater+Chennai+Corporation"; |
||||
|
|
||||
|
// placeholders = URLEncoder.encode(refId, "UTF-8"); |
||||
|
|
||||
|
placeholders = URLEncoder.encode(refId + "|~|" + actualWeight + "|~|" + totalCharge, "UTF-8"); |
||||
|
|
||||
|
button_placeholder=URLEncoder.encode(refId, "UTF-8"); |
||||
|
|
||||
|
String whatsappMsg = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
||||
|
+ from + "&to=91" + mobileNumber + "" |
||||
|
+ "&type=template&templateid=3037264&placeholders=" + placeholders + "" |
||||
|
+ "&button_placeholder=dumpregistration/paymentform?requestId=" +button_placeholder + "" ; |
||||
|
|
||||
|
|
||||
|
|
||||
|
System.out.println("WhatsApp API URL: " + whatsappMsg); |
||||
|
smsService.sendMsg(whatsappMsg); |
||||
|
|
||||
|
|
||||
|
}catch (Exception e) { |
||||
|
|
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getAllRequestDetails(LocalDate fromDate, LocalDate toDate, String wastequantity, String zone) { |
||||
|
StringBuilder query = new StringBuilder( |
||||
|
"SELECT wcr.id, wcr.name, wcr.mobile_no, wcr.area, wcr.zone, qm.quantity, " + |
||||
|
"wtm.waste_type, dl.location, wcr.actual_weight, wcr.payment_status,wcr.waste_collection_charge, " + |
||||
|
"wcr.processing_charge, wcr.total_charge, DATE_FORMAT(wcr.cdate, '%d-%m-%Y') AS request_date, wcr.refid " + |
||||
|
"FROM waste_collectors_request wcr " + |
||||
|
"JOIN dumping_location dl ON wcr.dump_location_id = dl.id " + |
||||
|
"JOIN waste_type_master wtm ON wcr.waste_type_id = wtm.id " + |
||||
|
"JOIN quantity_master qm ON wcr.waste_quantity_id = qm.id " + |
||||
|
"WHERE wcr.cdate BETWEEN ? AND ?"); |
||||
|
|
||||
|
LocalDateTime fromDateTime = fromDate.atStartOfDay(); |
||||
|
LocalDateTime toDateTime = toDate.atTime(LocalTime.MAX); |
||||
|
|
||||
|
List<Object> params = new ArrayList<>(); |
||||
|
params.add(fromDateTime); |
||||
|
params.add(toDateTime); |
||||
|
|
||||
|
if (wastequantity != null && !wastequantity.isEmpty()) { |
||||
|
query.append(" AND qm.quantity = ?"); |
||||
|
params.add(wastequantity); |
||||
|
} |
||||
|
|
||||
|
if (zone != null && !zone.isEmpty()) { |
||||
|
query.append(" AND wcr.zone = ?"); |
||||
|
params.add(zone); |
||||
|
} |
||||
|
|
||||
|
return jdbcTemplate.queryForList(query.toString(), params.toArray()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getAllwastequantity() { |
||||
|
String sql = " SELECT id,quantity FROM quantity_master where is_active = 1 "; |
||||
|
return jdbcTemplate.queryForList(sql); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public List<Map<String, Object>> getZonesList() { |
||||
|
String sql = " SELECT id,zone_name from zones where is_active = 1 "; |
||||
|
return jdbcTemplate.queryForList(sql); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,40 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.cdwaste.service; |
||||
|
|
||||
|
|
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import java.net.HttpURLConnection; |
||||
|
import java.net.URL; |
||||
|
|
||||
|
@Service |
||||
|
public class SMSService { |
||||
|
public String sendMsg(String msgUrl) { |
||||
|
System.out.println("Whatsapp URL :-"+msgUrl); |
||||
|
|
||||
|
String response =""; |
||||
|
try{ |
||||
|
HttpURLConnection connection =null; |
||||
|
|
||||
|
URL url = new URL(msgUrl); |
||||
|
connection = (HttpURLConnection) url.openConnection(); |
||||
|
connection.setRequestMethod("GET"); |
||||
|
|
||||
|
int responseCode = connection.getResponseCode(); |
||||
|
response=responseCode+""; |
||||
|
System.out.println("Response Code: " + responseCode); |
||||
|
|
||||
|
}catch (Exception e){ |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
public String sendSMS(String SMS_Url) { |
||||
|
System.out.println("SMS URL:- "+ SMS_Url); |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
String response =restTemplate.getForObject(SMS_Url,String.class); |
||||
|
return response; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,111 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.cdwastecollectorregistrations.controller; |
||||
|
|
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.core.env.Environment; |
||||
|
|
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
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.RestController; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.cdwastecollectorregistrations.service.RegistrationService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
import java.nio.file.Files; |
||||
|
import java.nio.file.Path; |
||||
|
import java.nio.file.Paths; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
|
||||
|
@RestController("cdapiController") |
||||
|
@RequestMapping("/gcc/api/registration") |
||||
|
public class ApiController { |
||||
|
|
||||
|
private final RestTemplate restTemplate; |
||||
|
private final AppConfig appConfig; |
||||
|
|
||||
|
@Autowired |
||||
|
public ApiController(RestTemplate restTemplate, AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private Environment environment; |
||||
|
|
||||
|
@GetMapping("/pending") |
||||
|
public String getUserDetails(){ |
||||
|
String apiUrl = appConfig.cdwastecollectors + "/volunteer/wastecollectors/api/getuserdetails"; |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
return responseEntity.getBody(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/pendingbyid") |
||||
|
public String getUserDetailsById(@RequestParam("registerId") Long registerId){ |
||||
|
String apiUrl = appConfig.cdwastecollectors + "/volunteer/wastecollectors/api/getuserbyid"+"?registerId="+ registerId; |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
return responseEntity.getBody(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// @PostMapping("/acceptbyid") |
||||
|
// public String acceptRegistration(@RequestParam("registerId") Long registerId) { |
||||
|
// // Your logic to accept the registration |
||||
|
// String apiUrl = appConfig.cdwastecollectors +"/volunteer/wastecollector/api/accept"+"?registerId="+ registerId; |
||||
|
// ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
// return responseEntity.getBody(); |
||||
|
// } |
||||
|
|
||||
|
@PostMapping("/acceptbyid") |
||||
|
public ResponseEntity<String> acceptRegistration(@RequestParam("registerId") Long registerId) { |
||||
|
String apiUrl = appConfig.cdwastecollectors + "/volunteer/wastecollectors/api/accept?registerId=" + registerId; |
||||
|
ResponseEntity<String> responseEntity = restTemplate.postForEntity(apiUrl, null, String.class); |
||||
|
return ResponseEntity.ok("Registration Accepted for ID: " + registerId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@PostMapping("/rejectbyid") |
||||
|
public ResponseEntity<String> rejectRegistration( |
||||
|
@RequestParam("registerId") Long registerId, |
||||
|
@RequestParam("reason") String reason) { |
||||
|
|
||||
|
String apiUrl = appConfig.cdwastecollectors + "/volunteer/wastecollectors/api/reject?registerId=" + registerId + "&reason=" + reason; |
||||
|
ResponseEntity<String> responseEntity = restTemplate.postForEntity(apiUrl, null, String.class); |
||||
|
return ResponseEntity.ok("Registration Rejected for ID: " + registerId); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/approvallist") |
||||
|
public String getApprovalDetails(){ |
||||
|
String apiUrl = appConfig.cdwastecollectors + "/volunteer/wastecollectors/api/approvedlist"; |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
return responseEntity.getBody(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/rejectedlist") |
||||
|
public String getRejectedDetails(){ |
||||
|
String apiUrl = appConfig.cdwastecollectors + "/volunteer/wastecollectors/api/rejectedlist"; |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
return responseEntity.getBody(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,142 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.cdwastecollectorregistrations.controller; |
||||
|
|
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
|
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.core.ParameterizedTypeReference; |
||||
|
import org.springframework.http.HttpEntity; |
||||
|
import org.springframework.http.HttpHeaders; |
||||
|
import org.springframework.http.HttpMethod; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.security.core.userdetails.UserDetails; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import com.fasterxml.jackson.databind.JsonMappingException; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.cdwastecollectorregistrations.service.RegistrationService; |
||||
|
import in.gov.chennaicorporation.gccoffice.configuration.AppConfig; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
import org.springframework.http.MediaType; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
|
||||
|
|
||||
|
|
||||
|
@RequestMapping("/gcc/cdwaste") |
||||
|
@Controller("cdcontroller") |
||||
|
public class MainController { |
||||
|
|
||||
|
private final LoginUserInfo loginUserInfo; |
||||
|
private final RestTemplate restTemplate; |
||||
|
private final AppConfig appConfig; |
||||
|
|
||||
|
@Autowired |
||||
|
public MainController(RestTemplate restTemplate,LoginUserInfo loginUserInfo, |
||||
|
AppConfig appConfig) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.appConfig = appConfig; |
||||
|
this.loginUserInfo = loginUserInfo; |
||||
|
} |
||||
|
|
||||
|
@Autowired |
||||
|
private RegistrationService registrationservice; |
||||
|
|
||||
|
@GetMapping("/registration") |
||||
|
public String SavecdRegistraion(Model model){ |
||||
|
return "modules/cdwaste/registration"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/pending") |
||||
|
public String Pendinglist(Model model) throws JsonMappingException, JsonProcessingException { |
||||
|
String apiUrl = appConfig.cdwastecollectors + "/volunteer/wastecollectors/api/getuserdetails"; |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
|
||||
|
// Get the response body |
||||
|
String responseBody = responseEntity.getBody(); |
||||
|
|
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
|
||||
|
if (responseBody != null && !responseBody.isEmpty()) { |
||||
|
// Check if the response is an object or an array |
||||
|
if (responseBody.trim().startsWith("{")) { // Single object case |
||||
|
Map<String, Object> userDetails = objectMapper.readValue(responseBody, new TypeReference<Map<String, Object>>() {}); |
||||
|
model.addAttribute("userDetails", List.of(userDetails)); // Convert to a list for consistency |
||||
|
} else { // It's expected to be an array |
||||
|
List<Map<String, Object>> userDetails = objectMapper.readValue(responseBody, new TypeReference<List<Map<String, Object>>>() {}); |
||||
|
model.addAttribute("userDetails", userDetails); // Add the list directly |
||||
|
} |
||||
|
} else { |
||||
|
// If response is null or empty, pass an empty list to the model |
||||
|
model.addAttribute("userDetails", Collections.emptyList()); |
||||
|
} |
||||
|
|
||||
|
return "modules/cdwaste/pending"; // Return the view |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/approval") |
||||
|
public String approvalList(Model model) throws JsonMappingException, JsonProcessingException { |
||||
|
String apiUrl = appConfig.cdwastecollectors + "/volunteer/wastecollectors/api/approvedlist"; |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
|
||||
|
// Get the response body |
||||
|
String responseBody = responseEntity.getBody(); |
||||
|
|
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
|
||||
|
if (responseBody != null && !responseBody.isEmpty()) { |
||||
|
// Check if the response is an object or an array |
||||
|
if (responseBody.trim().startsWith("{")) { // Single object case |
||||
|
Map<String, Object> approvalDetails = objectMapper.readValue(responseBody, new TypeReference<Map<String, Object>>() {}); |
||||
|
model.addAttribute("approvalDetails", List.of(approvalDetails)); // Convert to list |
||||
|
} else { // It's an array |
||||
|
List<Map<String, Object>> approvalDetails = objectMapper.readValue(responseBody, new TypeReference<List<Map<String, Object>>>() {}); |
||||
|
model.addAttribute("approvalDetails", approvalDetails); |
||||
|
} |
||||
|
} else { |
||||
|
model.addAttribute("approvalDetails", Collections.emptyList()); |
||||
|
} |
||||
|
|
||||
|
return "modules/cdwaste/approval"; // Return the appropriate view |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/rejected") |
||||
|
public String rejectedList(Model model) throws JsonMappingException, JsonProcessingException { |
||||
|
String apiUrl = appConfig.cdwastecollectors + "/volunteer/wastecollectors/api/rejectedlist"; |
||||
|
ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class); |
||||
|
|
||||
|
// Get the response body |
||||
|
String responseBody = responseEntity.getBody(); |
||||
|
|
||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
|
||||
|
if (responseBody != null && !responseBody.isEmpty()) { |
||||
|
// Check if the response is an object or an array |
||||
|
if (responseBody.trim().startsWith("{")) { // Single object case |
||||
|
Map<String, Object> rejectedDetails = objectMapper.readValue(responseBody, new TypeReference<Map<String, Object>>() {}); |
||||
|
model.addAttribute("rejectedDetails", List.of(rejectedDetails)); // Convert to list |
||||
|
} else { // It's an array |
||||
|
List<Map<String, Object>> rejectedDetails = objectMapper.readValue(responseBody, new TypeReference<List<Map<String, Object>>>() {}); |
||||
|
model.addAttribute("rejectedDetails", rejectedDetails); |
||||
|
} |
||||
|
} else { |
||||
|
model.addAttribute("rejectedDetails", Collections.emptyList()); |
||||
|
} |
||||
|
|
||||
|
return "modules/cdwaste/rejected"; // Return the appropriate view |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,29 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.cdwastecollectorregistrations.controller; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
|
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
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.RestController; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.cdwastecollectorregistrations.service.WhatsappMsgService; |
||||
|
|
||||
|
|
||||
|
|
||||
|
@RestController("whatsappconCD") |
||||
|
@RequestMapping("/gcc/api/cd/whatsapp") |
||||
|
public class WhatsappControllerCD { |
||||
|
|
||||
|
@Autowired |
||||
|
private WhatsappMsgService whatsappMsgService; |
||||
|
|
||||
|
@PostMapping("/send-whatsapp-message") |
||||
|
public ResponseEntity<String> sendWhatsAppMessage(@RequestParam String msgUrl) { |
||||
|
String response = whatsappMsgService.sendMsg(msgUrl); |
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
@ -0,0 +1,33 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.cdwastecollectorregistrations.service; |
||||
|
|
||||
|
import java.io.File; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.UUID; |
||||
|
|
||||
|
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; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
@Service |
||||
|
public class RegistrationService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,41 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.cdwastecollectorregistrations.service; |
||||
|
|
||||
|
import java.net.HttpURLConnection; |
||||
|
|
||||
|
import java.net.URL; |
||||
|
|
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
@Service("whatsappServiceCD") |
||||
|
public class WhatsappMsgService { |
||||
|
|
||||
|
|
||||
|
public String sendMsg(String msgUrl) { |
||||
|
|
||||
|
String response =""; |
||||
|
try{ |
||||
|
HttpURLConnection connection =null; |
||||
|
|
||||
|
URL url = new URL(msgUrl); |
||||
|
connection = (HttpURLConnection) url.openConnection(); |
||||
|
connection.setRequestMethod("GET"); |
||||
|
|
||||
|
int responseCode = connection.getResponseCode(); |
||||
|
response=responseCode+""; |
||||
|
System.out.println("Response Code: " + responseCode); |
||||
|
|
||||
|
}catch (Exception e){ |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public String sendSMS(String SMS_Url) { |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
String response =restTemplate.getForObject(SMS_Url,String.class); |
||||
|
return response; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,428 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.childrensurvey.Controller; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
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 in.gov.chennaicorporation.gccoffice.childrensurvey.Service.ChildrenSurveyService; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/gcc/api/children-survey") |
||||
|
public class ChildrenSurveyController { |
||||
|
|
||||
|
@Autowired |
||||
|
private ChildrenSurveyService service; |
||||
|
|
||||
|
@GetMapping("/gender") |
||||
|
public List<Map<String, Object>> getGender() { |
||||
|
return service.getGender(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/location") |
||||
|
public List<Map<String, Object>> getLocation() { |
||||
|
return service.getLocation(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/education") |
||||
|
public List<Map<String, Object>> getEducation() { |
||||
|
return service.getEducation(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/list") |
||||
|
public List<Map<String, Object>> getSurveyList( |
||||
|
@RequestParam(required = false) String name, |
||||
|
@RequestParam(required = false) String gender, |
||||
|
@RequestParam(required = false) String age, |
||||
|
@RequestParam(required = false) String area, |
||||
|
@RequestParam(required = false) String education, |
||||
|
@RequestParam(required = false) String fromDate, |
||||
|
@RequestParam(required = false) String toDate) { |
||||
|
return service.getSurveyList(name, gender, age, area, education, fromDate, toDate); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/details") |
||||
|
public Map<String, Object> getSurveyDetails( |
||||
|
@RequestParam String surveyId) { |
||||
|
return service.getSurveyDetails(surveyId); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getSurveyorsList") |
||||
|
@ResponseBody |
||||
|
public List<Map<String, Object>> getSurveyorsList( |
||||
|
|
||||
|
@RequestParam(required = false) String name, |
||||
|
@RequestParam(required = false) String area, |
||||
|
@RequestParam(required = false) String fromDate, |
||||
|
@RequestParam(required = false) String toDate) { |
||||
|
|
||||
|
return service.getSurveyorsList( |
||||
|
name, |
||||
|
area, |
||||
|
fromDate, |
||||
|
toDate); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/survey-breakup") |
||||
|
@ResponseBody |
||||
|
public List<Map<String, Object>> getSurveyBreakup( |
||||
|
|
||||
|
@RequestParam(required = false) String loginId, |
||||
|
@RequestParam(required = false) String locationId, |
||||
|
@RequestParam(required = false) String surveyDate) { |
||||
|
|
||||
|
return service.getSurveyBreakup(loginId, locationId, surveyDate); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/dashboard") |
||||
|
public Map<String, Object> dashboard() { |
||||
|
|
||||
|
return service.getDashboardData(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/educationmasterlist") |
||||
|
public List<Map<String, Object>> list() { |
||||
|
|
||||
|
return service.getEducationList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/save") |
||||
|
public String save( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveEducation(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/status") |
||||
|
public String updateStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/locationmasterlist") |
||||
|
public List<Map<String, Object>> getLocationList() { |
||||
|
return service.getLocationList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/locationsave") |
||||
|
public String saveLocation( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveLocation(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/location-status") |
||||
|
public String updateLocationStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateLocationStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/gendermasterlist") |
||||
|
public List<Map<String, Object>> getGenderList() { |
||||
|
return service.getGenderList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/gendersave") |
||||
|
public String saveGender( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveGender(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/gender-status") |
||||
|
public String updateGenderStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateGenderStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/castemasterlist") |
||||
|
public List<Map<String, Object>> getCasteList() { |
||||
|
return service.getCasteList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/savecaste") |
||||
|
public String saveCaste( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveCaste(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/caste-status") |
||||
|
public String updateCasteStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateCasteStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/livingmasterlist") |
||||
|
public List<Map<String, Object>> getLivingList() { |
||||
|
return service.getLivingList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/livingsave") |
||||
|
public String saveLiving( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveLiving(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/living-status") |
||||
|
public String updateLivingStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateLivingStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/documentcreationmasterlist") |
||||
|
public List<Map<String, Object>> getDocumentCreationList() { |
||||
|
return service.getDocumentCreationList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/documentcreationsave") |
||||
|
public String saveDocumentCreation( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveDocumentCreation(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/documentcreationstatus") |
||||
|
public String updateDocumentCreationStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateDocumentCreationStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/dropoutreasonmasterlist") |
||||
|
public List<Map<String, Object>> getDropoutReasonList() { |
||||
|
return service.getDropoutReasonList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/dropoutreasonsave") |
||||
|
public String saveDropoutReason( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveDropoutReason(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/dropoutreasonstatus") |
||||
|
public String updateDropoutReasonStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateDropoutReasonStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/incomemasterlist") |
||||
|
public List<Map<String, Object>> getIncomeList() { |
||||
|
return service.getIncomeList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/incomesave") |
||||
|
public String saveIncome( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveIncome(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/incomemasterstatus") |
||||
|
public String updateIncomeStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateIncomeStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/interestfieldmasterlist") |
||||
|
public List<Map<String, Object>> getInterestFieldList() { |
||||
|
return service.getInterestFieldList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/interestfieldsave") |
||||
|
public String saveInterestField( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveInterestField(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/interestfieldmaster-status") |
||||
|
public String updateInterestFieldStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateInterestFieldStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/ownermasterlist") |
||||
|
public List<Map<String, Object>> getOwnerList() { |
||||
|
return service.getOwnerList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/ownermastersave") |
||||
|
public String saveOwner( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveOwner(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/ownermasterstatus") |
||||
|
public String updateOwnerStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateOwnerStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/religionmasterlist") |
||||
|
public List<Map<String, Object>> getReligionList() { |
||||
|
return service.getReligionList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/religionsave") |
||||
|
public String saveReligion( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveReligion(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/religion-status") |
||||
|
public String updateReligionStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateReligionStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/vulnerabilitymasterlist") |
||||
|
public List<Map<String, Object>> getVulnerabilityList() { |
||||
|
return service.getVulnerabilityList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/vulnerabilitysave") |
||||
|
public String saveVulnerability( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveVulnerability(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/vulnerabilitymasterstatus") |
||||
|
public String updateVulnerabilityStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateVulnerabilityStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/whereaboutmasterlist") |
||||
|
public List<Map<String, Object>> getWhereaboutList() { |
||||
|
return service.getWhereaboutList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/whereaboutsave") |
||||
|
public String saveWhereabout( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveWhereabout(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/whereaboutstatus") |
||||
|
public String updateWhereaboutStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateWhereaboutStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/documentreasonmasterlist") |
||||
|
public List<Map<String, Object>> getDocumentReasonList() { |
||||
|
return service.getDocumentReasonList(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/documentreasonmaster") |
||||
|
public String saveDocumentReason( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.saveDocumentReason(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/documentreasonmasterstatus") |
||||
|
public String updateDocumentReasonStatus( |
||||
|
@RequestBody Map<String, Object> req) { |
||||
|
|
||||
|
service.updateDocumentReasonStatus(req); |
||||
|
|
||||
|
return "SUCCESS"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/nonsurveyed/list") |
||||
|
public ResponseEntity<List<Map<String, Object>>> getNonSurveyedChildList( |
||||
|
|
||||
|
@RequestParam(required = false) String area, |
||||
|
@RequestParam(required = false) String fromDate, |
||||
|
@RequestParam(required = false) String toDate) { |
||||
|
|
||||
|
return ResponseEntity.ok( |
||||
|
service.getNonSurveyedChildList( |
||||
|
area, |
||||
|
fromDate, |
||||
|
toDate)); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,102 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.childrensurvey.Controller; |
||||
|
|
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
@Controller("ChildrenSurveyController") |
||||
|
@RequestMapping("/gcc/childrensurvey") |
||||
|
public class MainController { |
||||
|
|
||||
|
@GetMapping("/surveylist") |
||||
|
public String surveylist() { |
||||
|
return "modules/childrensurvey/surveylist"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/childlist/surveyedlist") |
||||
|
public String surveyedlist() { |
||||
|
return "modules/childrensurvey/childlist"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/childlist/nonsurveyedlist") |
||||
|
public String nonsurveyedlist() { |
||||
|
return "modules/childrensurvey/nonchildlist"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/surveyorsreports") |
||||
|
public String surveyorsreports() { |
||||
|
return "modules/childrensurvey/surveyorsreports"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/educationmaster") |
||||
|
public String educationmaster() { |
||||
|
return "modules/childrensurvey/educationmaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/locationmaster") |
||||
|
public String locationmaster() { |
||||
|
return "modules/childrensurvey/locationmaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/gendermaster") |
||||
|
public String gendermaster() { |
||||
|
return "modules/childrensurvey/gendermaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/castemaster") |
||||
|
public String castemaster() { |
||||
|
return "modules/childrensurvey/castemaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/livingmaster") |
||||
|
public String livingmaster() { |
||||
|
return "modules/childrensurvey/livingmaster"; |
||||
|
} |
||||
|
|
||||
|
// documentation |
||||
|
@GetMapping("/mastersubmenu/documentcorrectionmaster") |
||||
|
public String documentcorrectionmaster() { |
||||
|
return "modules/childrensurvey/documentcorrectionmaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/dropoutreasonmaster") |
||||
|
public String dropoutreasonmaster() { |
||||
|
return "modules/childrensurvey/dropoutreasonmaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/incomemaster") |
||||
|
public String incomemaster() { |
||||
|
return "modules/childrensurvey/incomemaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/religionmaster") |
||||
|
public String religionmaster() { |
||||
|
return "modules/childrensurvey/religionmaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/interestfieldmaster") |
||||
|
public String interestfieldmaster() { |
||||
|
return "modules/childrensurvey/interestfieldmaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/ownershipmaster") |
||||
|
public String ownermaster() { |
||||
|
return "modules/childrensurvey/ownermaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/vulnerabilitymaster") |
||||
|
public String vulnerabilitymaster() { |
||||
|
return "modules/childrensurvey/vulnerabilitymaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/whereaboutmaster") |
||||
|
public String whereaboutmaster() { |
||||
|
return "modules/childrensurvey/whereaboutmaster"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/mastersubmenu/documentreasonmaster") |
||||
|
public String documentreasonmaster() { |
||||
|
return "modules/childrensurvey/documentreasonmaster"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
3411
src/main/java/in/gov/chennaicorporation/gccoffice/childrensurvey/Service/ChildrenSurveyService.java
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,58 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.circular.controller; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
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.RestController; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.circular.service.CircularMaster; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("gcc/api/circular") |
||||
|
@RestController("circularRest") // Circular Rest |
||||
|
public class APIController { |
||||
|
private CircularMaster circularMaster; |
||||
|
|
||||
|
@Autowired |
||||
|
public APIController(CircularMaster circularMaster) { |
||||
|
this.circularMaster = circularMaster; |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getCircularTypes") |
||||
|
public List getCircularTypeList() { |
||||
|
return circularMaster.getCircularType(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getDeprtmentList") |
||||
|
public List getDepartmentList() { |
||||
|
return circularMaster.getDepartment(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getCircularList") |
||||
|
public List getCircularList() { |
||||
|
return circularMaster.getCircular(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping(value="/saveCircular") |
||||
|
public String savePetition( |
||||
|
@RequestParam("createdBy") String createdBy, |
||||
|
@RequestParam("doc_cat") String circularCategory, |
||||
|
@RequestParam("circularType") String circularType, |
||||
|
@RequestParam("department") String department, |
||||
|
@RequestParam("Date") String Date, |
||||
|
@RequestParam("subject") String subject, |
||||
|
@RequestParam("scan_page1") MultipartFile scan_file1) { |
||||
|
|
||||
|
return circularMaster.saveCircular(createdBy,circularCategory,circularType,department,Date,subject,scan_file1); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value="/getReport") |
||||
|
public List getReport() { |
||||
|
return circularMaster.getReport(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,61 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.circular.controller; |
||||
|
|
||||
|
import org.hibernate.hql.internal.ast.tree.RestrictableStatement; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.core.env.Environment; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.ui.Model; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.service.Base64Util; |
||||
|
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; |
||||
|
|
||||
|
@RequestMapping("/gcc/circular") |
||||
|
@Controller("CircularController") |
||||
|
public class MainController { |
||||
|
private final RestTemplate restTemplate; |
||||
|
private Environment environment; |
||||
|
private String BasePath = "modules/circular/"; |
||||
|
|
||||
|
@Autowired |
||||
|
public MainController(RestTemplate restTemplate,Environment environment) { |
||||
|
this.restTemplate = restTemplate; |
||||
|
this.environment = environment; |
||||
|
} |
||||
|
|
||||
|
@GetMapping({"", "/", "/index", "/dashboard"}) |
||||
|
public String dashboard(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
return BasePath+"index"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping({"/new"}) |
||||
|
public String newCircular(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
return BasePath+"new_circular"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/list") |
||||
|
public String inbox(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
String uploadDirectory = environment.getProperty("file.upload.directory"); |
||||
|
String serviceFolderName = environment.getProperty("cir_foldername"); |
||||
|
uploadDirectory = uploadDirectory + serviceFolderName; |
||||
|
model.addAttribute("uploadDirectory",uploadDirectory); |
||||
|
return BasePath+"inbox"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/report") |
||||
|
public String report(Model model) { |
||||
|
String LoginUserId = LoginUserInfo.getLoginUserId(); |
||||
|
model.addAttribute("LoginUserId",LoginUserId); |
||||
|
return BasePath+"report"; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.circular.controller; |
||||
@ -0,0 +1 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.circular; |
||||
@ -0,0 +1,223 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.circular.service; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
import java.nio.file.Files; |
||||
|
import java.nio.file.Path; |
||||
|
import java.nio.file.Paths; |
||||
|
import java.sql.PreparedStatement; |
||||
|
import java.sql.Statement; |
||||
|
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.dao.DataAccessException; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.jdbc.support.GeneratedKeyHolder; |
||||
|
import org.springframework.jdbc.support.KeyHolder; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.m_petition.data.ComplaintType; |
||||
|
|
||||
|
@Service("CircularMaster") |
||||
|
public class CircularMaster { |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
private Environment environment; |
||||
|
private JdbcTemplate appjdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(Environment environment, |
||||
|
@Qualifier("mysqlCircularDataSource") DataSource dataSource, |
||||
|
@Qualifier("mysqlAppDataSource") DataSource appdataSource) { |
||||
|
this.environment = environment; |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
this.appjdbcTemplate = new JdbcTemplate(appdataSource); |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getCircularType(){ |
||||
|
String SqlQuery = ""; |
||||
|
|
||||
|
SqlQuery = "SELECT * FROM `circular_types` WHERE `isactive`=1 AND `isdelete`=0"; |
||||
|
|
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(SqlQuery); |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getDepartment(){ |
||||
|
String SqlQuery = ""; |
||||
|
|
||||
|
SqlQuery = "SELECT * FROM `departments` WHERE `isactive`=1 AND `isdelete`=0 Order By name"; |
||||
|
|
||||
|
List<Map<String, Object>> result = appjdbcTemplate.queryForList(SqlQuery); |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getCircular(){ |
||||
|
String SqlQuery = ""; |
||||
|
|
||||
|
SqlQuery = "SELECT cd.*, cf.*, CASE WHEN cf.cid IS NOT NULL THEN 'true' ELSE 'false' END AS file_exits, gcc_apps.departments.name as department_name, circular_types.name as circular_type_name FROM circular_data cd LEFT JOIN circular_files cf ON cd.cid = cf.cid, gcc_apps.departments, circular_types where gcc_apps.departments.did=department AND circular_types.tid=circular_type ORDER BY cd.cid Desc"; |
||||
|
|
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(SqlQuery); |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public String saveCircular( |
||||
|
String createdBy, |
||||
|
String circularCategory, |
||||
|
String circularType, |
||||
|
String department, |
||||
|
String Date, |
||||
|
String subject, |
||||
|
MultipartFile scan_file1) { |
||||
|
|
||||
|
//System.out.println("I am from Service Page "+petitionerName); |
||||
|
|
||||
|
//String complaintNature = ""; |
||||
|
int lastInsertId = 0; |
||||
|
String sqlQuery = "INSERT INTO `circular_data` " |
||||
|
+ "(`createdBy`,`category`, `circular_type`, `department`, " |
||||
|
+ "`Date`, `subject`) " |
||||
|
+ "VALUES (?, ?, ?, ?, ?, ?)"; |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
KeyHolder keyHolder = new GeneratedKeyHolder(); |
||||
|
// Use JdbcTemplate's update method to execute the query with parameters |
||||
|
jdbcTemplate.update(connection -> { |
||||
|
PreparedStatement ps = connection.prepareStatement(sqlQuery, Statement.RETURN_GENERATED_KEYS); |
||||
|
ps.setString(1, createdBy); |
||||
|
ps.setString(2, circularCategory); |
||||
|
ps.setString(3, circularType); |
||||
|
ps.setString(4, department); |
||||
|
ps.setString(5, Date); |
||||
|
ps.setString(6, subject); |
||||
|
return ps; |
||||
|
}, keyHolder); |
||||
|
|
||||
|
// Get the last insert ID |
||||
|
lastInsertId = (int) keyHolder.getKey().longValue(); |
||||
|
String lastInsertId_txt = String.valueOf(lastInsertId); |
||||
|
|
||||
|
// Add Petition Scan File in the database |
||||
|
addCircularFile(createdBy, lastInsertId, scan_file1); |
||||
|
|
||||
|
return lastInsertId_txt; // If no exception, query executed successfully |
||||
|
|
||||
|
} catch (DataAccessException e) { |
||||
|
// Handle exception (e.g., log error) |
||||
|
String sqlQuery2 = "UPDATE `circular_data` SET `isactive`=0, `isdelete`=1 WHERE `cid`="+lastInsertId+" LIMIT 1"; |
||||
|
jdbcTemplate.update(sqlQuery2); |
||||
|
e.printStackTrace(); |
||||
|
return "error"; // Query execution failed |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public String addCircularFile(String createdBy, |
||||
|
int cid, |
||||
|
MultipartFile page1) { |
||||
|
|
||||
|
String fileName=""; |
||||
|
for (int i = 1; i <= 4; i++) { |
||||
|
MultipartFile file = null; |
||||
|
switch (i) { |
||||
|
case 1: |
||||
|
file = page1; |
||||
|
fileName = "Scan1"; |
||||
|
break; |
||||
|
} |
||||
|
if (file != null && !file.isEmpty()) { |
||||
|
try { |
||||
|
// Get the bytes of the file |
||||
|
byte[] bytes = file.getBytes(); |
||||
|
|
||||
|
// Set the file path where you want to save it |
||||
|
String uploadDirectory = environment.getProperty("file.upload.directory"); |
||||
|
String serviceFolderName = environment.getProperty("cir_foldername"); |
||||
|
uploadDirectory = uploadDirectory + serviceFolderName; |
||||
|
|
||||
|
// File name |
||||
|
fileName = cid + "_" + fileName + "_" + file.getOriginalFilename(); |
||||
|
|
||||
|
//File Size |
||||
|
Long fileSize = file.getSize(); |
||||
|
|
||||
|
// File Type |
||||
|
String fileType = file.getContentType(); |
||||
|
|
||||
|
// Create directory if it doesn't exist |
||||
|
Path directoryPath = Paths.get(uploadDirectory); |
||||
|
if (!Files.exists(directoryPath)) { |
||||
|
Files.createDirectories(directoryPath); |
||||
|
} |
||||
|
|
||||
|
String filePath = uploadDirectory + "/" + fileName; |
||||
|
|
||||
|
// Create a new Path object |
||||
|
Path path = Paths.get(filePath); |
||||
|
|
||||
|
// Write the bytes to the file |
||||
|
Files.write(path, bytes); |
||||
|
|
||||
|
// Save the file path to a database |
||||
|
String sqlQuery = "INSERT INTO `circular_files` ( `cid`, `created_by`, `file_name`, `file_size`, `file_type`) " |
||||
|
+ "VALUES ('"+cid+"', '"+createdBy+"','"+fileName+"','"+fileSize+"','"+fileType+"')"; |
||||
|
jdbcTemplate.update(sqlQuery); |
||||
|
|
||||
|
} catch (IOException e) { |
||||
|
e.printStackTrace(); |
||||
|
return "Failed to save file " + file.getOriginalFilename(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
return "success"; |
||||
|
} |
||||
|
|
||||
|
@Transactional(readOnly = true) |
||||
|
public List<Map<String,Object>> getReport(){ |
||||
|
String SqlQuery = ""; |
||||
|
String dynamic_query =""; |
||||
|
SqlQuery = "SELECT * FROM `circular_types` WHERE `isactive`=1 AND `isdelete`=0 ORDER BY `tid`"; |
||||
|
|
||||
|
List<Map<String, Object>> circular_types_result = jdbcTemplate.queryForList(SqlQuery); |
||||
|
|
||||
|
for(Map<String, Object> type : circular_types_result) { |
||||
|
String typeId = type.get("tid").toString(); |
||||
|
String typeName = type.get("name").toString(); |
||||
|
dynamic_query += "SUM(CASE WHEN ct.tid = '" + typeId + "' THEN 1 ELSE 0 END) AS `dynamic_" + typeName + "`, "; |
||||
|
} |
||||
|
|
||||
|
// Remove the trailing comma and space from dynamic_query |
||||
|
dynamic_query = dynamic_query.substring(0, dynamic_query.length() - 2); |
||||
|
|
||||
|
// Construct the SQL query with the dynamic part |
||||
|
SqlQuery = "SELECT " |
||||
|
+ " d.name, " |
||||
|
+ "SUM(CASE WHEN ct.tid != '0' THEN 1 ELSE 0 END) as total, " |
||||
|
+ dynamic_query + " " |
||||
|
+ "FROM " |
||||
|
+ "gcc_apps.departments d " |
||||
|
+ "LEFT JOIN circular.circular_data cd ON cd.department = d.did " |
||||
|
+ "LEFT JOIN circular.circular_types ct ON cd.circular_type = ct.tid " |
||||
|
+ "GROUP BY d.name"; |
||||
|
System.out.println(SqlQuery); |
||||
|
List<Map<String, Object>> result = jdbcTemplate.queryForList(SqlQuery); |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.circular.service; |
||||
Some files were not shown because too many files changed in this diff
Write
Preview
Loading…
Cancel
Save
Reference in new issue