Skip to content

Commit e70fc25

Browse files
srishtigrp78SR20290919coderabbitai[bot]SR20290919SR20290919
authored
AMM-1145 | API to fetch grievance outbound worklist (#161)
* adding changes related to encryption and decryption * making final field static * making enclosing method static * adding beneficiaryConsent param to createFeedback API * Update src/main/java/com/iemr/common/data/feedback/FeedbackDetails.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * adding beneficiary consent param feedbacklist response * adding space * adding code for schedule for grievance data sync * adding code rabbit code suggestions * adding code rabbit suggestions * code rabbit suggested changes to Model classes * adding sonar quality changes * adding sonar quality code suggestions * adding sonar quality check suggestions * adding code rabbit suggestions * adding constant instead of duplicate literals * adding cod changs to fetch unallocated grievance count * adding changes suggested by sonar quality check * adding code rabbit suggested changes * fixing config file * fixing space * fixing space issue * adding package for PrimaryDBConfig * adding code changes for allocate API for allocating grievance to agents * removing space * adding language related changes * add language related changes * adding name convention related changes * adding code rabbit changes * adding sonar quality check suggested changes * removing unused imports * adding properties related to Grievance in properties file * placing the placeholder for jwt secret key * Update package.yml updating upload artifact version to v4 * removing grievanc related properties from application properties file * adding space * removing extra space * adding code for API that fetches grievance outbound worklist * adding code rabbit suggested changes * another addition of code rabbit suggested changes * fixing row no --------- Co-authored-by: SR20290919 <SR20290919@APL-PG02PW8B> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: SR20290919 <SR20290919@192.168.1.34> Co-authored-by: SR20290919 <SR20290919@APL-PG02PW8B.wipro.com>
1 parent 1cd7d6f commit e70fc25

7 files changed

Lines changed: 287 additions & 2 deletions

File tree

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
package com.iemr.common.controller.grievance;
22

3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
38
import javax.ws.rs.core.MediaType;
49

510
import org.json.JSONException;
611
import org.slf4j.Logger;
712
import org.slf4j.LoggerFactory;
813
import org.springframework.beans.factory.annotation.Autowired;
14+
import org.springframework.http.HttpStatus;
15+
import org.springframework.http.ResponseEntity;
916
import org.springframework.web.bind.annotation.PostMapping;
1017
import org.springframework.web.bind.annotation.RequestBody;
1118
import org.springframework.web.bind.annotation.RequestMapping;
1219
import org.springframework.web.bind.annotation.RequestMethod;
1320
import org.springframework.web.bind.annotation.RestController;
1421

1522
import com.iemr.common.data.grievance.UnallocationRequest;
23+
import com.iemr.common.dto.grivance.GrievanceWorklistDTO;
1624
import com.iemr.common.service.grievance.GrievanceDataSync;
1725
import com.iemr.common.service.grievance.GrievanceHandlingService;
1826
import com.iemr.common.utils.exception.IEMRException;
@@ -117,5 +125,35 @@ public String moveToBin(@RequestBody String request) {
117125
}
118126
return response.toString();
119127
}
128+
129+
130+
131+
@Operation(summary = "get grievance outbound worklist)")
132+
@PostMapping(value = "/getGrievanceOutboundWorklist", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization")
133+
public ResponseEntity<List<GrievanceWorklistDTO>> getGrievanceOutboundWorklist(@Param(value = "{\"providerServiceMapId\":\" called service ID integer\", "
134+
+ "\"userId\":\"Optional - Integer ID of user that is assigned to\"}") @RequestBody String request) {
135+
logger.info("Request received for grievance worklist");
136+
List<GrievanceWorklistDTO> response = new ArrayList<>();
137+
try {
138+
response = grievanceHandlingService.getFormattedGrievanceData(request);
139+
140+
}
141+
142+
catch (Exception e) {
143+
logger.error("grievanceOutboundWorklist failed with error " + e.getMessage(), e);
144+
List<GrievanceWorklistDTO> errorResponse = new ArrayList<>();
145+
GrievanceWorklistDTO errorDTO = new GrievanceWorklistDTO();
146+
errorDTO.setComplaint("Error fetching grievance data");
147+
errorDTO.setSubjectOfComplaint(e.getMessage());
148+
149+
// Return error response with empty list and error message
150+
errorResponse.add(errorDTO);
151+
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
152+
}
153+
154+
155+
return ResponseEntity.ok(response);
156+
}
157+
120158

121159
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.iemr.common.data.grievance;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class GetGrievanceWorklistRequest {
7+
private Integer providerServiceMapID;
8+
private Integer userId;
9+
10+
// Constructor
11+
public GetGrievanceWorklistRequest(Integer providerServiceMapID, Integer userId) {
12+
this.providerServiceMapID = providerServiceMapID;
13+
this.userId = userId;
14+
}
15+
16+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.iemr.common.dto.grivance;
2+
3+
import java.io.Serializable;
4+
import java.sql.Timestamp;
5+
6+
7+
import lombok.Data;
8+
9+
@Data
10+
public class GrievanceTransactionDTO implements Serializable {
11+
private static final long serialVersionUID = 1L;
12+
13+
private String fileName;
14+
private String fileType;
15+
private String redressed;
16+
private Timestamp createdAt;
17+
private Timestamp updatedAt;
18+
private String comment;
19+
20+
// Constructor, Getters, and Setters
21+
22+
public GrievanceTransactionDTO(
23+
String fileName, String fileType,
24+
String redressed, Timestamp createdAt, Timestamp updatedAt, String comment) {
25+
super();
26+
this.fileName = fileName;
27+
this.fileType = fileType;
28+
this.redressed = redressed;
29+
this.createdAt = createdAt;
30+
this.updatedAt = updatedAt;
31+
this.comment = comment;
32+
}
33+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.iemr.common.dto.grivance;
2+
3+
import java.io.Serializable;
4+
import java.sql.Timestamp;
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
9+
import lombok.Data;
10+
import lombok.NoArgsConstructor;
11+
12+
@Data
13+
@NoArgsConstructor
14+
public class GrievanceWorklistDTO implements Serializable {
15+
private static final long serialVersionUID = 1L;
16+
17+
private String complaintID;
18+
private String subjectOfComplaint;
19+
private String complaint;
20+
private Long beneficiaryRegID;
21+
private Integer providerServiceMapID;
22+
private String firstName;
23+
private String lastName;
24+
private String primaryNumber;
25+
private List<GrievanceTransactionDTO> transactions = new ArrayList<>(); // transactions list
26+
private String severety;
27+
private String state;
28+
private Integer userId;
29+
private Boolean deleted;
30+
private String createdBy;
31+
private Timestamp createdDate;
32+
private Timestamp lastModDate;
33+
private Boolean isCompleted;
34+
private String gender;
35+
private String district;
36+
private Long beneficiaryID;
37+
private String age;
38+
private Boolean retryNeeded;
39+
private Integer callCounter;
40+
// private String lastCall; // Add this field if you want
41+
42+
43+
public GrievanceWorklistDTO(String complaintID, String subjectOfComplaint, String complaint,
44+
Long beneficiaryRegID, Integer providerServiceMapID, String firstName, String lastName,
45+
String primaryNumber, List<GrievanceTransactionDTO> transactions, String severety, String state,
46+
Integer userId, Boolean deleted, String createdBy, Timestamp createdDate, Timestamp lastModDate,
47+
Boolean isCompleted, String gender, String district, Long beneficiaryID, String age,
48+
Boolean retryNeeded, Integer callCounter) {
49+
super();
50+
this.complaintID = complaintID;
51+
this.subjectOfComplaint = subjectOfComplaint;
52+
this.complaint = complaint;
53+
this.beneficiaryRegID = beneficiaryRegID;
54+
this.providerServiceMapID = providerServiceMapID;
55+
this.firstName = firstName;
56+
this.lastName = lastName;
57+
this.primaryNumber = primaryNumber;
58+
this.transactions = transactions;
59+
this.severety = severety;
60+
this.state = state;
61+
this.userId = userId;
62+
this.deleted = deleted;
63+
this.createdBy = createdBy;
64+
this.createdDate = createdDate;
65+
this.lastModDate = lastModDate;
66+
this.isCompleted = isCompleted;
67+
this.gender = gender;
68+
this.district = district;
69+
this.beneficiaryID = beneficiaryID;
70+
this.age = age;
71+
this.retryNeeded = retryNeeded;
72+
this.callCounter = callCounter;
73+
}
74+
75+
76+
77+
78+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.iemr.common.repository.grievance;
2+
3+
import java.util.List;
4+
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.data.jpa.repository.query.Procedure;
7+
import org.springframework.data.repository.query.Param;
8+
import org.springframework.stereotype.Repository;
9+
10+
import com.iemr.common.data.grievance.GrievanceDetails;
11+
12+
13+
import jakarta.transaction.Transactional;
14+
15+
@Repository
16+
public interface GrievanceOutboundRepository extends JpaRepository<GrievanceDetails, Long> {
17+
18+
@Transactional
19+
@Procedure(procedureName = "Pr_Grievanceworklist")
20+
List<Object[]> getGrievanceWorklistData(@Param("providerServiceMapId") Integer providerServiceMapId,
21+
@Param("userId") Integer userId);
22+
23+
}

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

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

3+
import java.util.List;
4+
35
import org.json.JSONException;
46
import org.springframework.stereotype.Service;
57

8+
import com.iemr.common.dto.grivance.GrievanceWorklistDTO;
69
import com.iemr.common.utils.exception.IEMRException;
710

811
@Service
@@ -14,5 +17,7 @@ public interface GrievanceHandlingService {
1417
public String reallocateGrievances(String request) throws Exception;
1518

1619
public String moveToBin(String request) throws Exception;
20+
21+
public List<GrievanceWorklistDTO> getFormattedGrievanceData(String request) throws Exception;
1722

1823
}

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

Lines changed: 94 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.iemr.common.service.grievance;
22

3+
import java.sql.Timestamp;
34
import java.util.ArrayList;
45
import java.util.Comparator;
56
import java.util.Iterator;
@@ -15,24 +16,32 @@
1516
import org.springframework.beans.factory.annotation.Value;
1617
import org.springframework.stereotype.Service;
1718

19+
import com.iemr.common.data.grievance.GetGrievanceWorklistRequest;
1820
import com.iemr.common.data.grievance.GrievanceAllocationRequest;
1921
import com.iemr.common.data.grievance.GrievanceDetails;
2022
import com.iemr.common.data.grievance.GrievanceReallocationRequest;
2123
import com.iemr.common.data.grievance.MoveToBinRequest;
24+
import com.iemr.common.dto.grivance.GrievanceTransactionDTO;
25+
import com.iemr.common.dto.grivance.GrievanceWorklistDTO;
2226
import com.iemr.common.repository.grievance.GrievanceDataRepo;
27+
import com.iemr.common.repository.grievance.GrievanceOutboundRepository;
2328
import com.iemr.common.utils.exception.IEMRException;
2429
import com.iemr.common.utils.mapper.InputMapper;
2530

31+
import jakarta.transaction.Transactional;
32+
2633
@Service
2734
public class GrievanceHandlingServiceImpl implements GrievanceHandlingService {
2835

2936
private Logger logger = LoggerFactory.getLogger(GrievanceHandlingServiceImpl.class);
3037

3138
private final GrievanceDataRepo grievanceDataRepo;
39+
private final GrievanceOutboundRepository grievanceOutboundRepo;
3240

3341
@Autowired
34-
public GrievanceHandlingServiceImpl(GrievanceDataRepo grievanceDataRepo) {
42+
public GrievanceHandlingServiceImpl(GrievanceDataRepo grievanceDataRepo, GrievanceOutboundRepository grievanceOutboundRepo) {
3543
this.grievanceDataRepo = grievanceDataRepo;
44+
this.grievanceOutboundRepo = grievanceOutboundRepo;
3645
}
3746

3847
@Value("${grievanceAllocationRetryConfiguration}")
@@ -233,5 +242,88 @@ public String moveToBin(String request) throws Exception {
233242
// Step 5: Return the response as count of successfully unassigned grievances
234243
return totalUnassigned + " grievances successfully moved to bin.";
235244
}
236-
245+
246+
@Transactional
247+
public List<GrievanceWorklistDTO> getFormattedGrievanceData(String request) throws Exception {
248+
if (request == null || request.trim().isEmpty()) {
249+
throw new IllegalArgumentException("Request cannot be null or empty");
250+
}
251+
252+
GetGrievanceWorklistRequest getGrievanceWorklistRequest = InputMapper.gson().fromJson(request, GetGrievanceWorklistRequest.class);
253+
254+
List<GrievanceWorklistDTO> formattedGrievances = new ArrayList<>();
255+
256+
// Fetch grievance worklist data using @Procedure annotation
257+
List<Object[]> worklistData;
258+
try {
259+
if (getGrievanceWorklistRequest.getProviderServiceMapID() == null ||
260+
getGrievanceWorklistRequest.getUserId() == null) {
261+
throw new IllegalArgumentException("ProviderServiceMapID and UserId are required");
262+
}
263+
worklistData = grievanceOutboundRepo.getGrievanceWorklistData(getGrievanceWorklistRequest.getProviderServiceMapID(), getGrievanceWorklistRequest.getUserId());
264+
if (worklistData == null || worklistData.isEmpty()) {
265+
logger.info("No grievance data found for the given criteria");
266+
return new ArrayList<>();
267+
}
268+
}
269+
catch (Exception e) {
270+
logger.error("Failed to fetch grievance data: {}", e.getMessage());
271+
throw new Exception("Failed to retrieve grievance data", e);
272+
}
273+
274+
// Loop through the worklist data and format the response
275+
for (Object[] row : worklistData) {
276+
if (row == null || row.length < 28)
277+
{
278+
logger.warn("invalid row data received");
279+
continue;
280+
}
281+
GrievanceWorklistDTO grievance = new GrievanceWorklistDTO(
282+
(String) row[0], // complaintID
283+
(String) row[1], // subjectOfComplaint
284+
(String) row[2], // complaint
285+
(Long) row[3], // beneficiaryRegID
286+
(Integer) row[4],// providerServiceMapID
287+
(String) row[5], // primaryNumber
288+
289+
(String) row[20], // firstName
290+
(String) row[21], // lastName
291+
292+
new ArrayList<>(),// transactions (initially empty, will be populated later)
293+
(String) row[12], // severety
294+
(String) row[13], // state
295+
(Integer) row[14],// userId
296+
(Boolean) row[15],// deleted
297+
(String) row[16],// createdBy
298+
(Timestamp) row[17], // createdDate
299+
(Timestamp) row[18], // lastModDate
300+
(Boolean) row[19], // isCompleted
301+
(String) row[22], // gender
302+
(String) row[23], // district
303+
(Long) row[24], // beneficiaryID
304+
(String) row[25], // age
305+
(Boolean) row[26], // retryNeeded
306+
(Integer) row[27] // callCounter
307+
);
308+
309+
// Extract transactions from the current row and add them to the grievance object
310+
GrievanceTransactionDTO transaction = new GrievanceTransactionDTO(
311+
312+
(String) row[6], // fileName
313+
(String) row[7], // fileType
314+
(String) row[8], // redressed
315+
(Timestamp) row[9], // createdAt
316+
(Timestamp) row[10], // updatedAt
317+
(String) row[11] // comment
318+
);
319+
320+
grievance.getTransactions().add(transaction); // Add the transaction to the grievance's list
321+
322+
// Add the grievance to the result list
323+
formattedGrievances.add(grievance);
324+
}
325+
326+
return formattedGrievances;
327+
328+
}
237329
}

0 commit comments

Comments
 (0)