|
|
|
@ -56,10 +56,9 @@ public class ManHoleActivity { |
|
|
|
@Autowired |
|
|
|
public ManHoleActivity(Environment environment) { |
|
|
|
this.environment = environment; |
|
|
|
this.fileBaseUrl=environment.getProperty("fileBaseUrl"); |
|
|
|
this.fileBaseUrl = environment.getProperty("fileBaseUrl"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static String generateRandomString() { |
|
|
|
StringBuilder result = new StringBuilder(STRING_LENGTH); |
|
|
|
for (int i = 0; i < STRING_LENGTH; i++) { |
|
|
|
@ -119,7 +118,7 @@ public class ManHoleActivity { |
|
|
|
// Datetime string |
|
|
|
String datetimetxt = DateTimeUtil.getCurrentDateTime(); |
|
|
|
|
|
|
|
datetimetxt = datetimetxt + "_"+ generateRandomFileString(6); // Attached Random text |
|
|
|
datetimetxt = datetimetxt + "_" + generateRandomFileString(6); // Attached Random text |
|
|
|
|
|
|
|
// File name |
|
|
|
String fileName = name + "_" + id + "_" + datetimetxt + "_" + file.getOriginalFilename(); |
|
|
|
@ -135,15 +134,13 @@ public class ManHoleActivity { |
|
|
|
// Get the bytes of the file |
|
|
|
byte[] bytes = file.getBytes(); |
|
|
|
|
|
|
|
if(filetype.equalsIgnoreCase("image")) |
|
|
|
{ |
|
|
|
if (filetype.equalsIgnoreCase("image")) { |
|
|
|
// Compress the image |
|
|
|
BufferedImage image = ImageIO.read(new ByteArrayInputStream(bytes)); |
|
|
|
byte[] compressedBytes = compressImage(image, 0.5f); // Compress with 50% quality |
|
|
|
// Write the bytes to the file |
|
|
|
Files.write(path, compressedBytes); |
|
|
|
} |
|
|
|
else { |
|
|
|
} else { |
|
|
|
// Write the bytes to the file |
|
|
|
Files.write(path, bytes); |
|
|
|
} |
|
|
|
@ -153,7 +150,7 @@ public class ManHoleActivity { |
|
|
|
// Format date-time (optional) |
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
|
|
|
|
|
|
|
System.out.println("Date: "+ now.format(formatter)); |
|
|
|
System.out.println("Date: " + now.format(formatter)); |
|
|
|
System.out.println("Activity: ManHole"); |
|
|
|
System.out.println("File Type: " + filetype); |
|
|
|
System.out.println("File Upload Path: " + filePath); |
|
|
|
@ -185,22 +182,23 @@ public class ManHoleActivity { |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
public List<Map<String, Object>> getDrainList(String loginid) { |
|
|
|
|
|
|
|
String ward = getWardByLoginId(loginid,"ae"); |
|
|
|
|
|
|
|
String sql = "SELECT *, " |
|
|
|
+ " CONCAT('"+fileBaseUrl+"/gccofficialapp/files', `file`) AS file_url " |
|
|
|
+ "FROM `drain_master` WHERE `ward`= ? AND isactive = 1 AND isdelete = 0 "; |
|
|
|
List<Map<String, Object>> result = jdbcManHoleTemplate.queryForList(sql, ward); |
|
|
|
|
|
|
|
Map<String, Object> response = new HashMap<>(); |
|
|
|
response.put("status", "Success"); |
|
|
|
response.put("message", "Drain List."); |
|
|
|
response.put("data", result); |
|
|
|
|
|
|
|
return Collections.singletonList(response); |
|
|
|
} |
|
|
|
* public List<Map<String, Object>> getDrainList(String loginid) { |
|
|
|
* |
|
|
|
* String ward = getWardByLoginId(loginid,"ae"); |
|
|
|
* |
|
|
|
* String sql = "SELECT *, " |
|
|
|
* + " CONCAT('"+fileBaseUrl+"/gccofficialapp/files', `file`) AS file_url " |
|
|
|
* + "FROM `drain_master` WHERE `ward`= ? AND isactive = 1 AND isdelete = 0 "; |
|
|
|
* List<Map<String, Object>> result = jdbcManHoleTemplate.queryForList(sql, |
|
|
|
* ward); |
|
|
|
* |
|
|
|
* Map<String, Object> response = new HashMap<>(); |
|
|
|
* response.put("status", "Success"); |
|
|
|
* response.put("message", "Drain List."); |
|
|
|
* response.put("data", result); |
|
|
|
* |
|
|
|
* return Collections.singletonList(response); |
|
|
|
* } |
|
|
|
*/ |
|
|
|
|
|
|
|
public List<Map<String, Object>> getDrainList(String loginid) { |
|
|
|
@ -284,8 +282,7 @@ public class ManHoleActivity { |
|
|
|
Integer count = jdbcManHoleTemplate.queryForObject( |
|
|
|
checkSql, |
|
|
|
Integer.class, |
|
|
|
new Object[]{street_id, drain_side} |
|
|
|
); |
|
|
|
new Object[] { street_id, drain_side }); |
|
|
|
|
|
|
|
return (count != null && count > 0) ? "true" : "false"; |
|
|
|
|
|
|
|
@ -309,8 +306,7 @@ public class ManHoleActivity { |
|
|
|
String latitude, |
|
|
|
String longitude, |
|
|
|
String inby, |
|
|
|
MultipartFile file |
|
|
|
) { |
|
|
|
MultipartFile file) { |
|
|
|
|
|
|
|
String action = "New Drain"; |
|
|
|
|
|
|
|
@ -318,14 +314,14 @@ public class ManHoleActivity { |
|
|
|
List<Map<String, Object>> result = new ArrayList<>(); |
|
|
|
|
|
|
|
// Check Duplicate |
|
|
|
if(duplicateDrainCheck(street_id,drain_side).equalsIgnoreCase("true")) { |
|
|
|
if (duplicateDrainCheck(street_id, drain_side).equalsIgnoreCase("true")) { |
|
|
|
response.put("status", "error"); |
|
|
|
response.put("message", "Duplicate drain identified!"); |
|
|
|
result.add(response); |
|
|
|
return result; // stop execution, don’t insert |
|
|
|
} |
|
|
|
|
|
|
|
String filetxt = street_id+"_SWD"; |
|
|
|
String filetxt = street_id + "_SWD"; |
|
|
|
|
|
|
|
String filetype = "image"; |
|
|
|
|
|
|
|
@ -346,7 +342,7 @@ public class ManHoleActivity { |
|
|
|
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; |
|
|
|
|
|
|
|
int affectedRows = jdbcManHoleTemplate.update(connection -> { |
|
|
|
PreparedStatement ps = connection.prepareStatement(insertSql, new String[]{"drain_id"}); |
|
|
|
PreparedStatement ps = connection.prepareStatement(insertSql, new String[] { "drain_id" }); |
|
|
|
int i = 1; |
|
|
|
ps.setString(i++, drain_side); |
|
|
|
ps.setString(i++, drain_type); |
|
|
|
@ -385,48 +381,52 @@ public class ManHoleActivity { |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
public List<Map<String, Object>> getManHoleList(String loginid, String swdid) { |
|
|
|
|
|
|
|
String sql = "SELECT * FROM `manhole_master` WHERE `swdid`= ?"; |
|
|
|
List<Map<String, Object>> result = jdbcManHoleTemplate.queryForList(sql, swdid); |
|
|
|
|
|
|
|
Map<String, Object> response = new HashMap<>(); |
|
|
|
response.put("status", "Success"); |
|
|
|
response.put("message", "ManHole List."); |
|
|
|
response.put("data", result); |
|
|
|
|
|
|
|
return Collections.singletonList(response); |
|
|
|
} |
|
|
|
|
|
|
|
public List<Map<String, Object>> getManHoleBeforeStatus(String manhole_id) { |
|
|
|
|
|
|
|
String sql = "SELECT *," |
|
|
|
+ " CONCAT('"+fileBaseUrl+"/gccofficialapp/files', `file`) AS file_url " |
|
|
|
+ " FROM `before_activity` WHERE `manhole_id`= ?"; |
|
|
|
List<Map<String, Object>> result = jdbcManHoleTemplate.queryForList(sql, manhole_id); |
|
|
|
|
|
|
|
Map<String, Object> response = new HashMap<>(); |
|
|
|
response.put("status", "Success"); |
|
|
|
response.put("message", "ManHole before activity list."); |
|
|
|
response.put("data", result); |
|
|
|
|
|
|
|
return Collections.singletonList(response); |
|
|
|
} |
|
|
|
|
|
|
|
public List<Map<String, Object>> getManHoleAfterStatus(String manhole_id) { |
|
|
|
|
|
|
|
String sql = "SELECT *," |
|
|
|
+ " CONCAT('"+fileBaseUrl+"/gccofficialapp/files', `file`) AS file_url " |
|
|
|
+ " FROM `after_activity` WHERE `manhole_id`= ?"; |
|
|
|
List<Map<String, Object>> result = jdbcManHoleTemplate.queryForList(sql, manhole_id); |
|
|
|
|
|
|
|
Map<String, Object> response = new HashMap<>(); |
|
|
|
response.put("status", "Success"); |
|
|
|
response.put("message", "ManHole before activity list."); |
|
|
|
response.put("data", result); |
|
|
|
|
|
|
|
return Collections.singletonList(response); |
|
|
|
} |
|
|
|
* public List<Map<String, Object>> getManHoleList(String loginid, String swdid) |
|
|
|
* { |
|
|
|
* |
|
|
|
* String sql = "SELECT * FROM `manhole_master` WHERE `swdid`= ?"; |
|
|
|
* List<Map<String, Object>> result = jdbcManHoleTemplate.queryForList(sql, |
|
|
|
* swdid); |
|
|
|
* |
|
|
|
* Map<String, Object> response = new HashMap<>(); |
|
|
|
* response.put("status", "Success"); |
|
|
|
* response.put("message", "ManHole List."); |
|
|
|
* response.put("data", result); |
|
|
|
* |
|
|
|
* return Collections.singletonList(response); |
|
|
|
* } |
|
|
|
* |
|
|
|
* public List<Map<String, Object>> getManHoleBeforeStatus(String manhole_id) { |
|
|
|
* |
|
|
|
* String sql = "SELECT *," |
|
|
|
* + " CONCAT('"+fileBaseUrl+"/gccofficialapp/files', `file`) AS file_url " |
|
|
|
* + " FROM `before_activity` WHERE `manhole_id`= ?"; |
|
|
|
* List<Map<String, Object>> result = jdbcManHoleTemplate.queryForList(sql, |
|
|
|
* manhole_id); |
|
|
|
* |
|
|
|
* Map<String, Object> response = new HashMap<>(); |
|
|
|
* response.put("status", "Success"); |
|
|
|
* response.put("message", "ManHole before activity list."); |
|
|
|
* response.put("data", result); |
|
|
|
* |
|
|
|
* return Collections.singletonList(response); |
|
|
|
* } |
|
|
|
* |
|
|
|
* public List<Map<String, Object>> getManHoleAfterStatus(String manhole_id) { |
|
|
|
* |
|
|
|
* String sql = "SELECT *," |
|
|
|
* + " CONCAT('"+fileBaseUrl+"/gccofficialapp/files', `file`) AS file_url " |
|
|
|
* + " FROM `after_activity` WHERE `manhole_id`= ?"; |
|
|
|
* List<Map<String, Object>> result = jdbcManHoleTemplate.queryForList(sql, |
|
|
|
* manhole_id); |
|
|
|
* |
|
|
|
* Map<String, Object> response = new HashMap<>(); |
|
|
|
* response.put("status", "Success"); |
|
|
|
* response.put("message", "ManHole before activity list."); |
|
|
|
* response.put("data", result); |
|
|
|
* |
|
|
|
* return Collections.singletonList(response); |
|
|
|
* } |
|
|
|
*/ |
|
|
|
|
|
|
|
@Transactional |
|
|
|
@ -435,7 +435,7 @@ public class ManHoleActivity { |
|
|
|
double latitude = Double.parseDouble(latitudeStr); |
|
|
|
double longitude = Double.parseDouble(longitudeStr); |
|
|
|
|
|
|
|
System.out.println("Duplicate check latlong:"+ latitude + " | " + longitude); |
|
|
|
System.out.println("Duplicate check latlong:" + latitude + " | " + longitude); |
|
|
|
|
|
|
|
String checkSql = "SELECT COUNT(*) FROM manhole_master " + |
|
|
|
"WHERE isactive = 1 AND isdelete = 0 " + // fixed delete flag |
|
|
|
@ -448,18 +448,17 @@ public class ManHoleActivity { |
|
|
|
Integer count = jdbcManHoleTemplate.queryForObject( |
|
|
|
checkSql, |
|
|
|
Integer.class, |
|
|
|
latitude, longitude, latitude |
|
|
|
); |
|
|
|
latitude, longitude, latitude); |
|
|
|
/* |
|
|
|
String checkSqlstr = "SELECT COUNT(*) FROM manhole_master " + |
|
|
|
"WHERE isactive = 1 AND isdelete = 0 " + // fixed delete flag |
|
|
|
"AND (6371008.8 * ACOS(" + |
|
|
|
"COS(RADIANS("+latitude+")) * COS(RADIANS(latitude)) * " + |
|
|
|
"COS(RADIANS(longitude) - RADIANS("+longitude+")) + " + |
|
|
|
"SIN(RADIANS("+latitude+")) * SIN(RADIANS(latitude))" + |
|
|
|
")) < 0.5"; |
|
|
|
|
|
|
|
System.out.println("Duplicate check sql:"+ checkSqlstr); |
|
|
|
* String checkSqlstr = "SELECT COUNT(*) FROM manhole_master " + |
|
|
|
* "WHERE isactive = 1 AND isdelete = 0 " + // fixed delete flag |
|
|
|
* "AND (6371008.8 * ACOS(" + |
|
|
|
* "COS(RADIANS("+latitude+")) * COS(RADIANS(latitude)) * " + |
|
|
|
* "COS(RADIANS(longitude) - RADIANS("+longitude+")) + " + |
|
|
|
* "SIN(RADIANS("+latitude+")) * SIN(RADIANS(latitude))" + |
|
|
|
* ")) < 0.5"; |
|
|
|
* |
|
|
|
* System.out.println("Duplicate check sql:"+ checkSqlstr); |
|
|
|
*/ |
|
|
|
return (count != null && count > 0); |
|
|
|
|
|
|
|
@ -479,8 +478,7 @@ public class ManHoleActivity { |
|
|
|
checkSql, |
|
|
|
Integer.class, |
|
|
|
drain_id, |
|
|
|
street_id |
|
|
|
); |
|
|
|
street_id); |
|
|
|
|
|
|
|
return (count != null && count == 1); |
|
|
|
|
|
|
|
@ -498,8 +496,7 @@ public class ManHoleActivity { |
|
|
|
String street_id, |
|
|
|
String latitude, |
|
|
|
String longitude, |
|
|
|
String inby |
|
|
|
) { |
|
|
|
String inby) { |
|
|
|
String action = "Save"; |
|
|
|
|
|
|
|
Map<String, Object> response = new HashMap<>(); |
|
|
|
@ -528,7 +525,7 @@ public class ManHoleActivity { |
|
|
|
"VALUES (?,?,?,?,?,?,?,?)"; |
|
|
|
|
|
|
|
int affectedRows = jdbcManHoleTemplate.update(connection -> { |
|
|
|
PreparedStatement ps = connection.prepareStatement(insertSql, new String[]{"manhole_id"}); |
|
|
|
PreparedStatement ps = connection.prepareStatement(insertSql, new String[] { "manhole_id" }); |
|
|
|
int i = 1; |
|
|
|
ps.setString(i++, drain_id); |
|
|
|
ps.setString(i++, zone); |
|
|
|
@ -569,7 +566,7 @@ public class ManHoleActivity { |
|
|
|
|
|
|
|
// 2. Fetch before activity |
|
|
|
String sqlBefore = "SELECT *, " |
|
|
|
+ " CONCAT('"+fileBaseUrl+"/gccofficialapp/files', `file`) AS file_url " |
|
|
|
+ " CONCAT('" + fileBaseUrl + "/gccofficialapp/files', `file`) AS file_url " |
|
|
|
+ "FROM before_activity WHERE manhole_id = ? AND drain_id = ? AND isactive=1 AND isdelete=0"; |
|
|
|
List<Map<String, Object>> beforeActivities = jdbcManHoleTemplate.queryForList(sqlBefore, |
|
|
|
manhole.get("manhole_id"), drain_id); |
|
|
|
@ -585,7 +582,7 @@ public class ManHoleActivity { |
|
|
|
|
|
|
|
// 3. Fetch after activity |
|
|
|
String sqlAfter = "SELECT *," |
|
|
|
+ " CONCAT('"+fileBaseUrl+"/gccofficialapp/files', `file`) AS file_url " |
|
|
|
+ " CONCAT('" + fileBaseUrl + "/gccofficialapp/files', `file`) AS file_url " |
|
|
|
+ " FROM after_activity WHERE manhole_id = ? AND drain_id = ? AND isactive=1 AND isdelete=0"; |
|
|
|
List<Map<String, Object>> afterActivities = jdbcManHoleTemplate.queryForList(sqlAfter, |
|
|
|
manhole.get("manhole_id"), drain_id); |
|
|
|
@ -600,7 +597,8 @@ public class ManHoleActivity { |
|
|
|
} |
|
|
|
|
|
|
|
// 4. Overall manhole status |
|
|
|
String overallStatus = (!beforeActivities.isEmpty() && !afterActivities.isEmpty()) ? "Completed" : "Pending"; |
|
|
|
String overallStatus = (!beforeActivities.isEmpty() && !afterActivities.isEmpty()) ? "Completed" |
|
|
|
: "Pending"; |
|
|
|
manholeResponse.put("status", overallStatus); |
|
|
|
manholeResponse.put("before", beforeData); |
|
|
|
manholeResponse.put("after", afterData); |
|
|
|
@ -633,8 +631,7 @@ public class ManHoleActivity { |
|
|
|
Integer count = jdbcManHoleTemplate.queryForObject( |
|
|
|
checkSql, |
|
|
|
Integer.class, |
|
|
|
new Object[]{manhole_id, latitude, longitude, latitude} |
|
|
|
); |
|
|
|
new Object[] { manhole_id, latitude, longitude, latitude }); |
|
|
|
|
|
|
|
return (count != null && count > 0) ? "true" : "false"; |
|
|
|
|
|
|
|
@ -658,10 +655,9 @@ public class ManHoleActivity { |
|
|
|
String action, |
|
|
|
String beforeActivityId, |
|
|
|
String clean_type, |
|
|
|
String case_id |
|
|
|
) { |
|
|
|
String case_id) { |
|
|
|
|
|
|
|
String filetxt =manhole_id+"_"+drain_id; |
|
|
|
String filetxt = manhole_id + "_" + drain_id; |
|
|
|
|
|
|
|
String filetype = "image"; |
|
|
|
|
|
|
|
@ -696,7 +692,7 @@ public class ManHoleActivity { |
|
|
|
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|
|
|
|
|
|
|
int affectedRows = jdbcManHoleTemplate.update(connection -> { |
|
|
|
PreparedStatement ps = connection.prepareStatement(insertSql, new String[]{"activity_id"}); |
|
|
|
PreparedStatement ps = connection.prepareStatement(insertSql, new String[] { "activity_id" }); |
|
|
|
int i = 1; |
|
|
|
ps.setString(i++, manhole_id); |
|
|
|
ps.setString(i++, drain_id); |
|
|
|
@ -720,7 +716,7 @@ public class ManHoleActivity { |
|
|
|
|
|
|
|
if (affectedRows > 0) { |
|
|
|
int lastInsertId = keyHolder.getKey().intValue(); |
|
|
|
response.put("ManHole", action + " insertId: " +lastInsertId); |
|
|
|
response.put("ManHole", action + " insertId: " + lastInsertId); |
|
|
|
response.put("status", "success"); |
|
|
|
response.put("message", "ManHole " + action + " activity inserted successfully."); |
|
|
|
} else { |
|
|
|
@ -734,8 +730,7 @@ public class ManHoleActivity { |
|
|
|
} |
|
|
|
|
|
|
|
public List<Map<String, Object>> getZoneReport() { |
|
|
|
String sql = |
|
|
|
"SELECT " |
|
|
|
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," |
|
|
|
@ -781,8 +776,7 @@ public class ManHoleActivity { |
|
|
|
} |
|
|
|
|
|
|
|
public List<Map<String, Object>> getWardReport(String zone) { |
|
|
|
String sql = |
|
|
|
"SELECT " |
|
|
|
String sql = "SELECT " |
|
|
|
+ " t.zone," |
|
|
|
+ " t.ward," |
|
|
|
+ " COUNT(t.drain_id) AS total_drain," |
|
|
|
@ -810,35 +804,59 @@ public class ManHoleActivity { |
|
|
|
+ "GROUP BY t.zone, t.ward " |
|
|
|
+ "ORDER BY t.ward"; |
|
|
|
|
|
|
|
return jdbcManHoleTemplate.queryForList(sql,zone); |
|
|
|
return jdbcManHoleTemplate.queryForList(sql, zone); |
|
|
|
} |
|
|
|
|
|
|
|
public List<Map<String, Object>> getDrainReport(String ward) { |
|
|
|
String sql = |
|
|
|
"SELECT " |
|
|
|
+ " t.drain_name AS drain, " |
|
|
|
+ " t.total_manhole AS total_manhole, " |
|
|
|
+ " t.completed_manhole AS manhole_completed, " |
|
|
|
+ " (t.total_manhole - t.completed_manhole) AS manhole_pending, " |
|
|
|
+ " ROUND(t.completed_manhole * 100.0 / t.total_manhole, 2) AS completed_percentage, " |
|
|
|
+ " ROUND((t.total_manhole - t.completed_manhole) * 100.0 / t.total_manhole, 2) AS pending_percentage " |
|
|
|
+ "FROM ( " |
|
|
|
+ " SELECT " |
|
|
|
+ " CONCAT(d.street_name, '-', d.drain_side) AS drain_name, " |
|
|
|
+ " d.drain_id, " |
|
|
|
+ " 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.ward = ? " |
|
|
|
+ " GROUP BY drain_name, d.drain_id " |
|
|
|
+ ") t " |
|
|
|
+ "ORDER BY t.drain_name"; |
|
|
|
String sql = "SELECT " + |
|
|
|
" t.drain_name AS drain, " + |
|
|
|
" t.total_manhole, " + |
|
|
|
" t.completed_manhole AS manhole_completed, " + |
|
|
|
" (t.total_manhole - t.completed_manhole) AS manhole_pending, " + |
|
|
|
" ROUND( " + |
|
|
|
" t.completed_manhole * 100.0 / NULLIF(t.total_manhole, 0), " + |
|
|
|
" 2 " + |
|
|
|
" ) AS completed_percentage, " + |
|
|
|
" ROUND( " + |
|
|
|
" (t.total_manhole - t.completed_manhole) * 100.0 " + |
|
|
|
" / NULLIF(t.total_manhole, 0), " + |
|
|
|
" 2 " + |
|
|
|
" ) AS pending_percentage " + |
|
|
|
"FROM ( " + |
|
|
|
" SELECT " + |
|
|
|
" CONCAT(d.street_name, '-', d.drain_side) AS drain_name, " + |
|
|
|
" d.drain_id, " + |
|
|
|
" 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.ward = ? " + |
|
|
|
" GROUP BY " + |
|
|
|
" d.street_name, " + |
|
|
|
" d.drain_side, " + |
|
|
|
" d.drain_id " + |
|
|
|
") t " + |
|
|
|
"ORDER BY t.drain_name;"; |
|
|
|
|
|
|
|
return jdbcManHoleTemplate.queryForList(sql, ward); |
|
|
|
} |
|
|
|
|