11package com .iemr .common .service .grievance ;
22
33import java .sql .Timestamp ;
4+ import java .text .ParseException ;
5+ import java .text .SimpleDateFormat ;
46import java .util .ArrayList ;
7+ import java .util .Arrays ;
58import java .util .Comparator ;
9+ import java .util .Date ;
10+ import java .util .HashSet ;
611import java .util .Iterator ;
712import java .util .List ;
813import java .util .Set ;
1621import org .springframework .beans .factory .annotation .Value ;
1722import org .springframework .stereotype .Service ;
1823
24+ import com .fasterxml .jackson .databind .ObjectMapper ;
1925import com .iemr .common .data .grievance .GetGrievanceWorklistRequest ;
2026import com .iemr .common .data .grievance .GrievanceAllocationRequest ;
2127import com .iemr .common .data .grievance .GrievanceDetails ;
2228import com .iemr .common .data .grievance .GrievanceReallocationRequest ;
29+ import com .iemr .common .data .grievance .GrievanceResponse ;
2330import com .iemr .common .data .grievance .MoveToBinRequest ;
2431import com .iemr .common .dto .grivance .GrievanceTransactionDTO ;
2532import com .iemr .common .dto .grivance .GrievanceWorklistDTO ;
33+ import com .iemr .common .repository .callhandling .BeneficiaryCallRepository ;
2634import com .iemr .common .repository .grievance .GrievanceDataRepo ;
2735import com .iemr .common .repository .grievance .GrievanceOutboundRepository ;
2836import com .iemr .common .utils .exception .IEMRException ;
@@ -37,11 +45,14 @@ public class GrievanceHandlingServiceImpl implements GrievanceHandlingService {
3745
3846 private final GrievanceDataRepo grievanceDataRepo ;
3947 private final GrievanceOutboundRepository grievanceOutboundRepo ;
48+ private final BeneficiaryCallRepository beneficiaryCallRepo ;
4049
4150 @ Autowired
42- public GrievanceHandlingServiceImpl (GrievanceDataRepo grievanceDataRepo , GrievanceOutboundRepository grievanceOutboundRepo ) {
51+ public GrievanceHandlingServiceImpl (GrievanceDataRepo grievanceDataRepo , GrievanceOutboundRepository grievanceOutboundRepo ,
52+ BeneficiaryCallRepository beneficiaryCallRepo ) {
4353 this .grievanceDataRepo = grievanceDataRepo ;
4454 this .grievanceOutboundRepo = grievanceOutboundRepo ;
55+ this .beneficiaryCallRepo = beneficiaryCallRepo ;
4556 }
4657
4758 @ Value ("${grievanceAllocationRetryConfiguration}" )
@@ -386,5 +397,128 @@ public String saveComplaintResolution(String request) throws Exception {
386397 throw new Exception ("Failed to update complaint resolution" );
387398 }
388399 }
400+
401+
402+
403+
404+ private Date parseDate (String dateStr ) {
405+ SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss" );
406+ try {
407+ return dateFormat .parse (dateStr );
408+ } catch (ParseException e ) {
409+ logger .error ("Error parsing date for grievance: " + dateStr , e );
410+ throw new IllegalArgumentException ("Invalid date format in request:" + dateStr );
411+ }
412+ }
413+
414+
415+ @ Override
416+ public String getGrievanceDetailsWithRemarks (String request ) throws Exception {
417+ ObjectMapper objectMapper = new ObjectMapper ();
418+
419+ try {
420+ // Parsing request to get the filter parameters (State, ComplaintResolution, StartDate, EndDate)
421+ JSONObject requestObj = new JSONObject (request );
422+ String complaintResolution = requestObj .optString ("ComplaintResolution" , null );
423+ String state = requestObj .optString ("State" , null );
424+ String fromDate = requestObj .optString ("StartDate" );
425+ String toDate = requestObj .optString ("EndDate" );
426+
427+ if (fromDate == null || toDate == null ) {
428+ throw new IllegalArgumentException ("fromDate and toDate are required" );
429+ }
430+ // Convert StartDate and EndDate to Date objects
431+ Date startDateStr = parseDate (fromDate );
432+ Date endDateStr = parseDate (toDate );
433+
434+ List <GrievanceDetails > grievanceDetailsList = grievanceDataRepo .fetchGrievanceDetailsBasedOnParams (state , complaintResolution , startDateStr , endDateStr ); // Fetch grievance details based on the request
435+
436+ if (grievanceDetailsList == null || grievanceDetailsList .isEmpty ()) {
437+ return "No grievance details found for the provided request." ;
438+ }
439+
440+ List <GrievanceResponse > grievanceResponseList = new ArrayList <>();
441+
442+
443+ // Determine if the complaintResolution is "resolved" or "unresolved"
444+ for (GrievanceDetails grievance : grievanceDetailsList ) {
445+ GrievanceResponse grievanceResponse = new GrievanceResponse ();
446+
447+ // Set basic grievance details
448+ grievanceResponse .setGrievanceId (grievance .getGrievanceId ());
449+ grievanceResponse .setComplaintID (grievance .getComplaintID ());
450+ grievanceResponse .setPrimaryNumber (grievance .getPrimaryNumber ());
451+ grievanceResponse .setComplaintResolution (grievance .getComplaintResolution ());
452+ grievanceResponse .setCreatedDate (grievance .getCreatedDate ());
453+ grievanceResponse .setLastModDate (grievance .getLastModDate ());
454+
455+ // Fetch and set remarks based on complaintResolution value
456+ String remarks = "" ;
457+ if ("unresolved" .equalsIgnoreCase (complaintResolution )) {
458+ // Fetch remarks from t_bencall by joining with t_grievanceworklist based on benRegId
459+ remarks = fetchRemarksFromBenCallByComplaint (grievance .getComplaintID ());
460+ } else if ("resolved" .equalsIgnoreCase (complaintResolution )) {
461+ // Fetch remarks from t_grievanceworklist
462+ remarks = fetchRemarksFromGrievanceWorklist (grievance .getComplaintID ());
463+ } else {
464+ // Default: Fetch remarks based on the grievance's specific conditions (no specific resolution status)
465+ String callRemarks = fetchRemarksFromBenCallByComplaint (grievance .getComplaintID ());
466+ if (remarks != null && !remarks .startsWith ("No remarks found" )) {
467+ remarks = callRemarks ;
468+ }
469+ else {
470+ remarks = fetchRemarksFromGrievanceWorklist (grievance .getComplaintID ());
471+
472+ }
473+ }
474+
475+ grievanceResponse .setRemarks (remarks );
476+
477+ // Add to response list
478+ grievanceResponseList .add (grievanceResponse );
479+ }
480+
481+ // Convert the list of GrievanceResponse objects to JSON and return as a string
482+ return objectMapper .writeValueAsString (grievanceResponseList );
483+
484+ } catch (Exception e ) {
485+ logger .error ("Error while getting grievance details with remarks: " + e .getMessage (), e );
486+ throw new Exception ("Error processing grievance request" );
487+ }
488+ }
489+
490+
491+
492+ private String fetchRemarksFromBenCallByComplaint (String complaintID ) throws Exception {
493+ // Query t_grievanceworklist to fetch the benRegId based on complaintID
494+ List <GrievanceDetails > grievanceWorklist = grievanceDataRepo .fetchGrievanceWorklistByComplaintID (complaintID );
389495
496+ if (grievanceWorklist != null && !grievanceWorklist .isEmpty ()) {
497+ GrievanceDetails grievance = grievanceWorklist .get (0 );
498+ Long beneficiaryRegID = grievance .getBeneficiaryRegID (); // Fetch the beneficiaryRegID from the grievance
499+
500+ // Query t_bencall to fetch remarks based on benRegId
501+ List <Object []> benCallResults = beneficiaryCallRepo .fetchBenCallRemarks (beneficiaryRegID );
502+
503+ if (benCallResults != null && !benCallResults .isEmpty ()) {
504+ return (String ) benCallResults .get (0 )[0 ]; // Fetch the remarks
505+ }
506+ }
507+
508+ return "No remarks found in t_bencall" ;
509+ }
510+
511+ private String fetchRemarksFromGrievanceWorklist (String complaintID ) throws JSONException {
512+ // Query t_grievanceworklist to fetch remarks based on complaintID
513+ List <Object []> grievanceWorklistResults = grievanceDataRepo .fetchGrievanceWorklistRemarks (complaintID );
514+
515+ if (grievanceWorklistResults != null && !grievanceWorklistResults .isEmpty ()) {
516+ // Assuming grievanceWorklistResults has a format like [remarks] for simplicity
517+ return (String ) grievanceWorklistResults .get (0 )[0 ]; // Fetch the remarks
518+ }
519+ return "No remarks found in t_grievanceworklist" ;
520+ }
521+
522+
390523}
524+
0 commit comments