diff --git a/.DS_Store b/.DS_Store
index edfd92d..ec53bb5 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/mobileservice/.DS_Store b/mobileservice/.DS_Store
index f8c57b5..bbd68fc 100644
Binary files a/mobileservice/.DS_Store and b/mobileservice/.DS_Store differ
diff --git a/mobileservice/pom.xml b/mobileservice/pom.xml
index 23308bc..40f9497 100644
--- a/mobileservice/pom.xml
+++ b/mobileservice/pom.xml
@@ -114,7 +114,13 @@
poi-ooxml
5.2.3
-
+
+
+
+ com.openhtmltopdf
+ openhtmltopdf-pdfbox
+ 1.0.10
+
diff --git a/mobileservice/src/.DS_Store b/mobileservice/src/.DS_Store
index 547ae1d..173e3b3 100644
Binary files a/mobileservice/src/.DS_Store and b/mobileservice/src/.DS_Store differ
diff --git a/mobileservice/src/main/.DS_Store b/mobileservice/src/main/.DS_Store
index 4442cff..d179f1f 100644
Binary files a/mobileservice/src/main/.DS_Store and b/mobileservice/src/main/.DS_Store differ
diff --git a/mobileservice/src/main/java/in/gov/chennaicorporation/mobileservice/MobileServiceApplication.java b/mobileservice/src/main/java/in/gov/chennaicorporation/mobileservice/MobileServiceApplication.java
index c3cd50d..cfa2bd7 100644
--- a/mobileservice/src/main/java/in/gov/chennaicorporation/mobileservice/MobileServiceApplication.java
+++ b/mobileservice/src/main/java/in/gov/chennaicorporation/mobileservice/MobileServiceApplication.java
@@ -4,8 +4,10 @@ import java.util.TimeZone;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
+@EnableScheduling
public class MobileServiceApplication {
public static void main(String[] args) {
diff --git a/mobileservice/src/main/java/in/gov/chennaicorporation/mobileservice/buildingDemolition/controller/BuildingDemolitionController.java b/mobileservice/src/main/java/in/gov/chennaicorporation/mobileservice/buildingDemolition/controller/BuildingDemolitionController.java
new file mode 100644
index 0000000..b3b2e04
--- /dev/null
+++ b/mobileservice/src/main/java/in/gov/chennaicorporation/mobileservice/buildingDemolition/controller/BuildingDemolitionController.java
@@ -0,0 +1,64 @@
+package in.gov.chennaicorporation.mobileservice.buildingDemolition.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import in.gov.chennaicorporation.mobileservice.buildingDemolition.service.BuildingDemolitionActivity;
+
+@RequestMapping("/gccofficialapp/api/buildingdemolition/")
+@RestController("buildingDemolitionRest")
+public class BuildingDemolitionController {
+ @Autowired
+ BuildingDemolitionActivity buildingDemolitionService;
+
+ @GetMapping("/list")
+ public ResponseEntity>> getBuildingList(
+ @RequestParam String loginId) {
+ return ResponseEntity.ok(buildingDemolitionService.getBuildingList(loginId));
+ }
+
+ @PostMapping("/update")
+ public ResponseEntity>> updateDetails(
+ @RequestParam String id,
+ @RequestParam String status,
+ @RequestParam String cby,
+ @RequestParam(required = true) String latitude,
+ @RequestParam(required = true) String longitude,
+ @RequestParam(required = true) String remarks,
+ @RequestParam(required = true) MultipartFile file) {
+ return ResponseEntity.ok(buildingDemolitionService.updateDetails(id, status, cby, latitude, longitude, remarks, file));
+ }
+
+ // Zone wise Report
+ @GetMapping("/report/zone")
+ public ResponseEntity>> zoneReport() {
+ return ResponseEntity.ok(buildingDemolitionService.zoneReport());
+ }
+
+ // Ward wise Report (filter by zone)
+ @GetMapping("/report/ward")
+ public ResponseEntity>> wardReport(@RequestParam String zone) {
+ return ResponseEntity.ok(buildingDemolitionService.wardReport(zone));
+ }
+
+ // Pending list Report (filter by ward)
+ @GetMapping("/report/pending")
+ public ResponseEntity>> pendingReport(@RequestParam String ward) {
+ return ResponseEntity.ok(buildingDemolitionService.pendingReport(ward));
+ }
+
+ // Completed list Report (filter by ward)
+ @GetMapping("/report/completed")
+ public ResponseEntity>> completedReport(@RequestParam String ward) {
+ return ResponseEntity.ok(buildingDemolitionService.completedReport(ward));
+ }
+}
diff --git a/mobileservice/src/main/java/in/gov/chennaicorporation/mobileservice/buildingDemolition/service/BuildingDemolitionActivity.java b/mobileservice/src/main/java/in/gov/chennaicorporation/mobileservice/buildingDemolition/service/BuildingDemolitionActivity.java
new file mode 100644
index 0000000..e6c7adc
--- /dev/null
+++ b/mobileservice/src/main/java/in/gov/chennaicorporation/mobileservice/buildingDemolition/service/BuildingDemolitionActivity.java
@@ -0,0 +1,325 @@
+package in.gov.chennaicorporation.mobileservice.buildingDemolition.service;
+
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.SecureRandom;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.ImageOutputStream;
+import javax.sql.DataSource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.core.env.Environment;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.multipart.MultipartFile;
+
+import in.gov.chennaicorporation.mobileservice.gccactivity.service.DateTimeUtil;
+
+@Service
+public class BuildingDemolitionActivity {
+ private JdbcTemplate jdbcBuildingDemolitionTemplate;
+
+ private final Environment environment;
+ private String fileBaseUrl;
+
+ private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+ private static final int STRING_LENGTH = 15;
+ private static final Random RANDOM = new SecureRandom();
+
+ @Autowired
+ public void setDataSource(@Qualifier("mysqlGccBuildingDemolitionSource") DataSource BuildingDemolitionDataSource) {
+ this.jdbcBuildingDemolitionTemplate = new JdbcTemplate(BuildingDemolitionDataSource);
+ }
+
+ @Autowired
+ public BuildingDemolitionActivity(Environment environment) {
+ this.environment = environment;
+ this.fileBaseUrl=environment.getProperty("fileBaseUrl");
+ }
+
+ public static String generateRandomString() {
+ StringBuilder result = new StringBuilder(STRING_LENGTH);
+ for (int i = 0; i < STRING_LENGTH; i++) {
+ result.append(CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length())));
+ }
+ return result.toString();
+ }
+
+ public static String generateRandomStringForFile(int String_Lenth) {
+ StringBuilder result = new StringBuilder(String_Lenth);
+ for (int i = 0; i < STRING_LENGTH; i++) {
+ result.append(CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length())));
+ }
+ return result.toString();
+ }
+
+ private byte[] compressImage(BufferedImage image, float quality) throws IOException {
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(byteArrayOutputStream);
+
+ ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
+ writer.setOutput(imageOutputStream);
+
+ ImageWriteParam param = writer.getDefaultWriteParam();
+ if (param.canWriteCompressed()) {
+ param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
+ param.setCompressionQuality(quality);
+ }
+
+ writer.write(null, new javax.imageio.IIOImage(image, null, null), param);
+
+ writer.dispose();
+ imageOutputStream.close();
+
+ return byteArrayOutputStream.toByteArray();
+ }
+
+ public String fileUpload(String name, String id, MultipartFile file) {
+
+ int lastInsertId = 0;
+ // Set the file path where you want to save it
+ String uploadDirectory = environment.getProperty("file.upload.directory");
+ String serviceFolderName = environment.getProperty("buildingdemolition_foldername");
+ var year =DateTimeUtil.getCurrentYear();
+ var month =DateTimeUtil.getCurrentMonth();
+
+ uploadDirectory = uploadDirectory + serviceFolderName + year +"/"+month;
+
+ try {
+ // Create directory if it doesn't exist
+ Path directoryPath = Paths.get(uploadDirectory);
+ if (!Files.exists(directoryPath)) {
+ Files.createDirectories(directoryPath);
+ }
+
+ // Datetime string
+ String datetimetxt = DateTimeUtil.getCurrentDateTime();
+ // File name
+ System.out.println(file.getOriginalFilename());
+ String fileName = name+ "_" +id + "_" + datetimetxt + "_" + generateRandomStringForFile(10) + "_" + file.getOriginalFilename();
+ fileName = fileName.replaceAll("\\s+", ""); // Remove space on filename
+
+ String filePath = uploadDirectory + "/" + fileName;
+
+ String filepath_txt = "/"+serviceFolderName + year + "/" + month + "/" + fileName;
+
+ // Create a new Path object
+ Path path = Paths.get(filePath);
+
+ // Get the bytes of the file
+ byte[] bytes = file.getBytes();
+
+ // 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, bytes);
+
+ System.out.println(filePath);
+ return filepath_txt;
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ return "Failed to save file " + file.getOriginalFilename();
+ }
+ }
+
+ public List