Skip to content

Commit 4933750

Browse files
srishtigrp78SR20290919
andauthored
AMM-1149 | API to push back Grievance data to the GR team (#166)
* adding code for API to push back grievance data to GR team * removed unnecessary conditions * adding code rabbit changes * adding code rabbit suggestions * adding required null checks * adding code rabbit suggested changes * removing unnecessary Exception --------- Co-authored-by: SR20290919 <SR20290919@APL-PG02PW8B>
1 parent 36c2ab0 commit 4933750

6 files changed

Lines changed: 244 additions & 2 deletions

File tree

src/main/java/com/iemr/common/controller/grievance/GrievanceController.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,18 @@ public String completeGrievanceCall(
207207
return response.toString();
208208
}
209209

210-
210+
211+
@Operation(summary = "Get Grievance Details with Remarks")
212+
@PostMapping(value = "/getCompleteGrievanceDetails", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization")
213+
public String getGrievanceDetailsWithRemarks(@RequestBody String request) {
214+
OutputResponse response = new OutputResponse();
215+
try {
216+
response.setResponse(grievanceHandlingService.getGrievanceDetailsWithRemarks(request));
217+
} catch (Exception e) {
218+
logger.error("getGrievanceDetailsWithRemarks failed with error " + e.getMessage(), e);
219+
response.setError(e);
220+
}
221+
return response.toString();
222+
}
211223

212224
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.iemr.common.data.grievance;
2+
3+
import java.sql.Timestamp;
4+
5+
public class GrievanceResponse {
6+
private Long grievanceId;
7+
private String complaintID;
8+
private String primaryNumber;
9+
private String complaintResolution;
10+
private String remarks;
11+
private Timestamp createdDate;
12+
private Timestamp lastModDate;
13+
14+
// Getters and Setters
15+
public Long getGrievanceId() {
16+
return grievanceId;
17+
}
18+
19+
public void setGrievanceId(Long grievanceId) {
20+
this.grievanceId = grievanceId;
21+
}
22+
23+
public String getComplaintID() {
24+
return complaintID;
25+
}
26+
27+
public void setComplaintID(String complaintID) {
28+
this.complaintID = complaintID;
29+
}
30+
31+
public String getPrimaryNumber() {
32+
return primaryNumber;
33+
}
34+
35+
public void setPrimaryNumber(String primaryNumber) {
36+
this.primaryNumber = primaryNumber;
37+
}
38+
39+
public String getComplaintResolution() {
40+
return complaintResolution;
41+
}
42+
43+
public void setComplaintResolution(String complaintResolution) {
44+
this.complaintResolution = complaintResolution;
45+
}
46+
47+
public String getRemarks() {
48+
return remarks;
49+
}
50+
51+
public void setRemarks(String remarks) {
52+
this.remarks = remarks;
53+
}
54+
55+
public Timestamp getCreatedDate() {
56+
return createdDate;
57+
}
58+
59+
public void setCreatedDate(Timestamp createdDate) {
60+
this.createdDate = createdDate;
61+
}
62+
63+
public Timestamp getLastModDate() {
64+
return lastModDate;
65+
}
66+
67+
public void setLastModDate(Timestamp lastModDate) {
68+
this.lastModDate = lastModDate;
69+
}
70+
}

src/main/java/com/iemr/common/repository/callhandling/BeneficiaryCallRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,5 +190,8 @@ public ArrayList<BeneficiaryCall> getExistingBCByCallIDAndAgentID(@Param("callID
190190
public int updateBeneficiaryRegIDInCall(@Param("benCallID") Long benCallID, @Param("beneficiaryRegID") Long beneficiaryRegID);
191191

192192
BeneficiaryCall findByBenCallID(Long benCallID);
193+
194+
@Query("SELECT b.remarks FROM BeneficiaryCall b WHERE b.beneficiaryRegID = :beneficiaryRegID")
195+
List<Object[]> fetchBenCallRemarks(@Param("beneficiaryRegID") Long beneficiaryRegID);
193196

194197
}

src/main/java/com/iemr/common/repository/grievance/GrievanceDataRepo.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.sql.Timestamp;
44
import java.util.ArrayList;
5+
import java.util.Date;
56
import java.util.List;
67
import java.util.Set;
78

@@ -123,5 +124,25 @@ public int updateCallCounter(@Param("callCounter") Integer callCounter,
123124
@Param("beneficiaryRegID") Long beneficiaryRegID,
124125
@Param("providerServiceMapID") Integer providerServiceMapID,
125126
@Param("userID") Integer userID);
127+
128+
@Query("SELECT g FROM GrievanceDetails g WHERE "
129+
+ "(g.state = :state OR :state IS NULL) "
130+
+ "AND (g.complaintResolution = :complaintResolution OR :complaintResolution IS NULL) "
131+
+ "AND g.createdDate BETWEEN :startDate AND :endDate")
132+
List<GrievanceDetails> fetchGrievanceDetailsBasedOnParams(
133+
@Param("state") String state,
134+
@Param("complaintResolution") String complaintResolution,
135+
@Param("startDate") Date startDate,
136+
@Param("endDate") Date endDate);
137+
138+
139+
@Query("SELECT g FROM GrievanceDetails g WHERE g.complaintID = :complaintID")
140+
List<GrievanceDetails> fetchGrievanceWorklistByComplaintID(@Param("complaintID") String complaintID);
141+
142+
143+
@Query("SELECT g.remarks FROM GrievanceDetails g WHERE g.complaintID = :complaintID")
144+
List<Object[]> fetchGrievanceWorklistRemarks(@Param("complaintID") String complaintID);
145+
146+
126147

127148
}

src/main/java/com/iemr/common/service/grievance/GrievanceHandlingService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public interface GrievanceHandlingService {
2121
public List<GrievanceWorklistDTO> getFormattedGrievanceData(String request) throws Exception;
2222

2323
public String saveComplaintResolution(String request) throws Exception;
24+
25+
public String getGrievanceDetailsWithRemarks(String request) throws Exception;
2426

2527

2628
}

src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java

Lines changed: 135 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package com.iemr.common.service.grievance;
22

33
import java.sql.Timestamp;
4+
import java.text.ParseException;
5+
import java.text.SimpleDateFormat;
46
import java.util.ArrayList;
7+
import java.util.Arrays;
58
import java.util.Comparator;
9+
import java.util.Date;
10+
import java.util.HashSet;
611
import java.util.Iterator;
712
import java.util.List;
813
import java.util.Set;
@@ -16,13 +21,16 @@
1621
import org.springframework.beans.factory.annotation.Value;
1722
import org.springframework.stereotype.Service;
1823

24+
import com.fasterxml.jackson.databind.ObjectMapper;
1925
import com.iemr.common.data.grievance.GetGrievanceWorklistRequest;
2026
import com.iemr.common.data.grievance.GrievanceAllocationRequest;
2127
import com.iemr.common.data.grievance.GrievanceDetails;
2228
import com.iemr.common.data.grievance.GrievanceReallocationRequest;
29+
import com.iemr.common.data.grievance.GrievanceResponse;
2330
import com.iemr.common.data.grievance.MoveToBinRequest;
2431
import com.iemr.common.dto.grivance.GrievanceTransactionDTO;
2532
import com.iemr.common.dto.grivance.GrievanceWorklistDTO;
33+
import com.iemr.common.repository.callhandling.BeneficiaryCallRepository;
2634
import com.iemr.common.repository.grievance.GrievanceDataRepo;
2735
import com.iemr.common.repository.grievance.GrievanceOutboundRepository;
2836
import 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

Comments
 (0)