You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

449 lines
20 KiB

2 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
2 years ago
2 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
2 years ago
2 years ago
​
​
​
​
​
2 years ago
2 years ago
​
​
​
​
​
2 years ago
2 years ago
​
​
​
​
​
2 years ago
2 years ago
​
​
​
​
2 years ago
2 years ago
​
​
​
​
2 years ago
2 years ago
​
​
​
​
2 years ago
2 years ago
​
​
​
2 years ago
2 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
2 years ago
2 years ago
​
​
​
2 years ago
2 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
2 years ago
2 years ago
​
​
​
​
​
2 years ago
2 years ago
​
​
​
​
​
2 years ago
2 years ago
​
​
​
​
​
2 years ago
2 years ago
​
​
​
​
2 years ago
2 years ago
​
​
​
​
2 years ago
2 years ago
​
​
​
​
2 years ago
2 years ago
​
​
​
2 years ago
2 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
  1. package in.gov.chennaicorporation.gccoffice.pensioner.service;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.List;
  5. import java.util.Map;
  6. import javax.sql.DataSource;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.beans.factory.annotation.Qualifier;
  9. import org.springframework.jdbc.core.JdbcTemplate;
  10. import org.springframework.stereotype.Service;
  11. import org.springframework.web.client.RestTemplate;
  12. import com.fasterxml.jackson.databind.ObjectMapper;
  13. import in.gov.chennaicorporation.gccoffice.configuration.AppConfig;
  14. @Service
  15. public class ReportApiService {
  16. @Autowired
  17. private JdbcTemplate jdbcTemplate;
  18. private RestTemplate restTemplate;
  19. private ObjectMapper objectMapper;
  20. @Autowired
  21. private AppConfig appconfig;
  22. public ReportApiService(RestTemplate restTemplate, ObjectMapper objectMapper) {
  23. this.restTemplate = restTemplate;
  24. this.objectMapper = objectMapper;
  25. }
  26. @Autowired
  27. public void setDataSource(@Qualifier("mysqlPensionerDataSource") DataSource dataSource) {
  28. this.jdbcTemplate = new JdbcTemplate(dataSource);
  29. }
  30. public List<Map<String, Object>> getFileCategories() {
  31. String sql = "SELECT id,file_name FROM file_category_master";
  32. return jdbcTemplate.queryForList(sql);
  33. }
  34. // String sql = "SELECT fm.file_name, " +
  35. // "COALESCE(SUM(CASE WHEN pd.file_status IN (1,3) THEN 1 ELSE 0 END), 0) AS audit_pending, " +
  36. // "COALESCE(SUM(CASE WHEN pd.file_status IN (2,5,6,9) THEN 1 ELSE 0 END), 0) AS department_pending, " +
  37. // "COALESCE(SUM(CASE WHEN pd.file_status IN (4,7,8,10) THEN 1 ELSE 0 END), 0) AS pension_pending, " +
  38. // "COALESCE(SUM(CASE WHEN pd.file_status = 11 THEN 1 ELSE 0 END), 0) AS completed " +
  39. // "FROM gcc_pensioner.file_category_master fm " +
  40. // "LEFT JOIN gcc_pensioner.pensioner_details pd " +
  41. // "ON pd.file_category = fm.id " +
  42. // "AND pd.created_date BETWEEN ? AND ? " +
  43. // "AND pd.dept_id = ? " +
  44. // "AND pd.is_closed = 0 " + // Ensure only active records are considered
  45. // "GROUP BY fm.file_name";
  46. public List<Map<String, Object>> getReportData(String startDate, String endDate, String deptId) {
  47. String sql = "SELECT fm.id, " +
  48. " fm.file_name AS file_name, " +
  49. // Audit Pending Count
  50. " (SELECT COUNT(*) FROM pensioner_details pd " +
  51. " WHERE pd.file_status IN (1,3) AND pd.dept_id = ? " +
  52. " AND pd.file_category=fm.id "+
  53. " AND pd.is_closed = 0 " +
  54. " AND DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?)) AS audit_pending, " +
  55. // Department Pending Count
  56. " (SELECT COUNT(*) FROM pensioner_details pd " +
  57. " WHERE pd.file_status IN (2,5,6,9) AND pd.dept_id = ? " +
  58. " AND pd.file_category=fm.id "+
  59. " AND pd.is_closed = 0 " +
  60. " AND DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?)) AS department_pending, " +
  61. // Pension Pending Count
  62. " (SELECT COUNT(*) FROM pensioner_details pd " +
  63. " WHERE pd.file_status IN (4,7,8,10) AND pd.dept_id = ? " +
  64. " AND pd.file_category=fm.id "+
  65. " AND pd.is_closed = 0 " +
  66. " AND DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?)) AS pension_pending, " +
  67. // Completed Count (SUM of two tables)
  68. " (COALESCE((SELECT COUNT(*) FROM pensioner_details pd " +
  69. " WHERE pd.file_status = 11 AND pd.dept_id = ? " +
  70. " AND pd.file_category=fm.id "+
  71. " AND pd.is_closed = 0 " +
  72. " AND DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?)), 0) " +
  73. " + " +
  74. " COALESCE((SELECT COUNT(*) FROM cps_pensioner_details cps " +
  75. " WHERE cps.file_status = 11 AND cps.dept_id = ? " +
  76. " AND cps.file_category=fm.id "+
  77. " AND DATE(cps.created_date) BETWEEN DATE(?) AND DATE(?)), 0)) AS completed, " +
  78. // Total Files Count (SUM of two tables)
  79. " (COALESCE((SELECT COUNT(*) FROM pensioner_details pd " +
  80. " WHERE pd.dept_id = ? " +
  81. " AND pd.file_category=fm.id "+
  82. " AND pd.is_closed = 0 " +
  83. " AND DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?)), 0) " +
  84. " + " +
  85. " COALESCE((SELECT COUNT(*) FROM cps_pensioner_details cps " +
  86. " WHERE cps.dept_id = ? " +
  87. " AND cps.file_category=fm.id "+
  88. " AND DATE(cps.created_date) BETWEEN DATE(?) AND DATE(?)), 0)) AS total_files " +
  89. "FROM file_category_master fm " +
  90. "GROUP BY fm.id, fm.file_name " + // Correct placement of GROUP BY
  91. "ORDER BY fm.id"; // ORDER BY after GROUP BY
  92. List<Object> params = new ArrayList<>();
  93. // Adding parameters in the correct order for each subquery
  94. for (int i = 0; i < 7; i++) { // 6 subqueries that use deptId, startDate, endDate
  95. params.add(deptId);
  96. params.add(startDate);
  97. params.add(endDate);
  98. }
  99. return jdbcTemplate.queryForList(sql, params.toArray());
  100. }
  101. public List<Map<String, Object>> getReportDetails(String startDate, String endDate, Integer deptId, Integer fileCatId, List<String> fileStatus) {
  102. String sql = "";
  103. List<Object> params = new ArrayList<>();
  104. // Construct fileStatus condition
  105. String fileStatusCondition = (fileStatus != null && !fileStatus.isEmpty())
  106. ? " AND pd.file_status IN (" + String.join(",", Collections.nCopies(fileStatus.size(), "?")) + ")"
  107. : ""; // Skip condition if fileStatus is empty or null
  108. if (fileCatId == 6) {
  109. sql = "SELECT pd.emp_no, pd.emp_name, pd.designation, pd.type_of_retirement, pd.reason_for_pending, " +
  110. "fm.file_status AS fst, pd.file_category_name, pd.remarks, DATE(pd.created_date) AS created_date " +
  111. "FROM cps_pensioner_details pd " +
  112. "INNER JOIN file_status_master fm ON pd.file_status = fm.id " +
  113. "WHERE DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?) " + // First date filter
  114. "AND pd.dept_id = ? " + // Next deptId
  115. "AND pd.file_category = ? " + // Next fileCatId
  116. fileStatusCondition; // Last fileStatus condition
  117. } else {
  118. sql = "SELECT pd.*, fm.file_status AS fst " +
  119. "FROM pensioner_details pd " +
  120. "INNER JOIN file_status_master fm ON pd.file_status = fm.id " +
  121. "WHERE DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?) " + // First date filter
  122. "AND pd.dept_id = ? " + // Next deptId
  123. "AND pd.file_category = ? " + // Next fileCatId
  124. fileStatusCondition; // Last fileStatus condition
  125. }
  126. // Add date range parameters first
  127. params.add(startDate);
  128. params.add(endDate);
  129. // Add deptId and fileCatId parameters
  130. params.add(deptId);
  131. params.add(fileCatId);
  132. // Add fileStatus parameters if present
  133. if (fileStatus != null && !fileStatus.isEmpty()) {
  134. params.addAll(fileStatus);
  135. }
  136. System.out.println("Executing SQL Query: " + sql);
  137. System.out.println("Query Parameters: " + params);
  138. return jdbcTemplate.queryForList(sql, params.toArray());
  139. }
  140. //pensioner side reorts methods
  141. public List<Map<String, Object>> getstatus() {
  142. String sql = "select id , file_status from file_status_master";
  143. return jdbcTemplate.queryForList(sql);
  144. }
  145. public List<Map<String, Object>> getdepartment() {
  146. String sql = "select dept_id ,dept_name from department_master WHERE dept_id <> 2000";
  147. return jdbcTemplate.queryForList(sql);
  148. }
  149. // public List<Map<String, Object>> getReportDatapension(String startDate, String endDate, String fileCategoryId) {
  150. // String sql = "SELECT fm.file_name, " +
  151. // "fm.id AS file_category_id, " +
  152. // "COALESCE(dm.dept_name, 'All Departments') AS dept_name, " +
  153. // "COALESCE(SUM(CASE WHEN pd.file_status IN (1,3) OR cps.file_status IN (1,3) THEN 1 ELSE 0 END), 0) AS audit_pending, " +
  154. // "COALESCE(SUM(CASE WHEN pd.file_status IN (2,5,6,9) OR cps.file_status IN (2,5,6,9) THEN 1 ELSE 0 END), 0) AS department_pending, " +
  155. // "COALESCE(SUM(CASE WHEN pd.file_status IN (4,7,8,10) OR cps.file_status IN (4,7,8,10) THEN 1 ELSE 0 END), 0) AS pension_pending, " +
  156. // "COALESCE(SUM(CASE WHEN pd.file_status = 11 OR cps.file_status = 11 THEN 1 ELSE 0 END), 0) AS completed, " +
  157. // "COALESCE(COUNT(pd.id) + COUNT(cps.id), 0) AS total_files " +
  158. // "FROM gcc_pensioner.file_category_master fm " +
  159. // "LEFT JOIN gcc_pensioner.cps_pensioner_details cps ON cps.file_category = fm.id " +
  160. // "LEFT JOIN gcc_pensioner.pensioner_details pd ON pd.file_category = fm.id " +
  161. // "LEFT JOIN gcc_pensioner.department_master dm ON dm.dept_id = COALESCE(pd.dept_id, cps.dept_id) " +
  162. // "WHERE (pd.created_date BETWEEN ? AND ? OR cps.created_date BETWEEN ? AND ?) " +
  163. // (fileCategoryId != null && !fileCategoryId.isEmpty() ? "AND fm.id = ? " : "") +
  164. // "GROUP BY fm.id, fm.file_name, dm.dept_name " +
  165. // "ORDER BY fm.id, dm.dept_name, fm.file_name";
  166. //
  167. // System.out.println("Executing SQL: " + sql);
  168. //
  169. // List<Object> params = new ArrayList<>();
  170. // params.add(startDate);
  171. // params.add(endDate);
  172. // params.add(startDate); // Date filter applies to both `pd` and `cps`
  173. // params.add(endDate);
  174. //
  175. // if (fileCategoryId != null && !fileCategoryId.isEmpty()) {
  176. // params.add(fileCategoryId);
  177. // }
  178. //
  179. // return jdbcTemplate.queryForList(sql, params.toArray());
  180. // }
  181. public List<Map<String, Object>> getReportDatapension(String startDate, String endDate, String fileCategoryId) {
  182. String sql = "SELECT dm.dept_id, " +
  183. " dm.dept_name AS dept_name, " +
  184. // Audit Pending Count
  185. " (SELECT COUNT(*) FROM pensioner_details pd " +
  186. " WHERE pd.file_status IN (1,3) AND pd.dept_id = dm.dept_id " +
  187. " AND pd.is_closed = 0 " + // Added condition
  188. " AND ( ? IS NULL OR pd.file_category = ? ) " +
  189. " AND DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?)) AS audit_pending, " +
  190. // Department Pending Count
  191. " (SELECT COUNT(*) FROM pensioner_details pd " +
  192. " WHERE pd.file_status IN (2,5,6,9) AND pd.dept_id = dm.dept_id " +
  193. " AND pd.is_closed = 0 " + // Added condition
  194. " AND ( ? IS NULL OR pd.file_category = ? ) " +
  195. " AND DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?)) AS department_pending, " +
  196. // Pension Pending Count
  197. " (SELECT COUNT(*) FROM pensioner_details pd " +
  198. " WHERE pd.file_status IN (4,7,8,10) AND pd.dept_id = dm.dept_id " +
  199. " AND pd.is_closed = 0 " + // Added condition
  200. " AND ( ? IS NULL OR pd.file_category = ? ) " +
  201. " AND DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?)) AS pension_pending, " +
  202. // Completed Count
  203. " (SELECT COUNT(*) FROM pensioner_details pd " +
  204. " WHERE pd.file_status = 11 AND pd.dept_id = dm.dept_id " +
  205. " AND pd.is_closed = 0 " + // Added condition
  206. " AND ( ? IS NULL OR pd.file_category = ? ) " +
  207. " AND DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?)) " +
  208. " + " +
  209. " (SELECT COUNT(*) FROM cps_pensioner_details cps " +
  210. " WHERE cps.file_status = 11 AND cps.dept_id = dm.dept_id " +
  211. " AND ( ? IS NULL OR cps.file_category = ? ) " +
  212. " AND DATE(cps.created_date) BETWEEN DATE(?) AND DATE(?)) AS completed, " +
  213. // Total Files Count
  214. " (SELECT COUNT(*) pensioner_details pd " +
  215. " WHERE pd.dept_id = dm.dept_id " +
  216. " AND pd.is_closed = 0 " + // Added condition
  217. " AND ( ? IS NULL OR pd.file_category = ? ) " +
  218. " AND DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?)) " +
  219. " + " +
  220. " (SELECT COUNT(*) FROM cps_pensioner_details cps " +
  221. " WHERE cps.dept_id = dm.dept_id " +
  222. " AND ( ? IS NULL OR cps.file_category = ? ) " +
  223. " AND DATE(cps.created_date) BETWEEN DATE(?) AND DATE(?)) AS total_files " +
  224. "FROM department_master dm " +
  225. "ORDER BY dm.dept_id";
  226. System.out.println("Executing SQL: " + sql);
  227. List<Object> params = new ArrayList<>();
  228. // Adding parameters explicitly without a loop
  229. params.add(fileCategoryId != null && !fileCategoryId.isEmpty() ? fileCategoryId : null);
  230. params.add(fileCategoryId);
  231. params.add(startDate);
  232. params.add(endDate);
  233. params.add(fileCategoryId != null && !fileCategoryId.isEmpty() ? fileCategoryId : null);
  234. params.add(fileCategoryId);
  235. params.add(startDate);
  236. params.add(endDate);
  237. params.add(fileCategoryId != null && !fileCategoryId.isEmpty() ? fileCategoryId : null);
  238. params.add(fileCategoryId);
  239. params.add(startDate);
  240. params.add(endDate);
  241. params.add(fileCategoryId != null && !fileCategoryId.isEmpty() ? fileCategoryId : null);
  242. params.add(fileCategoryId);
  243. params.add(startDate);
  244. params.add(endDate);
  245. params.add(fileCategoryId != null && !fileCategoryId.isEmpty() ? fileCategoryId : null);
  246. params.add(fileCategoryId);
  247. params.add(startDate);
  248. params.add(endDate);
  249. params.add(fileCategoryId != null && !fileCategoryId.isEmpty() ? fileCategoryId : null);
  250. params.add(fileCategoryId);
  251. params.add(startDate);
  252. params.add(endDate);
  253. params.add(fileCategoryId != null && !fileCategoryId.isEmpty() ? fileCategoryId : null);
  254. params.add(fileCategoryId);
  255. params.add(startDate);
  256. params.add(endDate);
  257. return jdbcTemplate.queryForList(sql, params.toArray());
  258. }
  259. // public List<Map<String, Object>> getReportDetailspension(String startDate, String endDate, List<String> deptIds, Integer fileCatId, List<String> fileStatus) {
  260. // String sql = "";
  261. // List<Object> params = new ArrayList<>();
  262. //
  263. // boolean selectAll = deptIds.contains("ALL");
  264. //
  265. // // ✅ If "ALL" is selected, remove department filtering
  266. // String deptCondition = selectAll ? "1=1" : "pd.dept_id IN (" + String.join(",", Collections.nCopies(deptIds.size(), "?")) + ")";
  267. //
  268. // // ✅ Handle fileStatus as multiple values in IN clause
  269. // String fileStatusCondition = (fileStatus != null && !fileStatus.isEmpty())
  270. // ? " AND pd.file_status IN (" + String.join(",", Collections.nCopies(fileStatus.size(), "?")) + ")"
  271. // : ""; // Skip condition if fileStatus is empty or null
  272. //
  273. // if (fileCatId == 6) {
  274. // sql = "SELECT pd.emp_no, pd.emp_name, pd.designation, pd.type_of_retirement, pd.reason_for_pending, " +
  275. // "fm.file_status AS fst, pd.file_category_name, pd.remarks, DATE(pd.created_date) AS created_date " +
  276. // "FROM cps_pensioner_details pd " +
  277. // "INNER JOIN file_status_master fm ON pd.file_status = fm.id " +
  278. // "WHERE " + deptCondition + " AND pd.file_category = ?" + fileStatusCondition;
  279. //
  280. // if (!selectAll) {
  281. // params.addAll(deptIds);
  282. // }
  283. // params.add(fileCatId);
  284. // if (fileStatus != null && !fileStatus.isEmpty()) {
  285. // params.addAll(fileStatus);
  286. // }
  287. // }
  288. // else {
  289. // sql = "SELECT pd.*, fm.file_status as fst FROM pensioner_details pd " +
  290. // "INNER JOIN file_status_master fm ON pd.file_status = fm.id " +
  291. // "WHERE " + deptCondition + " AND pd.file_category = ?" + fileStatusCondition;
  292. //
  293. // if (!selectAll) {
  294. // params.addAll(deptIds);
  295. // }
  296. // params.add(fileCatId);
  297. // if (fileStatus != null && !fileStatus.isEmpty()) {
  298. // params.addAll(fileStatus);
  299. // }
  300. // }
  301. //
  302. // System.out.println("Executing SQL Query: " + sql);
  303. // System.out.println("Query Parameters: " + params);
  304. //
  305. // return jdbcTemplate.queryForList(sql, params.toArray());
  306. // }
  307. public List<Map<String, Object>> getReportDetailspension(String startDate, String endDate, List<String> deptIds, Integer fileCatId, List<String> fileStatus) {
  308. String sql = "";
  309. List<Object> params = new ArrayList<>();
  310. boolean selectAll = deptIds.contains("ALL");
  311. // ✅ If "ALL" is selected, remove department filtering
  312. String deptCondition = selectAll ? "1=1" : "pd.dept_id IN (" + String.join(",", Collections.nCopies(deptIds.size(), "?")) + ")";
  313. // ✅ Handle fileStatus as multiple values in IN clause
  314. String fileStatusCondition = (fileStatus != null && !fileStatus.isEmpty())
  315. ? " AND pd.file_status IN (" + String.join(",", Collections.nCopies(fileStatus.size(), "?")) + ")"
  316. : ""; // Skip condition if fileStatus is empty or null
  317. if (fileCatId == 6) {
  318. sql = "SELECT pd.emp_no, pd.emp_name, pd.designation, pd.type_of_retirement, pd.reason_for_pending, " +
  319. "fm.file_status AS fst, pd.file_category_name, pd.remarks, DATE(pd.created_date) AS created_date " +
  320. "FROM cps_pensioner_details pd " +
  321. "INNER JOIN file_status_master fm ON pd.file_status = fm.id " +
  322. "WHERE DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?) " + // First: Date filter
  323. "AND pd.file_category = ? " + // Second: File category filter
  324. "AND " + deptCondition + // Third: Department condition
  325. fileStatusCondition; // Last: File status condition
  326. } else {
  327. sql = "SELECT pd.*, fm.file_status as fst " +
  328. "FROM pensioner_details pd " +
  329. "INNER JOIN file_status_master fm ON pd.file_status = fm.id " +
  330. "WHERE DATE(pd.created_date) BETWEEN DATE(?) AND DATE(?) " + // First: Date filter
  331. "AND pd.file_category = ? " + // Second: File category filter
  332. "AND " + deptCondition + // Third: Department condition
  333. fileStatusCondition; // Last: File status condition
  334. }
  335. // Add date range parameters first
  336. params.add(startDate);
  337. params.add(endDate);
  338. // Add file category next
  339. params.add(fileCatId);
  340. // Add department filter parameters if not "ALL"
  341. if (!selectAll) {
  342. params.addAll(deptIds);
  343. }
  344. // Add fileStatus parameters if present
  345. if (fileStatus != null && !fileStatus.isEmpty()) {
  346. params.addAll(fileStatus);
  347. }
  348. System.out.println("Executing SQL Query: " + sql);
  349. System.out.println("Query Parameters: " + params);
  350. return jdbcTemplate.queryForList(sql, params.toArray());
  351. }
  352. public List<Map<String, Object>> getDepartmentpending(int file_category) {
  353. String sql = "SELECT dept_name, emp_name, emp_no, file_category_name, file_status, file_moved_date, remarks " +
  354. "FROM pensioner_details WHERE file_status IN (2, 5, 6, 9) AND file_category=?";
  355. List<Map<String, Object>> results = jdbcTemplate.queryForList(sql, file_category);
  356. return jdbcTemplate.queryForList(sql, file_category);
  357. }
  358. }