Browse Source

getDrainReport Query changed

master
KaNi-04 2 months ago
parent
commit
20bdcd7826
  1. 278
      src/main/java/in/gov/chennaicorporation/mobileservice/manhole/service/ManHoleActivity.java
  2. 32
      src/main/java/in/gov/chennaicorporation/mobileservice/penalty/controller/APIPenaltyControllerPOS.java

278
src/main/java/in/gov/chennaicorporation/mobileservice/manhole/service/ManHoleActivity.java

@ -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);
}

32
src/main/java/in/gov/chennaicorporation/mobileservice/penalty/controller/APIPenaltyControllerPOS.java

@ -21,40 +21,38 @@ public class APIPenaltyControllerPOS {
@Autowired
private PenaltyServicePOS penaltyServicePOS;
@GetMapping(value="/getPenaltyDepartment")
@GetMapping(value = "/getPenaltyDepartment")
public List<Map<String, Object>> getPenaltyDepartment(
@RequestParam(value = "loginId", required = false) String loginId
) {
@RequestParam(value = "loginId", required = false) String loginId) {
return penaltyServicePOS.getPenaltyDepartment();
}
@GetMapping(value="/getPenaltytypes")
@GetMapping(value = "/getPenaltytypes")
public List<Map<String, Object>> getPenaltyTypes(
@RequestParam(value = "departmentId", required = false) String departmentId,
@RequestParam(value = "loginId", required = false) String loginId) {
return penaltyServicePOS.getPenaltyTypeList(departmentId);
}
@GetMapping(value="/getPenaltyAmount")
@GetMapping(value = "/getPenaltyAmount")
public List<Map<String, Object>> getPenaltyAmount(
@RequestParam(value = "categoryId", required = false) String categoryId,
@RequestParam(value = "ton", required = false) String ton,
@RequestParam(value = "loginId", required = false) String loginId
) {
return penaltyServicePOS.getPenaltyAmount(categoryId,ton);
@RequestParam(value = "loginId", required = false) String loginId) {
return penaltyServicePOS.getPenaltyAmount(categoryId, ton);
}
@GetMapping(value="/getOfflineModeTypes")
@GetMapping(value = "/getOfflineModeTypes")
public List<Map<String, Object>> getOfflineModeTypes() {
return penaltyServicePOS.getOfflineModeTypes();
}
@GetMapping(value="/getBankList")
@GetMapping(value = "/getBankList")
public List<Map<String, Object>> getBankList() {
return penaltyServicePOS.getBankList();
}
@PostMapping(value="/generateChallanPOS")
@PostMapping(value = "/generateChallanPOS")
public List<?> generateChallan(@RequestParam MultiValueMap<String, String> formData,
@RequestParam(value = "categoryId", required = false) String categoryId,
@RequestParam(value = "latitude", required = false) String latitude,
@ -70,8 +68,7 @@ public class APIPenaltyControllerPOS {
@RequestParam(value = "tid", required = false) String tid,
@RequestParam(value = "mid", required = false) String mid,
@RequestParam(value = "serialNumber", required = false) String serialNumber,
@RequestParam(value = "file", required = false) MultipartFile file
) {
@RequestParam(value = "file", required = false) MultipartFile file) {
return penaltyServicePOS.generateChallanPOS(formData, categoryId, latitude, longitude, zone, ward,
loginId, violatorName, violatorPhone, violatorCompany, ton, amount, tid, mid, serialNumber, file);
}
@ -86,7 +83,7 @@ public class APIPenaltyControllerPOS {
return penaltyServicePOS.storeFailedBankTransaction(transactionData);
}
@PostMapping(value="/storeOfflineTransaction")
@PostMapping(value = "/storeOfflineTransaction")
public List<?> generateOfflineChallan(@RequestParam MultiValueMap<String, String> formData,
@RequestParam(value = "transactionResponseStatus", required = false) String transactionResponseStatus,
@RequestParam(value = "bankName", required = false) String bankName,
@ -99,8 +96,9 @@ public class APIPenaltyControllerPOS {
@RequestParam(value = "extraInfo3", required = false) String extraInfo3,
@RequestParam(value = "txnMode", required = false) String txnMode,
@RequestParam(value = "txnId", required = false) String txnId,
@RequestParam(value = "file", required = false) MultipartFile file
) {
return penaltyServicePOS.storeOfflineTransaction(formData, transactionResponseStatus, bankName, transactionAmount, txnDate, txnTime,branchname,extraInfo,extraInfo2,extraInfo3,txnMode,txnId,file);
@RequestParam(value = "file", required = false) MultipartFile file) {
return penaltyServicePOS.storeOfflineTransaction(formData, transactionResponseStatus, bankName,
transactionAmount, txnDate, txnTime, branchname, extraInfo, extraInfo2, extraInfo3, txnMode, txnId,
file);
}
}
Loading…
Cancel
Save