diff --git a/src/main/java/in/gov/chennaicorporation/mobileservice/manhole/service/ManHoleActivity.java b/src/main/java/in/gov/chennaicorporation/mobileservice/manhole/service/ManHoleActivity.java index a453f70f..8252917e 100644 --- a/src/main/java/in/gov/chennaicorporation/mobileservice/manhole/service/ManHoleActivity.java +++ b/src/main/java/in/gov/chennaicorporation/mobileservice/manhole/service/ManHoleActivity.java @@ -733,10 +733,33 @@ public class ManHoleActivity { String sql = "SELECT " + " z.zone," + " COUNT(t.drain_id) AS total_drain," - + " SUM(CASE WHEN t.total_manhole = t.completed_manhole THEN 1 ELSE 0 END) AS total_drain_completed," - + " SUM(CASE WHEN t.total_manhole > t.completed_manhole THEN 1 ELSE 0 END) AS total_drain_pending," - + " ROUND(SUM(CASE WHEN t.total_manhole = t.completed_manhole THEN 1 ELSE 0 END) * 100.0 / COUNT(t.drain_id), 2) AS drain_completed_percentage," - + " ROUND(SUM(CASE WHEN t.total_manhole > t.completed_manhole THEN 1 ELSE 0 END) * 100.0 / COUNT(t.drain_id), 2) AS drain_pending_percentage " + + + " SUM(CASE " + + " WHEN t.completed_manhole >= t.total_manhole " + + " THEN 1 ELSE 0 " + + " END) AS total_drain_completed," + + + " SUM(CASE " + + " WHEN t.completed_manhole < t.total_manhole " + + " THEN 1 ELSE 0 " + + " END) AS total_drain_pending," + + + " ROUND(" + + " SUM(CASE " + + " WHEN t.completed_manhole >= t.total_manhole " + + " THEN 1 ELSE 0 " + + " END) * 100.0 / NULLIF(COUNT(t.drain_id), 0)," + + " 2" + + " ) AS drain_completed_percentage," + + + " ROUND(" + + " SUM(CASE " + + " WHEN t.completed_manhole < t.total_manhole " + + " THEN 1 ELSE 0 " + + " END) * 100.0 / NULLIF(COUNT(t.drain_id), 0)," + + " 2" + + " ) AS drain_pending_percentage " + + "FROM (" + " SELECT '01' AS zone UNION ALL" + " SELECT '02' UNION ALL" @@ -754,21 +777,46 @@ public class ManHoleActivity { + " SELECT '14' UNION ALL" + " SELECT '15'" + ") z " + + "LEFT JOIN (" + " SELECT " + " d.drain_id," + " d.zone," - + " SUM(d.manhole_count) AS total_manhole," + + + " MAX(d.manhole_count) AS total_manhole," + + " COUNT(DISTINCT CASE " - + " WHEN ba.activity_id IS NOT NULL AND aa.activity_id IS NOT NULL THEN m.manhole_id " - + " END) AS completed_manhole" - + " FROM drain_master d" - + " LEFT JOIN manhole_master m ON d.drain_id = m.drain_id AND m.isactive=1 AND m.isdelete=0" - + " LEFT JOIN before_activity ba ON m.manhole_id = ba.manhole_id AND ba.isactive=1 AND ba.isdelete=0" - + " LEFT JOIN after_activity aa ON m.manhole_id = aa.manhole_id AND aa.isactive=1 AND aa.isdelete=0" - + " WHERE d.isactive = 1 AND d.isdelete = 0" - + " GROUP BY d.drain_id, d.zone" + + " WHEN ba.activity_id IS NOT NULL " + + " AND aa.activity_id IS NOT NULL " + + " THEN m.manhole_id " + + " END) AS completed_manhole " + + + " FROM drain_master d " + + + " LEFT JOIN manhole_master m " + + " ON d.drain_id = m.drain_id " + + " AND m.isactive = 1 " + + " AND m.isdelete = 0 " + + + " LEFT JOIN before_activity ba " + + " ON m.manhole_id = ba.manhole_id " + + " AND ba.isactive = 1 " + + " AND ba.isdelete = 0 " + + + " LEFT JOIN after_activity aa " + + " ON m.manhole_id = aa.manhole_id " + + " AND aa.isactive = 1 " + + " AND aa.isdelete = 0 " + + + " WHERE d.isactive = 1 " + + " AND d.isdelete = 0 " + + + " GROUP BY " + + " d.drain_id, " + + " d.zone " + + ") t ON z.zone = t.zone " + + "GROUP BY z.zone " + "ORDER BY z.zone"; @@ -776,33 +824,86 @@ public class ManHoleActivity { } public List> getWardReport(String zone) { - String sql = "SELECT " - + " t.zone," - + " t.ward," - + " COUNT(t.drain_id) AS total_drain," - + " SUM(CASE WHEN t.total_manhole = t.completed_manhole THEN 1 ELSE 0 END) AS total_drain_completed," - + " SUM(CASE WHEN t.total_manhole > t.completed_manhole THEN 1 ELSE 0 END) AS total_drain_pending," - + " ROUND(SUM(CASE WHEN t.total_manhole = t.completed_manhole THEN 1 ELSE 0 END) * 100.0 / COUNT(t.drain_id), 2) AS drain_completed_percentage," - + " ROUND(SUM(CASE WHEN t.total_manhole > t.completed_manhole THEN 1 ELSE 0 END) * 100.0 / COUNT(t.drain_id), 2) AS drain_pending_percentage " - + "FROM (" - + " SELECT " - + " d.drain_id," - + " d.zone," - + " d.ward," - + " SUM(d.manhole_count) AS total_manhole," - + " COUNT(DISTINCT CASE " - + " WHEN ba.activity_id IS NOT NULL AND aa.activity_id IS NOT NULL THEN m.manhole_id " - + " END) AS completed_manhole" - + " FROM drain_master d" - + " LEFT JOIN manhole_master m ON d.drain_id = m.drain_id AND m.isactive=1 AND m.isdelete=0" - + " LEFT JOIN before_activity ba ON m.manhole_id = ba.manhole_id AND ba.isactive=1 AND ba.isdelete=0" - + " LEFT JOIN after_activity aa ON m.manhole_id = aa.manhole_id AND aa.isactive=1 AND aa.isdelete=0" - + " WHERE d.isactive = 1 AND d.isdelete = 0" - + " AND d.zone = ?" - + " GROUP BY d.drain_id, d.zone, d.ward" - + ") t " - + "GROUP BY t.zone, t.ward " - + "ORDER BY t.ward"; + String sql = "SELECT " + + " t.zone, " + + " t.ward, " + + " COUNT(t.drain_id) AS total_drain, " + + " SUM( " + + " CASE " + + " WHEN t.total_manhole > 0 " + + " AND t.completed_manhole >= t.total_manhole " + + " THEN 1 " + + " ELSE 0 " + + " END " + + " ) AS total_drain_completed, " + + " SUM( " + + " CASE " + + " WHEN t.completed_manhole < t.total_manhole " + + " THEN 1 " + + " ELSE 0 " + + " END " + + " ) AS total_drain_pending, " + + " ROUND( " + + " SUM( " + + " CASE " + + " WHEN t.total_manhole > 0 " + + " AND t.completed_manhole >= t.total_manhole " + + " THEN 1 " + + " ELSE 0 " + + " END " + + " ) * 100.0 / NULLIF(COUNT(t.drain_id), 0), " + + " 2 " + + " ) AS drain_completed_percentage, " + + " ROUND( " + + " SUM( " + + " CASE " + + " WHEN t.completed_manhole < t.total_manhole " + + " THEN 1 " + + " ELSE 0 " + + " END " + + " ) * 100.0 / NULLIF(COUNT(t.drain_id), 0), " + + " 2 " + + " ) AS drain_pending_percentage " + + "FROM ( " + + " SELECT " + + " d.drain_id, " + + " d.zone, " + + " d.ward, " + + " MAX(d.manhole_count) AS total_manhole, " + + " COUNT( " + + " DISTINCT CASE " + + " WHEN ba.activity_id IS NOT NULL " + + " AND aa.activity_id IS NOT NULL " + + " THEN m.manhole_id " + + " END " + + " ) AS completed_manhole " + + " FROM drain_master d " + + " LEFT JOIN manhole_master m " + + " ON d.drain_id = m.drain_id " + + " AND m.isactive = 1 " + + " AND m.isdelete = 0 " + + " LEFT JOIN before_activity ba " + + " ON m.manhole_id = ba.manhole_id " + + " AND ba.isactive = 1 " + + " AND ba.isdelete = 0 " + + " LEFT JOIN after_activity aa " + + " ON m.manhole_id = aa.manhole_id " + + " AND aa.isactive = 1 " + + " AND aa.isdelete = 0 " + + " WHERE " + + " d.isactive = 1 " + + " AND d.isdelete = 0 " + + " AND d.zone = ? " + + " GROUP BY " + + " d.drain_id, " + + " d.zone, " + + " d.ward " + + ") t " + + "GROUP BY " + + " t.zone, " + + " t.ward " + + "ORDER BY " + + " t.ward"; return jdbcManHoleTemplate.queryForList(sql, zone); }