Browse Source

Works controller and service updated

master
KaNi-04 2 weeks ago
parent
commit
8703540c04
  1. 117
      src/main/java/in/gov/chennaicorporation/mobileservice/works/controller/WorksController.java
  2. 93
      src/main/java/in/gov/chennaicorporation/mobileservice/works/controller/WorksController1.java
  3. 1076
      src/main/java/in/gov/chennaicorporation/mobileservice/works/service/WorksService.java
  4. 737
      src/main/java/in/gov/chennaicorporation/mobileservice/works/service/WorksService1.java

117
src/main/java/in/gov/chennaicorporation/mobileservice/works/controller/WorksController.java

@ -16,45 +16,45 @@ import in.gov.chennaicorporation.mobileservice.works.service.WorksService;
@RequestMapping("/gccofficialapp/works/api")
@RestController("worksRestapi")
public class WorksController {
@Autowired
private WorksService worksService;
/*
* @GetMapping("/getESTList")
* public List<?> getTaskList(
*
* @RequestParam(value = "typeofworkid", required = true) String typeofworkid
* ) {
* return worksService.getTaskList(typeofworkid);
* }
*/
@GetMapping("/getESTList")
public List<?> getTaskList(
@RequestParam(value = "typeofworkid", required = true) String typeofworkid
) {
return worksService.getTaskList(typeofworkid);
}
*/
@GetMapping("/getESTList")
public List<?> getESTList(
@RequestParam(value = "typeofworkid", required = false) String typeofworkid,
@RequestParam(value = "loginId", required = true) String loginId
) {
return worksService.getESTList(loginId);
}
public List<?> getESTList(
@RequestParam(value = "typeofworkid", required = false) String typeofworkid,
@RequestParam(value = "loginId", required = true) String loginId) {
return worksService.getESTList(loginId);
}
@GetMapping("/getESTWorkListData")
public List<?> getESTWorkListData(
@RequestParam(value = "estid", required = true) String estid,
@RequestParam(value = "loginId", required = false) String cby
) {
return worksService.getESTWorkListData(estid);
}
public List<?> getESTWorkListData(
@RequestParam(value = "estid", required = true) String estid,
@RequestParam(value = "loginId", required = false) String cby,
@RequestParam(value = "typeofworkid", required = true) String typeofworkid) {
return worksService.getESTWorkListData(estid, typeofworkid);
}
@GetMapping("/getTaskDataListWithData")
public List<?> getTaskDataListWithData(
@RequestParam(value = "worktasktid", required = true) String wtid,
@RequestParam(value = "estid", required = true) String estid,
@RequestParam(value = "typeofworkid", required = true) String typeofworkid
) {
return worksService.getTaskDataListWithData(wtid, estid,typeofworkid);
}
@PostMapping(value="/addTaskStageActivityData")
public List<?> getTaskDataListWithData(
@RequestParam(value = "worktasktid", required = true) String wtid,
@RequestParam(value = "estid", required = true) String estid,
@RequestParam(value = "typeofworkid", required = true) String typeofworkid,
@RequestParam(value = "refId", required = true) String refId) {
return worksService.getTaskDataListWithData(wtid, estid, typeofworkid, refId);
}
@PostMapping(value = "/addTaskStageActivityData")
public List<?> addTaskStageActivityData(@RequestParam MultiValueMap<String, String> formData,
@RequestParam(value = "estid", required = true) String estid,
@RequestParam(value = "tmid", required = true) String tmid,
@ -65,34 +65,33 @@ public class WorksController {
@RequestParam(value = "loginId", required = true) String cby,
@RequestParam(value = "zone", required = true) String zone,
@RequestParam(value = "ward", required = true) String ward,
@RequestParam(value = "latitude", required = true) String latitude,
@RequestParam(value = "longitude", required = true) String longitude
) {
return worksService.addTaskStageActivityData(estid, tmid, wtid, activityfile, percentage, remarks, cby, zone, ward, latitude, longitude, "open");
@RequestParam(value = "latitude", required = true) String latitude,
@RequestParam(value = "longitude", required = true) String longitude,
@RequestParam(value = "refId", required = true) String refId) {
return worksService.addTaskStageActivityData(estid, tmid, wtid, activityfile, percentage, remarks, cby,
zone,
ward, latitude, longitude, "open", refId);
}
@GetMapping("/getZoneReport")
public List<?> getZoneReport(
@RequestParam(value = "loginId", required = false) String cby
) {
return worksService.getZoneReport();
}
public List<?> getZoneReport(
@RequestParam(value = "loginId", required = false) String cby) {
return worksService.getZoneReport();
}
@GetMapping("/getWardReport")
public List<?> getWardReport(
@RequestParam(value = "zone", required = true) String zone,
@RequestParam(value = "loginId", required = false) String cby
) {
return worksService.getWardReport(zone);
}
public List<?> getWardReport(
@RequestParam(value = "zone", required = true) String zone,
@RequestParam(value = "loginId", required = false) String cby) {
return worksService.getWardReport(zone);
}
@GetMapping("/getListReport")
public List<?> getListReport(
@RequestParam(value = "ward", required = true) String ward,
@RequestParam(value = "statusFilter", required = true) String statusFilter,
@RequestParam(value = "loginId", required = false) String cby
) {
return worksService.getListReport(ward, statusFilter);
}
public List<?> getListReport(
@RequestParam(value = "ward", required = true) String ward,
@RequestParam(value = "statusFilter", required = true) String statusFilter,
@RequestParam(value = "loginId", required = false) String cby) {
return worksService.getListReport(ward, statusFilter);
}
}

93
src/main/java/in/gov/chennaicorporation/mobileservice/works/controller/WorksController1.java

@ -0,0 +1,93 @@
package in.gov.chennaicorporation.mobileservice.works.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.MultiValueMap;
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.works.service.WorksService1;
@RequestMapping("/gccofficialapp/works/test/api")
@RestController("worksTestRestapi")
public class WorksController1 {
@Autowired
private WorksService1 worksService1;
/*
* @GetMapping("/getESTList")
* public List<?> getTaskList(
*
* @RequestParam(value = "typeofworkid", required = true) String typeofworkid
* ) {
* return worksService.getTaskList(typeofworkid);
* }
*/
@GetMapping("/getESTList")
public List<?> getESTList(
@RequestParam(value = "typeofworkid", required = false) String typeofworkid,
@RequestParam(value = "loginId", required = true) String loginId) {
return worksService1.getESTList(loginId);
}
@GetMapping("/getESTWorkListData")
public List<?> getESTWorkListData(
@RequestParam(value = "estid", required = true) String estid,
@RequestParam(value = "loginId", required = false) String cby) {
return worksService1.getESTWorkListData(estid);
}
@GetMapping("/getTaskDataListWithData")
public List<?> getTaskDataListWithData(
@RequestParam(value = "worktasktid", required = true) String wtid,
@RequestParam(value = "estid", required = true) String estid,
@RequestParam(value = "typeofworkid", required = true) String typeofworkid) {
return worksService1.getTaskDataListWithData(wtid, estid, typeofworkid);
}
@PostMapping(value = "/addTaskStageActivityData")
public List<?> addTaskStageActivityData(@RequestParam MultiValueMap<String, String> formData,
@RequestParam(value = "estid", required = true) String estid,
@RequestParam(value = "tmid", required = true) String tmid,
@RequestParam(value = "worktasktid", required = true) String wtid,
@RequestParam(value = "activityfile", required = true) MultipartFile activityfile,
@RequestParam(value = "percentage", required = true) String percentage,
@RequestParam(value = "remarks", required = false) String remarks,
@RequestParam(value = "loginId", required = true) String cby,
@RequestParam(value = "zone", required = true) String zone,
@RequestParam(value = "ward", required = true) String ward,
@RequestParam(value = "latitude", required = true) String latitude,
@RequestParam(value = "longitude", required = true) String longitude) {
return worksService1.addTaskStageActivityData(estid, tmid, wtid, activityfile, percentage, remarks, cby, zone,
ward, latitude, longitude, "open");
}
@GetMapping("/getZoneReport")
public List<?> getZoneReport(
@RequestParam(value = "loginId", required = false) String cby) {
return worksService1.getZoneReport();
}
@GetMapping("/getWardReport")
public List<?> getWardReport(
@RequestParam(value = "zone", required = true) String zone,
@RequestParam(value = "loginId", required = false) String cby) {
return worksService1.getWardReport(zone);
}
@GetMapping("/getListReport")
public List<?> getListReport(
@RequestParam(value = "ward", required = true) String ward,
@RequestParam(value = "statusFilter", required = true) String statusFilter,
@RequestParam(value = "loginId", required = false) String cby) {
return worksService1.getListReport(ward, statusFilter);
}
}

1076
src/main/java/in/gov/chennaicorporation/mobileservice/works/service/WorksService.java
File diff suppressed because it is too large
View File

737
src/main/java/in/gov/chennaicorporation/mobileservice/works/service/WorksService1.java

@ -0,0 +1,737 @@
package in.gov.chennaicorporation.mobileservice.works.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.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
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.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import in.gov.chennaicorporation.mobileservice.gccactivity.service.DateTimeUtil;
@Service
public class WorksService1 {
private JdbcTemplate jdbcWorksTemplate;
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("mysqlWorksDataSource") DataSource worksDataSource) {
this.jdbcWorksTemplate = new JdbcTemplate(worksDataSource);
}
@Autowired
public WorksService1(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("works_task_foldername");
var year = DateTimeUtil.getCurrentYear();
var month = DateTimeUtil.getCurrentMonth();
var date = DateTimeUtil.getCurrentDay();
uploadDirectory = uploadDirectory + serviceFolderName + year + "/" + month + "/" + date;
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 + "/" + date + "/" + 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, compressedBytes);
System.out.println(filePath);
return filepath_txt;
} catch (IOException e) {
e.printStackTrace();
return "Failed to save file " + file.getOriginalFilename();
}
}
public String getWardByLoginId(String loginid, String type) {
String sqlQuery = "SELECT `ward`, `works` FROM `gcc_penalty_hoardings`.`hoading_user_list` WHERE `userid` = ? LIMIT 1";
List<Map<String, Object>> results = jdbcWorksTemplate.queryForList(sqlQuery, loginid);
if (!results.isEmpty()) {
Map<String, Object> row = results.get(0);
String wardClause;
String departmentClause = "";
Object wardValue = row.get("ward");
Object worksValue = row.get("works");
if (wardValue == null || wardValue.toString().equals("0")) {
wardClause = "wu.`ward` NOT IN (0)";
} else {
wardClause = "wu.`ward` IN ('" + wardValue + "')";
}
if (worksValue != null) {
departmentClause = " AND wu.`department` IN (" + worksValue + ")";
}
return wardClause + departmentClause;
}
return "wu.`ward` IN ('-')";
}
public List<Map<String, Object>> getESTList(String loginid) {
/*
* String sql =
* "SELECT wu.`Id` AS estid, `wu`.`sub_category` AS works, tw.id AS typeofworkid, `wu`.`estimate_no`, "
* +
* "`wu`.`estimate_date`, `wu`.`zone`, `wu`.`ward`, `wu`.`project_name`, `wu`.`location`, `wu`.`department`, "
* +
* "`wu`.`contractor_name`, `wu`.`contractor_period`, `wu`.`fund_source`, `wu`.`scheme`, `wu`.`category`, `wu`.`sub_category` AS `sub_category`, "
* +
* "`wu`.`est_amount`, `wu`.`tech_sanc_date`, `wu`.`admin_sanc_date`, `wu`.`tender_call_date`, `wu`.`tender_fin_date`, "
* +
* "`wu`.`loa_date`, `wu`.`agreement_date`, `wu`.`work_order_date`, `wu`.`work_comm_date` "
* +
* "FROM `works_update` `wu` LEFT JOIN EGW_TYPEOFWORK `tw` ON trim(`tw`.description) = trim(`wu`.`sub_category`)"
* ;
*/
String where = getWardByLoginId(loginid, "ae");
// System.out.println("ward: "+ward);
String sql = "SELECT "
+ "wu.`estid` AS estid, "
+ "tm.`description` AS works, "
+ "tm.id AS typeofworkid, "
+ "wu.`estimate_no`, "
+ "wu.`estimate_date`, "
+ "wu.`zone`, "
+ "wu.`ward`, "
+ "wu.`project_name`, "
+ "wu.`location`, "
+ "dm.`dept_name` AS `department`, "
+ "wu.`contractor_name`, "
+ "CAST(wu.contractor_period AS CHAR) AS contractor_period, "
+ "fs.`name` AS `fund_source`, "
+ "s.`name` AS `scheme`, "
+ "wm.`name` AS `category`, "
+ "tm.`description` AS `sub_category`, "
+ "wu.`estimation_amount` AS `est_amount`, "
+ "wu.`technical_sanction_date` AS `tech_sanc_date`, "
+ "wu.`admin_sanction_date` AS `admin_sanc_date`, "
+ "wu.`tender_called_date` AS `tender_call_date`, "
+ "wu.`tender_finalized_date` AS `tender_fin_date`, "
+ "wu.`loa_date` AS `loa_date`, "
+ "wu.`agreement_date` AS `agreement_date`, "
+ "wu.`work_order_date` AS `work_order_date`, "
+ "wu.`work_commenced_date` AS `work_comm_date`, "
+ "wu.`percentage` AS `percentage` "
+ "FROM `erp_works` wu "
// + "LEFT JOIN typeofwork_master tw ON trim(tw.description) =
// trim(wu.`sub_category`)"
+ "LEFT JOIN department_master dm ON dm.id = wu.`department`"
+ "LEFT JOIN fundsource_master fs ON fs.id = wu.`fund_source` "
+ "LEFT JOIN scheme_master s ON s.id = wu.`scheme` "
+ "LEFT JOIN workstype_master wm ON wm.id = wu.`category` "
+ "LEFT JOIN typeofwork_master tm ON tm.id = wu.`sub_category` "
+ "WHERE " + where;
List<Map<String, Object>> result = jdbcWorksTemplate.queryForList(sql);
/*
* List<Map<String, Object>> estWorklistData = new ArrayList<>();
*
* for (Map<String, Object> row : result) {
* // CHECK IN WORK_TASK
*
* // CHECK IN typeofwork_task_master
*
* // CHECK IN task_data last DATA for each typeofwork_task_master
* }
*/
return jdbcWorksTemplate.queryForList(sql);
}
/*
* public List<Map<String, Object>> getTaskDataListWithData(String estid, String
* typeofworkid) {
* String sql =
* "SELECT `tdid`, `estid`, `tmid`, `percentage`, `cdate`, `cby`, `zone`, `ward`, `latitude`, `longitude`, `stage_file`, `status`, `isactive` FROM `task_data` WHERE 1"
* ;
* return jdbcWorksTemplate.queryForList(sql,typeofworkid);
* }
*/
public List<Map<String, Object>> getESTWorkListData(String estid) {
// String sql = "SELECT `id` AS wtid, `estid`, `estimate_no`, `sub_cat_id`,
// `question_id`, `ans_id`,"
// + " `remarks`, `cdate`, `isactive`, `isdelete`, `percentage` "
// + " FROM `erp_works_task` "
// + " WHERE `isactive`=1 AND `isdelete`=0 AND `estid`= ?";
String sql = "SELECT " +
" ewt.id AS wtid, " +
" ewt.estid, " +
" ewt.estimate_no, " +
" ewt.sub_cat_id, " +
" ewt.question_id, " +
" ewt.ans_id, " +
" ewt.remarks, " +
" ewt.cdate, " +
" ewt.isactive, " +
" ewt.isdelete, " +
" ewt.percentage " +
// " atd.answer as road_name, " +
// " atd.ref_id as roadRefId " +
"FROM erp_works_task ewt " +
// "left join addworks_text_details atd on ewt.ref_id = atd.ref_id and ewt.estid
// = atd.estid " +
// "WHERE atd.question_id = 3 and atd.isactive =1 and atd.isdelete = 0 and " +
"WHERE ewt.isactive = 1 " +
"AND ewt.isdelete = 0 " +
"AND ewt.estid = ?";
List<Map<String, Object>> result = jdbcWorksTemplate.queryForList(sql, estid);
// Prepare the response
Map<String, Object> response = new HashMap<>();
response.put("estWorklistData", result);
response.put("message", "EST Activity Data List.");
// Return the response wrapped in a singleton list
return Collections.singletonList(response);
}
public List<Map<String, Object>> getTaskDataListWithData(String wtid, String estid, String typeofworkid) {
String sql = "SELECT `id`, `estid`, `estimate_no`, `sub_cat_id`, `question_id`, `ans_id`,"
+ " `remarks`, `cdate`, `isactive`, `isdelete`, `percentage` FROM `erp_works_task` "
+ "WHERE `id`=? AND `estid`= ? AND `isactive`=1 AND `isdelete`=0";
List<Map<String, Object>> result = jdbcWorksTemplate.queryForList(sql, wtid, estid);
List<Map<String, Object>> estTaskWorklistData = new ArrayList<>();
for (Map<String, Object> row : result) {
// Query for the task related to the current activity
String sqlForTask = "SELECT `tmid`, `stagename` AS `taskname`, `isactive`, `isdelete`, `orderby`, "
+ "("
+ " SELECT `percentage` "
+ " FROM `erp_task_data` "
+ " WHERE `tmid` = `erp_works_stages`.`tmid` AND wtid=? AND `isactive`=1 "
+ " ORDER BY `cdate` DESC "
+ " LIMIT 1 "
+ " ) AS percentage "
+ "FROM `erp_works_stages` WHERE `isactive`=1 AND `isdelete`=0 AND `estid`=? ORDER BY `orderby`";
List<Map<String, Object>> taskresult = jdbcWorksTemplate.queryForList(sqlForTask, wtid, estid);
if (!taskresult.isEmpty()) {
// For each task in the taskresult, add taskdataresult
for (Map<String, Object> task : taskresult) {
// Query for the task-related data
String tmid = "" + task.get("tmid"); // Assuming tmid is a field in task
String sqlForTaskData = "SELECT `tdid`, `estid`, `tmid`, `percentage`, `remarks`, "
+ "DATE_FORMAT(`cdate`, '%d-%m-%Y %r') AS createddate, "
+ "`cby`, `zone`, `ward`, `latitude`, `longitude`, "
+ " CONCAT('" + fileBaseUrl + "/gccofficialapp/files', `stage_file`) AS image, "
+ "`status`, `isactive` FROM `erp_task_data` WHERE `wtid`=? AND `tmid`=? AND `estid`=? AND `isactive`=1";
List<Map<String, Object>> taskdataresult = jdbcWorksTemplate.queryForList(sqlForTaskData, wtid,
tmid, estid);
// Add taskdataresult to each task
task.put("taskdata", taskdataresult);
}
}
// Add tasklist (with taskdata) to the row
row.put("tasklist", taskresult);
// Add the row to SWDData
estTaskWorklistData.add(row);
}
// Prepare the response
Map<String, Object> response = new HashMap<>();
response.put("estTaskWorklistData", estTaskWorklistData);
response.put("message", "EST Activity Data List.");
// Return the response wrapped in a singleton list
return Collections.singletonList(response);
}
@Transactional
public List<Map<String, Object>> addTaskStageActivityData(
String estid,
String tmid,
String wtid,
MultipartFile file,
String percentage,
String remarks,
String cby,
String zone,
String ward,
String latitude,
String longitude,
String status) {
List<Map<String, Object>> result = null;
Map<String, Object> response = new HashMap<>();
int lastInsertId = 0;
String filetxt = "";
// Handle file upload if a file is provided
if (file != null && !file.isEmpty()) {
filetxt = fileUpload(estid + "_" + tmid, cby, file);
}
String finalfile = filetxt;
String sqlQuery = "INSERT INTO `erp_task_data`"
+ "(`estid`, `tmid`, `percentage`, `remarks`, `cby`, `zone`, `ward`, `latitude`, `longitude`, `stage_file`, `status`,`wtid`) "
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
LocalDateTime approvedDate = LocalDateTime.now();
String formattedDate = approvedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
try {
status = "open";
if (percentage.contains("100")) {
status = "close";
}
String statustxt = status;
// Insert the data the required number of times
int affectedRows = jdbcWorksTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(sqlQuery, new String[] { "did" });
ps.setString(1, estid);
ps.setString(2, tmid);
ps.setString(3, percentage);
ps.setString(4, remarks);
ps.setString(5, cby);
ps.setString(6, zone);
ps.setString(7, ward);
ps.setString(8, latitude);
ps.setString(9, longitude);
ps.setString(10, finalfile);
ps.setString(11, statustxt);
ps.setString(12, wtid);
return ps;
}
}, keyHolder);
if (affectedRows > 0) {
Number generatedId = keyHolder.getKey();
lastInsertId = (generatedId != null) ? generatedId.intValue() : 0;
response.put("insertId", lastInsertId);
response.put("status", "success");
response.put("message", "Stage Task data inserted successfully!");
System.out.println("Stage Task was inserted successfully! Insert ID: " + generatedId);
updateStatus(percentage, estid, wtid);
} else {
response.put("status", "error");
response.put("message", "Failed to insert stage task data.");
}
} catch (DataAccessException e) {
System.out.println("Data Access Exception:");
Throwable rootCause = e.getMostSpecificCause();
if (rootCause instanceof SQLException) {
SQLException sqlException = (SQLException) rootCause;
System.out.println("SQL State: " + sqlException.getSQLState());
System.out.println("Error Code: " + sqlException.getErrorCode());
System.out.println("Message: " + sqlException.getMessage());
response.put("status", "error");
response.put("message", sqlException.getMessage());
response.put("sqlState", sqlException.getSQLState());
response.put("errorCode", sqlException.getErrorCode());
} else {
System.out.println("Message: " + rootCause.getMessage());
response.put("status", "error");
response.put("message", rootCause.getMessage());
}
}
/*
* // Update Percentage of works progress
* String sqlUpdateQuery ="UPDATE erp_works ew "
* + "JOIN ( "
* + " SELECT "
* + " ew.estid, "
* +
* " ROUND(SUM(COALESCE(etd.percentage, 0)) / COUNT(*), 0) AS physical_progress "
* + " FROM erp_works ew "
* + " JOIN erp_works_task ewt ON ewt.estid = ew.estid "
* + " JOIN erp_works_stages ews ON ews.estid = ew.estid "
* + " LEFT JOIN erp_task_data etd "
* + " ON etd.estid = ew.estid "
* + " AND etd.wtid = ewt.id "
* + " AND etd.tmid = ews.tmid "
* + " GROUP BY ew.estid "
* + " HAVING physical_progress > 0 "
* + ") AS prog "
* + "ON ew.estid = prog.estid "
* + "SET "
* + " ew.percentage = prog.physical_progress, "
* + " ew.update_status = CASE "
* + " WHEN prog.physical_progress = 0 THEN 'pending' "
* + " WHEN prog.physical_progress < 100 THEN 'Inprogress' "
* + " ELSE 'Completed' "
* + " END";
*/
String sqlUpdateQuery = "UPDATE erp_works ew "
+ "JOIN ( "
+ " SELECT "
+ " ew.estid, "
+ " ROUND(SUM(COALESCE(etd.percentage, 0)) / COUNT(*), 0) AS physical_progress "
+ " FROM erp_works ew "
+ " JOIN erp_works_task ewt ON ewt.estid = ew.estid "
+ " JOIN erp_works_stages ews ON ews.estid = ew.estid "
+ " LEFT JOIN ( "
// + " -- Get only the latest active record per (estid, wtid, tmid) "
+ " SELECT etd.* "
+ " FROM erp_task_data etd "
+ " INNER JOIN ( "
+ " SELECT estid, wtid, tmid, MAX(tdid) AS max_tdid "
+ " FROM erp_task_data "
+ " WHERE isactive = 1 "
+ " GROUP BY estid, wtid, tmid "
+ " ) latest ON latest.estid = etd.estid "
+ " AND latest.wtid = etd.wtid "
+ " AND latest.tmid = etd.tmid "
+ " AND latest.max_tdid = etd.tdid "
+ " ) etd ON etd.estid = ew.estid "
+ " AND etd.wtid = ewt.id "
+ " AND etd.tmid = ews.tmid "
+ " GROUP BY ew.estid "
+ " HAVING physical_progress > 0 "
+ ") AS prog "
+ "ON ew.estid = prog.estid "
+ "SET "
+ " ew.percentage = prog.physical_progress, "
+ " ew.update_status = CASE "
+ " WHEN prog.physical_progress = 0 THEN 'pending' "
+ " WHEN prog.physical_progress < 100 THEN 'Inprogress' "
+ " ELSE 'Completed' "
+ " END";
System.out.println("Percentage Update : " + sqlUpdateQuery + " --> ESTID : " + estid);
jdbcWorksTemplate.update(sqlUpdateQuery);
return Collections.singletonList(response);
}
public boolean updateStatus(String percentage, String estid, String wtid) {
int statusAffected = 0;
/*
* String selectSql = "SELECT "
* + " ewt.id,"
* +
* " ROUND(SUM(COALESCE(etd.percentage, 0)) / COUNT(*), 0) AS physical_progress"
* + " FROM erp_works ew"
* + " JOIN erp_works_task ewt ON ewt.estid = ew.estid"
* + " JOIN erp_works_stages ews ON ews.estid = ew.estid"
* + " LEFT JOIN erp_task_data etd "
* + " ON etd.estid = ew.estid "
* + " AND etd.wtid = ewt.id "
* + " AND etd.tmid = ews.tmid"
* + " AND ewt.id = ?"
* + " GROUP BY ew.estid"
* + " HAVING physical_progress > 0";
*/
String selectSql = "SELECT "
+ " ewt.id, "
+ " ROUND(SUM(COALESCE(etd.percentage, 0)) / COUNT(*), 0) AS physical_progress "
+ "FROM "
+ " erp_works ew "
+ "JOIN "
+ " erp_works_task ewt ON ewt.estid = ew.estid "
+ "JOIN "
+ " erp_works_stages ews ON ews.estid = ew.estid "
+ "LEFT JOIN ( "
// + " -- Subquery to get only latest entry per estid/wtid/tmid based on highest
// tdid "
+ " SELECT etd.* "
+ " FROM erp_task_data etd "
+ " INNER JOIN ( "
+ " SELECT estid, wtid, tmid, MAX(tdid) AS max_tdid "
+ " FROM erp_task_data "
+ " WHERE isactive = 1 "
+ " GROUP BY estid, wtid, tmid "
+ " ) latest ON latest.estid = etd.estid "
+ " AND latest.wtid = etd.wtid "
+ " AND latest.tmid = etd.tmid "
+ " AND latest.max_tdid = etd.tdid "
+ ") etd ON etd.estid = ew.estid "
+ " AND etd.wtid = ewt.id "
+ " AND etd.tmid = ews.tmid "
+ "WHERE "
+ " ewt.id = ? "
+ "GROUP BY "
+ " ew.estid "
+ "HAVING "
+ " physical_progress > 0";
List<Map<String, Object>> rows = jdbcWorksTemplate.queryForList(selectSql, new Object[] { wtid });
for (Map<String, Object> row : rows) {
int physical_progress = ((Number) row.get("physical_progress")).intValue();
String updateSql = "UPDATE `erp_works_task` SET `percentage`=? WHERE `estid`=? AND `id`=?";
statusAffected = jdbcWorksTemplate.update(updateSql, physical_progress, estid, wtid);
System.out.println("Updated " + statusAffected + " row(s) for estid=" + estid + ", wtid=" + wtid);
}
// System.out.println("UPDATE `erp_works_task` SET `percentage`="+percentage+"
// WHERE `estid`="+estid+" AND `id`="+wtid);
// System.out.println("UPDATE `erp_works_task` Status: " + statusAffected);
// int rowsAffected = 0;
// if (statusAffected > 0) {
/*
* sqlQuery = "UPDATE `works_update` SET `percentage`=? WHERE `id`=?";
* rowsAffected = jdbcWorksTemplate.update(sqlQuery, new
* Object[]{percentage,estid});
*
* System.out.println("UPDATE `works_update` SET `percentage`="
* +percentage+" WHERE `id`="+estid);
* System.out.println("UPDATE `works_update` Status: " + rowsAffected);
*/
// }
return true;
}
public List<Map<String, Object>> getZoneReport() {
String sql = "SELECT "
+ " CASE "
+ " WHEN zone = '00' THEN 'HQ' "
+ " ELSE zone "
+ " END AS zone, "
+ " COUNT(estid) AS Total, "
+ " SUM(CASE WHEN percentage = 100 THEN 1 ELSE 0 END) AS CompletedTotal, "
+ " SUM(CASE WHEN percentage > 0 AND percentage < 100 THEN 1 ELSE 0 END) AS OngoingTotal, "
+ " SUM(CASE WHEN percentage = 0 THEN 1 ELSE 0 END) AS NotStartedTotal "
+ "FROM "
+ " `erp_works` "
+ "GROUP BY "
+ " zone "
+ "ORDER BY "
+ " zone;";
List<Map<String, Object>> result = jdbcWorksTemplate.queryForList(sql);
// Prepare the response
Map<String, Object> response = new HashMap<>();
response.put("ZoneData", result);
response.put("message", "EST Activity Zone Data List.");
// Return the response wrapped in a singleton list
return Collections.singletonList(response);
}
public List<Map<String, Object>> getWardReport(String zone) {
String sql = "SELECT "
+ " CASE "
+ " WHEN zone = '00' THEN 'HQ' "
+ " ELSE zone "
+ " END AS zone, "
+ " CASE "
+ " WHEN ward = '000' THEN 'HQ' "
+ " ELSE ward "
+ " END AS ward, "
+ " COUNT(estid) AS Total, "
+ " SUM(CASE WHEN percentage = 100 THEN 1 ELSE 0 END) AS CompletedTotal, "
+ " SUM(CASE WHEN percentage > 0 AND percentage < 100 THEN 1 ELSE 0 END) AS OngoingTotal, "
+ " SUM(CASE WHEN percentage = 0 THEN 1 ELSE 0 END) AS NotStartedTotal "
+ "FROM "
+ " `erp_works` "
+ "WHERE zone=? "
+ "GROUP BY "
+ " zone, ward "
+ "ORDER BY "
+ " ward";
List<Map<String, Object>> result = jdbcWorksTemplate.queryForList(sql, zone);
// Prepare the response
Map<String, Object> response = new HashMap<>();
response.put("estWorklistData", result);
response.put("message", "EST Activity Data List.");
// Return the response wrapped in a singleton list
return Collections.singletonList(response);
}
public List<Map<String, Object>> getListReport(String ward, String statusFilter) {
StringBuilder sqlBuilder = new StringBuilder("SELECT "
+ "wu.`estid` AS estid, "
+ "tm.`description` AS works, "
+ "tm.id AS typeofworkid, "
+ "wu.`estimate_no`, "
+ "wu.`estimate_date`, "
+ "wu.`zone`, "
+ "wu.`ward`, "
+ "wu.`project_name`, "
+ "wu.`location`, "
+ "dm.`dept_name` AS `department`, "
+ "wu.`contractor_name`, "
+ "CAST(wu.contractor_period AS CHAR) AS contractor_period, "
+ "fs.`name` AS `fund_source`, "
+ "s.`name` AS `scheme`, "
+ "wm.`name` AS `category`, "
+ "tm.`description` AS `sub_category`, "
+ "wu.`estimation_amount` AS `est_amount`, "
+ "wu.`technical_sanction_date` AS `tech_sanc_date`, "
+ "wu.`admin_sanction_date` AS `admin_sanc_date`, "
+ "wu.`tender_called_date` AS `tender_call_date`, "
+ "wu.`tender_finalized_date` AS `tender_fin_date`, "
+ "wu.`loa_date` AS `loa_date`, "
+ "wu.`agreement_date` AS `agreement_date`, "
+ "wu.`work_order_date` AS `work_order_date`, "
+ "wu.`work_commenced_date` AS `work_comm_date`, "
+ "wu.`percentage` AS `percentage` "
+ "FROM `erp_works` wu "
+ "LEFT JOIN department_master dm ON dm.id = wu.`department` "
+ "LEFT JOIN fundsource_master fs ON fs.id = wu.`fund_source` "
+ "LEFT JOIN scheme_master s ON s.id = wu.`scheme` "
+ "LEFT JOIN workstype_master wm ON wm.id = wu.`category` "
+ "LEFT JOIN typeofwork_master tm ON tm.id = wu.`sub_category` "
+ "WHERE wu.`ward` = '" + ward + "' ");
switch (statusFilter) {
case "completed":
sqlBuilder.append("AND wu.percentage = 100 ");
break;
case "ongoing":
sqlBuilder.append("AND wu.percentage > 0 AND wu.percentage < 100 ");
break;
case "not_started":
sqlBuilder.append("AND wu.percentage = 0 ");
break;
// default is no filtering (all)
}
String sql = sqlBuilder.toString();
List<Map<String, Object>> result = jdbcWorksTemplate.queryForList(sql);
// Prepare the response
Map<String, Object> response = new HashMap<>();
response.put("estWorklistData", result);
response.put("message", "EST Data List.");
// Return the response wrapped in a singleton list
return Collections.singletonList(response);
}
}
Loading…
Cancel
Save