From d6bd431a8b9296e982ae568e175cd359ed8685a0 Mon Sep 17 00:00:00 2001 From: gauravsharma-jup Date: Tue, 7 Jul 2026 15:26:08 +0530 Subject: [PATCH 1/3] Added Locality wise Demand Generation Also created new kafka topic for single demand generation (ws-scheduler-generate-single-demand-v2) --- .../config/WSCalculationConfiguration.java | 3 ++ .../consumer/DemandGenerationConsumer.java | 2 +- .../repository/BillGeneratorDao.java | 2 +- .../repository/WSCalculationDao.java | 2 +- .../repository/WSCalculationDaoImpl.java | 18 ++++++--- .../builder/WSCalculatorQueryBuilder.java | 12 ++++-- .../wscalculation/service/DemandService.java | 33 ++++++++++------ .../service/WSCalculationService.java | 9 +---- .../service/WSCalculationServiceImpl.java | 36 +++++++++++------ .../web/controller/CalculatorController.java | 6 +-- .../web/models/BulkDemandCriteria.java | 39 +++++++++++++++++++ .../web/models/BulkDemandReq.java | 26 +++++++++++++ .../src/main/resources/application.properties | 11 ++++-- .../config/WSCalculationConfiguration.java | 3 ++ .../repository/BillGeneratorDao.java | 2 +- .../repository/WSCalculationDao.java | 2 +- .../repository/WSCalculationDaoImpl.java | 14 +++++-- .../builder/WSCalculatorQueryBuilder.java | 8 +++- .../wscalculation/service/DemandService.java | 34 ++++++++++------ .../service/WSCalculationService.java | 9 +---- .../service/WSCalculationServiceImpl.java | 34 ++++++++++------ .../web/controller/CalculatorController.java | 4 +- .../web/models/BulkDemandCriteria.java | 39 +++++++++++++++++++ .../web/models/BulkDemandReq.java | 26 +++++++++++++ .../src/main/resources/application.properties | 1 + 25 files changed, 289 insertions(+), 86 deletions(-) create mode 100644 municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/models/BulkDemandCriteria.java create mode 100644 municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/models/BulkDemandReq.java create mode 100644 municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/models/BulkDemandCriteria.java create mode 100644 municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/models/BulkDemandReq.java diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/config/WSCalculationConfiguration.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/config/WSCalculationConfiguration.java index 2b446d81594..3b2de71d33e 100644 --- a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/config/WSCalculationConfiguration.java +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/config/WSCalculationConfiguration.java @@ -173,6 +173,9 @@ public class WSCalculationConfiguration { @Value("${egov.watercalculatorservice.createdemand.topic}") private String createDemand; + + @Value("${egov.watercalculatorservice.createsingledemand.topic}") + private String createSingleDemand; @Value("${ws.demand.based.batch.size}") private Integer batchSize; diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/consumer/DemandGenerationConsumer.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/consumer/DemandGenerationConsumer.java index d20ded867e6..69af27cbe15 100644 --- a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/consumer/DemandGenerationConsumer.java +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/consumer/DemandGenerationConsumer.java @@ -70,7 +70,7 @@ public class DemandGenerationConsumer { * Exception e){ log.error("KAFKA_PROCESS_ERROR", e); } } */ @KafkaListener( - topics = "${egov.watercalculatorservice.createdemand.topic}", + topics = {"${egov.watercalculatorservice.createdemand.topic}","${egov.watercalculatorservice.createsingledemand.topic}"}, containerFactory = "kafkaListenerContainerFactoryBatch", concurrency = "${egov.watercalculatorservice.listener.concurrency}" ) diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/BillGeneratorDao.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/BillGeneratorDao.java index 77a9ccd9221..3116527d2fe 100644 --- a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/BillGeneratorDao.java +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/BillGeneratorDao.java @@ -99,7 +99,7 @@ public List getConnectionsByStatus(String string, String status) { /** * executes query to update bill scheduler status - * @param billIds +// * @param billIds */ public void updateBillSchedularStatus(String schedulerId, StatusEnum status) { diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/WSCalculationDao.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/WSCalculationDao.java index d1cda6b64ea..2c4ce6a313b 100644 --- a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/WSCalculationDao.java +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/WSCalculationDao.java @@ -52,7 +52,7 @@ public interface WSCalculationDao { List getConnection(String tenantId, String consumerCode,String connectionType,Long fromDate, Long toDate); List getLocalityList(String tenantId, String locality); - List getConnectionsNoListforsingledemand(String tenantId, String connectionType, Long taxPeriodFrom, + List getConnectionsNoListforsingledemand(String tenantId, String locality, String connectionType, Long taxPeriodFrom, Long taxPeriodTo, String cone); List fetchUsageCategory(String consumerCodes); diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/WSCalculationDaoImpl.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/WSCalculationDaoImpl.java index a4e4a76b9f4..d767a9495dc 100644 --- a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/WSCalculationDaoImpl.java +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/WSCalculationDaoImpl.java @@ -371,14 +371,20 @@ public void updateBillStatus(List consumerCodes, String businessService, jdbcTemplate.update(queryStr, preparedStmtList.toArray()); } @Override - public List getConnectionsNoListforsingledemand(String tenantId, String connectionType, Long taxPeriodFrom, + public List getConnectionsNoListforsingledemand(String tenantId, String locality, String connectionType, Long taxPeriodFrom, Long taxPeriodTo, String cone) { - + String query; List preparedStatement = new ArrayList<>(); - String query = queryBuilder.getConnectionNumberList(tenantId, connectionType, - WSCalculationConstant.ACTIVE_CONNECTION, taxPeriodFrom, taxPeriodTo, cone, preparedStatement); - log.info("preparedStatement: " + preparedStatement + " connection type: " + connectionType - + " connection list : " + query); + if(locality!=null && !locality.trim().isEmpty()){ + query = queryBuilder.getConnectionNumberList(tenantId, locality, connectionType, + WSCalculationConstant.ACTIVE_CONNECTION, taxPeriodFrom, taxPeriodTo, cone, preparedStatement); + } + else { + query = queryBuilder.getConnectionNumberList(tenantId, null, connectionType, + WSCalculationConstant.ACTIVE_CONNECTION, taxPeriodFrom, taxPeriodTo, cone, preparedStatement); + log.info("preparedStatement: " + preparedStatement + " connection type: " + connectionType + + " connection list : " + query); + } return jdbcTemplate.query(query, preparedStatement.toArray(), demandSchedulerRowMapper); } diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java index c84192d8acf..b04d3f181e7 100644 --- a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java @@ -304,7 +304,7 @@ public String getMeterId(String connectionNo, Long lastReadingDate, Long current /** * Bill expire query builder * - * @param billIds +// * @param billIds * @param preparedStmtList */ public String getBillSchedulerUpdateQuery(String schedulerId, List preparedStmtList) { @@ -355,7 +355,7 @@ public String getLocalityListWithBatch(String tenantId, String batchCode, List preparedStatement) { StringBuilder query = new StringBuilder(connectionNoListQuery); @@ -380,6 +380,11 @@ public String getConnectionNumberList(String tenantId, String connectionType, St query.append(" conn.tenantid = ? "); preparedStatement.add(tenantId); + if (locality != null) { + addClauseIfRequired(preparedStatement, query); + query.append(" conn.locality = ? "); + preparedStatement.add(locality); + } // Test with connection number // addClauseIfRequired(preparedStatement, query); // query.append(" conn.connectionno = '0603000900' "); @@ -436,6 +441,7 @@ public String getConnectionNumberList(String tenantId, String connectionType, Li addClauseIfRequired(preparedStatement, query); query.append(" conn.tenantid = ? "); preparedStatement.add(tenantId); + addClauseIfRequired(preparedStatement, query); query.append(" conn.connectionno is not null"); @@ -686,7 +692,7 @@ public String searchLastDemandGenFromDate(String consumerCode, String tenantId, } /** - * @param billIds +// * @param billIds * @param preparedStmtList * @param builder */ diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/DemandService.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/DemandService.java index 7927af31b49..0086f838741 100644 --- a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/DemandService.java +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/DemandService.java @@ -227,7 +227,7 @@ public List generateDemand(CalculationReq request, List cal /** * Creates or updates Demand * - * @param requestInfo The RequestInfo of the calculation request +// * @param requestInfo The RequestInfo of the calculation request * @param calculations The Calculation Objects for which demand has to be * generated or updated */ @@ -349,7 +349,7 @@ public List generateDemandForBillingCycleInBulk(CalculationReq request, * @param calculations List of Calculation * @param masterMap Master MDMS Data * @return Returns list of demands - * @throws IOException +// * @throws IOException * @throws JsonMappingException */ private List createDemand(RequestInfo requestInfo, List calculations, @@ -1664,7 +1664,7 @@ private void updateRebate(BigDecimal newAmount, DemandDetailAndCollection latest * * @param tenantId TenantId for getting master data. */ - public void generateDemandForTenantId(String tenantId, RequestInfo requestInfo) { + public void generateDemandForTenantId(String tenantId, String locality, RequestInfo requestInfo) { requestInfo.getUserInfo().setTenantId(tenantId); Map billingMasterData = calculatorUtils.loadBillingFrequencyMasterData(requestInfo, tenantId); long taxPeriodFrom = billingMasterData.get("taxPeriodFrom") == null ? 0l @@ -1683,7 +1683,12 @@ public void generateDemandForTenantId(String tenantId, RequestInfo requestInfo) return; } - generateDemandForULB(billingMasterData, requestInfo, tenantId, taxPeriodFrom, taxPeriodTo); + if(locality!=null && !locality.trim().isEmpty()){ + generateDemandForULB(billingMasterData, requestInfo, tenantId, locality, taxPeriodFrom, taxPeriodTo); + } + else{ + generateDemandForULB(billingMasterData, requestInfo, tenantId,null, taxPeriodFrom, taxPeriodTo); + } } public String generateDemandForConsumerCode(RequestInfo requestInfo, BulkBillCriteria bulkBillCriteria) { @@ -1804,7 +1809,7 @@ public String generateDemandForSingle(Map master, SingleDemand s .filter(p -> taxPeriodFrom.equals(taxPeriods.get(p).getFromDate())).findFirst().getAsInt(); String cone = singleDemand.getConsumercode(); log.info("Billing master data values for non metered connection:: {}", master); - List connectionNos = waterCalculatorDao.getConnectionsNoListforsingledemand(tenantId, + List connectionNos = waterCalculatorDao.getConnectionsNoListforsingledemand(tenantId,null, WSCalculationConstant.nonMeterdConnection, taxPeriodFrom, taxPeriodTo, cone); int bulkSaveDemandCount = configs.getBulkSaveDemandCount() != null ? configs.getBulkSaveDemandCount() : 1; log.info("Total Connections: {} and batch count: {}", connectionNos.size(), bulkSaveDemandCount); @@ -1870,7 +1875,7 @@ public String generateDemandForSingle(Map master, SingleDemand s "Pushing calculation req to the kafka topic with bulk data of calculationCriteriaList size: {}", calculationCriteriaList.size()); - wsCalculationProducer.push(configs.getCreateDemand(), calculationReq); + wsCalculationProducer.push(configs.getCreateSingleDemand(), calculationReq); totalRecordsPushedToKafka = totalRecordsPushedToKafka + calculationCriteriaList.size(); calculationCriteriaList.clear(); connectionNosCount = 0; @@ -1894,7 +1899,7 @@ public String generateDemandForSingle(Map master, SingleDemand s "Pushing calculation last req to the kafka topic with bulk data of calculationCriteriaList size: {}", calculationCriteriaList.size()); - wsCalculationProducer.push(configs.getCreateDemand(), calculationReq); + wsCalculationProducer.push(configs.getCreateSingleDemand(), calculationReq); totalRecordsPushedToKafka = totalRecordsPushedToKafka + calculationCriteriaList.size(); calculationCriteriaList.clear(); connectionNosCount = 0; @@ -1982,9 +1987,9 @@ public List getConnectionPendingForDemand(RequestInfo requestIn * @param requestInfo Request Info * @param tenantId Tenant Id */ - public void generateDemandForULB(Map master, RequestInfo requestInfo, String tenantId, + public void generateDemandForULB(Map master, RequestInfo requestInfo, String tenantId, String locality, Long taxPeriodFrom, Long taxPeriodTo) { - log.info("generateDemandForULB:: {} taxPeriodFrom:: {} taxPeriodTo {}", tenantId, taxPeriodFrom, taxPeriodTo); + log.info("generateDemandForULB:: {} Locality:: {} taxPeriodFrom:: {} taxPeriodTo {}", tenantId, locality, taxPeriodFrom, taxPeriodTo); try { // ── Step 1: load tax periods from MDMS ─────────────────────────────── @@ -2018,8 +2023,14 @@ public void generateDemandForULB(Map master, RequestInfo request // ── Step 3: fetch connections from DB ───────────────────────────────── List connectionNos; try { - connectionNos = waterCalculatorDao.getConnectionsNoListforsingledemand(tenantId, - WSCalculationConstant.nonMeterdConnection, taxPeriodFrom, taxPeriodTo, cone); + if(locality!=null && !locality.trim().isEmpty()) { + connectionNos = waterCalculatorDao.getConnectionsNoListforsingledemand(tenantId, locality, + WSCalculationConstant.nonMeterdConnection, taxPeriodFrom, taxPeriodTo, cone); + } + else{ + connectionNos = waterCalculatorDao.getConnectionsNoListforsingledemand(tenantId, null, + WSCalculationConstant.nonMeterdConnection, taxPeriodFrom, taxPeriodTo, cone); + } } catch (Exception e) { log.error("\u274C DB fetch failed for connections (tenant: {}) | {}", tenantId, e.getMessage(), e); return; diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/WSCalculationService.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/WSCalculationService.java index 30644709896..cd67b2c5e03 100644 --- a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/WSCalculationService.java +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/WSCalculationService.java @@ -3,12 +3,7 @@ import java.util.List; import org.egov.common.contract.request.RequestInfo; -import org.egov.wscalculation.web.models.BulkBillCriteria; -import org.egov.wscalculation.web.models.Calculation; -import org.egov.wscalculation.web.models.CalculationReq; -import org.egov.wscalculation.web.models.CancelDemand; -import org.egov.wscalculation.web.models.SingleDemand; -import org.egov.wscalculation.web.models.WaterConnection; +import org.egov.wscalculation.web.models.*; public interface WSCalculationService { @@ -22,7 +17,7 @@ public interface WSCalculationService { // String cancelDemand(CancelDemand cancelDemand); void generateBillBasedLocality(RequestInfo requestInfo); - void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkBillCriteria bulkBillCriteria); + void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkDemandCriteria bulkDemandCriteria); String generateDemandForConsumerCodeBasedOnTimePeriod(RequestInfo requestInfo, BulkBillCriteria bulkBillCriteria); diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/WSCalculationServiceImpl.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/WSCalculationServiceImpl.java index 7f8170d1dd2..fb510640129 100644 --- a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/WSCalculationServiceImpl.java +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/service/WSCalculationServiceImpl.java @@ -697,15 +697,18 @@ public void getBillingPeriod(ArrayList mdmsResponse, RequestInfo requestInfo, /** * Generate Demand Based on Time (Monthly, Quarterly, Yearly) */ - public void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkBillCriteria bulkBillCriteria) { + public void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkDemandCriteria bulkDemandCriteria) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime date = LocalDateTime.now(); log.info("Time schedule start for water demand generation on : " + date.format(dateTimeFormatter)); // List tenantIds = wSCalculationDao.getTenantId(); List tenantIds = new ArrayList<>(); - String tenat = requestInfo.getMsgId(); + List localities = new ArrayList<>(); +// String tenat = requestInfo.getMsgId(); + String tenant = bulkDemandCriteria.getTenantId(); + String locality = bulkDemandCriteria.getLocality(); - if (!tenat.contains("pb")) { + if (!tenant.contains("pb")) { MdmsCriteriaReq mdmsCriteriaReq = calculatorUtil.gettenants(requestInfo); StringBuilder url = calculatorUtil.getMdmsSearchUrl(); Object res = repository.fetchResult(url, mdmsCriteriaReq); @@ -719,24 +722,29 @@ public void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkBillCri Object mdmsResObj = resMap.get("MdmsRes"); Map mdmsRes = (Map) mdmsResObj; Object tenantObj = mdmsRes.get("tenant"); - Map tenant = (Map) tenantObj; - Object waterSewerageObj = tenant.get("waterSewerage"); + Map tenantMap = (Map) tenantObj; + Object waterSewerageObj = tenantMap.get("waterSewerage"); List waterSewerageList = (List) waterSewerageObj; for (Object obj : waterSewerageList) { if (obj instanceof Map) { Map waterSewerageMap = (Map) obj; Object codeObj = waterSewerageMap.get("code"); + Object localitiesObj = waterSewerageMap.get("localities"); if (codeObj != null) { String code = codeObj.toString(); tenantIds.add(code); - } - } + } else if (localitiesObj != null ) { + String local = localitiesObj.toString(); + localities.add(local); + } + } } } } else { - tenantIds.add(tenat); + tenantIds.add(tenant); + localities.add(locality); } if (tenantIds.isEmpty()) { @@ -766,9 +774,15 @@ public void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkBillCri CompletableFuture future = CompletableFuture.runAsync(() -> { try { - log.info("\u25B6\uFE0F Demand generation started for tenant: {}", tenantId); - demandService.generateDemandForTenantId(tenantId, tenantRequestInfo); - log.info("\u2705 Demand generation completed for tenant: {}", tenantId); + if(!localities.isEmpty()){ + localities.forEach(localty -> { + demandService.generateDemandForTenantId(tenantId, localty, requestInfo); + }); + }else { + log.info("\u25B6\uFE0F Demand generation started for tenant: {}", tenantId); + demandService.generateDemandForTenantId(tenantId, null, requestInfo); + log.info("\u2705 Demand generation completed for tenant: {}", tenantId); + } } catch (Exception e) { // Catch everything — one tenant failure must NOT block others log.error("\u274C Demand generation failed for tenant: {} | {}", tenantId, e.getMessage(), e); diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/controller/CalculatorController.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/controller/CalculatorController.java index 4f4ddd935a1..d442092f510 100644 --- a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/controller/CalculatorController.java +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/controller/CalculatorController.java @@ -88,9 +88,9 @@ public ResponseEntity updateDemands(@RequestBody @Valid RequestI } @PostMapping("/_jobscheduler") - public void jobscheduler(@Valid @RequestBody BulkBillReq bulkBillReq) { - wSCalculationService.generateDemandBasedOnTimePeriod(bulkBillReq.getRequestInfo(), bulkBillReq.getBulkBillCriteria()); - } + public void jobscheduler(@Valid @RequestBody BulkDemandReq bulkDemandReq) { + wSCalculationService.generateDemandBasedOnTimePeriod(bulkDemandReq.getRequestInfo(), bulkDemandReq.getBulkDemandCriteria()); + } @PostMapping("/_singledemand") public ResponseEntity> singledemandgen(@Valid @RequestBody SingleDemand singledemand) { diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/models/BulkDemandCriteria.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/models/BulkDemandCriteria.java new file mode 100644 index 00000000000..dc6a19dc25e --- /dev/null +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/models/BulkDemandCriteria.java @@ -0,0 +1,39 @@ +package org.egov.wscalculation.web.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; +import org.springframework.validation.annotation.Validated; + +import java.util.List; + +@Validated +@Data +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +@ToString +public class BulkDemandCriteria { + + @JsonProperty("tenantIds") + private List tenantIds; + + @JsonProperty("offset") + private Long offset; + + @JsonProperty("limit") + private Long limit; + + @JsonProperty("consumerCode") + private String consumerCode; + + @JsonProperty("tenantId") + private String tenantId; + + @JsonProperty("locality") + private String locality; + + @JsonProperty("localities") + private List localities; +} diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/models/BulkDemandReq.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/models/BulkDemandReq.java new file mode 100644 index 00000000000..245dabca4f3 --- /dev/null +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/web/models/BulkDemandReq.java @@ -0,0 +1,26 @@ +package org.egov.wscalculation.web.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; +import org.egov.common.contract.request.RequestInfo; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotNull; + +@Validated +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +@ToString +public class BulkDemandReq { + + @JsonProperty("RequestInfo") + @NotNull + private RequestInfo requestInfo; + + @JsonProperty("BulkDemandCriteria") + private BulkDemandCriteria bulkDemandCriteria; + +} diff --git a/municipal-services/ws-calculator-v2/src/main/resources/application.properties b/municipal-services/ws-calculator-v2/src/main/resources/application.properties index 8ed479c631a..c9ef7180ae7 100644 --- a/municipal-services/ws-calculator-v2/src/main/resources/application.properties +++ b/municipal-services/ws-calculator-v2/src/main/resources/application.properties @@ -4,9 +4,13 @@ server.servlet.context-path=/ws-calculator-v2 app.timezone=UTC spring.datasource.driver-class-name=org.postgresql.Driver -spring.datasource.url=jdbc:postgresql://localhost:5432/pg -spring.datasource.username=postgres -spring.datasource.password=postgres +#spring.datasource.url=jdbc:postgresql://localhost:5432/pg +#spring.datasource.username=postgres +#spring.datasource.password=postgres + +spring.datasource.url=jdbc:postgresql://10.44.237.25:5432/egov_prod_db +spring.datasource.username=egovprod +spring.datasource.password=jr88WZdM#4YU##1Q #Set context root #KAFKA topic configuration @@ -33,6 +37,7 @@ spring.kafka.producer.value-serializer=org.springframework.kafka.support.seriali $KAFKA TOPIC DETAILS #egov.watercalculatorservice.createdemand.topic=ws-generate-demand egov.watercalculatorservice.createdemand.topic=ws-scheduler-generate-demand-v2 +egov.watercalculatorservice.createsingledemand.topic=ws-scheduler-generate-single-demand-v2 egov.watercalculatorservice.billgenerate.topic=ws-bulk-bill-job-scheduler-v2 #Demand Saved And Failed Topic diff --git a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/config/WSCalculationConfiguration.java b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/config/WSCalculationConfiguration.java index b210213abfb..1068fddce85 100644 --- a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/config/WSCalculationConfiguration.java +++ b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/config/WSCalculationConfiguration.java @@ -173,6 +173,9 @@ public class WSCalculationConfiguration { @Value("${egov.watercalculatorservice.createdemand.topic}") private String createDemand; + + @Value("${egov.watercalculatorservice.createsingledemand.topic}") + private String createSingleDemand; @Value("${ws.demand.based.batch.size}") private Integer batchSize; diff --git a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/BillGeneratorDao.java b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/BillGeneratorDao.java index 37734064e41..7dab5be07c6 100644 --- a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/BillGeneratorDao.java +++ b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/BillGeneratorDao.java @@ -103,7 +103,7 @@ public List getConnectionsByStatus(String string, String status) { /** * executes query to update bill scheduler status - * @param billIds +// * @param billIds */ public void updateBillSchedularStatus(String schedulerId, StatusEnum status) { diff --git a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/WSCalculationDao.java b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/WSCalculationDao.java index 30eb5330af6..dee40df2715 100644 --- a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/WSCalculationDao.java +++ b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/WSCalculationDao.java @@ -52,7 +52,7 @@ public interface WSCalculationDao { List getConnection(String tenantId, String consumerCode,String connectionType,Long fromDate, Long toDate); List getLocalityList(String tenantId, String locality); - List getConnectionsNoListforsingledemand(String tenantId, String connectionType, Long taxPeriodFrom, + List getConnectionsNoListforsingledemand(String tenantId, String locality, String connectionType, Long taxPeriodFrom, Long taxPeriodTo, String cone); List fetchUsageCategory(String consumerCodes); diff --git a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/WSCalculationDaoImpl.java b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/WSCalculationDaoImpl.java index 0f663002a8b..3aad9e74912 100644 --- a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/WSCalculationDaoImpl.java +++ b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/WSCalculationDaoImpl.java @@ -371,12 +371,18 @@ public void updateBillStatus(List consumerCodes, String businessService, jdbcTemplate.update(queryStr, preparedStmtList.toArray()); } @Override - public List getConnectionsNoListforsingledemand(String tenantId, String connectionType, Long taxPeriodFrom, + public List getConnectionsNoListforsingledemand(String tenantId, String locality, String connectionType, Long taxPeriodFrom, Long taxPeriodTo, String cone) { - + String query; List preparedStatement = new ArrayList<>(); - String query = queryBuilder.getConnectionNumberList(tenantId, connectionType, - WSCalculationConstant.ACTIVE_CONNECTION, taxPeriodFrom, taxPeriodTo, cone, preparedStatement); + if(locality!=null && !locality.trim().isEmpty()) { + query = queryBuilder.getConnectionNumberList(tenantId, locality, connectionType, + WSCalculationConstant.ACTIVE_CONNECTION, taxPeriodFrom, taxPeriodTo, cone, preparedStatement); + } + else{ + query = queryBuilder.getConnectionNumberList(tenantId, null, connectionType, + WSCalculationConstant.ACTIVE_CONNECTION, taxPeriodFrom, taxPeriodTo, cone, preparedStatement); + } log.info("preparedStatement: " + preparedStatement + " connection type: " + connectionType + " connection list : " + query); return jdbcTemplate.query(query, preparedStatement.toArray(), demandSchedulerRowMapper); diff --git a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java index 20ac35571bf..0eabdc17328 100644 --- a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java +++ b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java @@ -361,7 +361,7 @@ public String getLocalityListWithBatch(String tenantId, String batchCode, List preparedStatement) { StringBuilder query = new StringBuilder(connectionNoListQuery); @@ -386,6 +386,12 @@ public String getConnectionNumberList(String tenantId, String connectionType, St query.append(" conn.tenantid = ? "); preparedStatement.add(tenantId); + if (locality != null) { + addClauseIfRequired(preparedStatement, query); + query.append(" conn.locality = ? "); + preparedStatement.add(locality); + } + // Test with connection number // addClauseIfRequired(preparedStatement, query); // query.append(" conn.connectionno = '0603000900' "); diff --git a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/DemandService.java b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/DemandService.java index 457934cd1ac..57084633c85 100644 --- a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/DemandService.java +++ b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/DemandService.java @@ -220,7 +220,7 @@ public List generateDemand(CalculationReq request, List cal /** * Creates or updates Demand * - * @param requestInfo The RequestInfo of the calculation request +// * @param requestInfo The RequestInfo of the calculation request * @param calculations The Calculation Objects for which demand has to be * generated or updated */ @@ -292,7 +292,7 @@ public List generateDemandForBillingCycleInBulk(CalculationReq request, * @param calculations List of Calculation * @param masterMap Master MDMS Data * @return Returns list of demands - * @throws IOException +// * @throws IOException * @throws JsonMappingException */ private List createDemand(RequestInfo requestInfo, List calculations, @@ -1607,7 +1607,7 @@ private void updateRebate(BigDecimal newAmount, DemandDetailAndCollection latest * * @param tenantId TenantId for getting master data. */ - public void generateDemandForTenantId(String tenantId, RequestInfo requestInfo) { + public void generateDemandForTenantId(String tenantId, String locality, RequestInfo requestInfo) { requestInfo.getUserInfo().setTenantId(tenantId); Map billingMasterData = calculatorUtils.loadBillingFrequencyMasterData(requestInfo, tenantId); long taxPeriodFrom = billingMasterData.get("taxPeriodFrom") == null ? 0l @@ -1620,8 +1620,12 @@ public void generateDemandForTenantId(String tenantId, RequestInfo requestInfo) throw new CustomException("NO_BILLING_PERIODS", "MDMS Billing Period does not available for tenant: " + tenantId); } - - generateDemandForULB(billingMasterData, requestInfo, tenantId, taxPeriodFrom, taxPeriodTo); + if(locality!=null && !locality.trim().isEmpty()){ + generateDemandForULB(billingMasterData, requestInfo, tenantId, locality, taxPeriodFrom, taxPeriodTo); + } + else{ + generateDemandForULB(billingMasterData, requestInfo, tenantId,null, taxPeriodFrom, taxPeriodTo); + } } public String generateDemandForConsumerCode(RequestInfo requestInfo, BulkBillCriteria bulkBillCriteria) { @@ -1742,8 +1746,7 @@ public String generateDemandForSingle(Map master, SingleDemand s .filter(p -> taxPeriodFrom.equals(taxPeriods.get(p).getFromDate())).findFirst().getAsInt(); String cone = singleDemand.getConsumercode(); log.info("Billing master data values for non metered connection:: {}", master); - List connectionNos = waterCalculatorDao.getConnectionsNoListforsingledemand(tenantId, - WSCalculationConstant.nonMeterdConnection, taxPeriodFrom, taxPeriodTo, cone); + List connectionNos = waterCalculatorDao.getConnectionsNoListforsingledemand(tenantId,null, WSCalculationConstant.nonMeterdConnection, taxPeriodFrom, taxPeriodTo, cone); int bulkSaveDemandCount = configs.getBulkSaveDemandCount() != null ? configs.getBulkSaveDemandCount() : 1; log.info("Total Connections: {} and batch count: {}", connectionNos.size(), bulkSaveDemandCount); @@ -1809,7 +1812,7 @@ public String generateDemandForSingle(Map master, SingleDemand s "Pushing calculation req to the kafka topic with bulk data of calculationCriteriaList size: {}", calculationCriteriaList.size()); - wsCalculationProducer.push(configs.getCreateDemand(), calculationReq); + wsCalculationProducer.push(configs.getCreateSingleDemand(), calculationReq); totalRecordsPushedToKafka = totalRecordsPushedToKafka + calculationCriteriaList.size(); calculationCriteriaList.clear(); connectionNosCount = 0; @@ -1837,7 +1840,7 @@ public String generateDemandForSingle(Map master, SingleDemand s "Pushing calculation last req to the kafka topic with bulk data of calculationCriteriaList size: {}", calculationCriteriaList.size()); - wsCalculationProducer.push(configs.getCreateDemand(), calculationReq); + wsCalculationProducer.push(configs.getCreateSingleDemand(), calculationReq); totalRecordsPushedToKafka = totalRecordsPushedToKafka + calculationCriteriaList.size(); calculationCriteriaList.clear(); connectionNosCount = 0; @@ -1925,7 +1928,7 @@ public List getConnectionPendingForDemand(RequestInfo requestIn * @param requestInfo Request Info * @param tenantId Tenant Id */ - public void generateDemandForULB(Map master, RequestInfo requestInfo, String tenantId, + public void generateDemandForULB(Map master, RequestInfo requestInfo, String tenantId, String locality, Long taxPeriodFrom, Long taxPeriodTo) { log.info("generateDemandForULB:: {} taxPeriodFrom:: {} taxPeriodTo {}", tenantId, taxPeriodFrom, taxPeriodTo); try { @@ -1937,8 +1940,15 @@ public void generateDemandForULB(Map master, RequestInfo request String cone = requestInfo.getKey(); log.info("Billing master data values for non metered connection:: {}", master); - List connectionNos = waterCalculatorDao.getConnectionsNoListforsingledemand(tenantId, - WSCalculationConstant.nonMeterdConnection, taxPeriodFrom, taxPeriodTo, cone); + List connectionNos = new ArrayList<>(); + if(locality!=null && !locality.trim().isEmpty()) { + connectionNos = waterCalculatorDao.getConnectionsNoListforsingledemand(tenantId, locality, + WSCalculationConstant.nonMeterdConnection, taxPeriodFrom, taxPeriodTo, cone); + } + else{ + connectionNos = waterCalculatorDao.getConnectionsNoListforsingledemand(tenantId, null, + WSCalculationConstant.nonMeterdConnection, taxPeriodFrom, taxPeriodTo, cone); + } int bulkSaveDemandCount = configs.getBulkSaveDemandCount() != null ? configs.getBulkSaveDemandCount() : 1; log.info("Total Connections: {} and batch count: {}", connectionNos.size(), bulkSaveDemandCount); diff --git a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/WSCalculationService.java b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/WSCalculationService.java index 6b717b1ee56..6b4d9389ccf 100644 --- a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/WSCalculationService.java +++ b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/WSCalculationService.java @@ -3,12 +3,7 @@ import java.util.List; import org.egov.common.contract.request.RequestInfo; -import org.egov.wscalculation.web.models.BulkBillCriteria; -import org.egov.wscalculation.web.models.Calculation; -import org.egov.wscalculation.web.models.CalculationReq; -import org.egov.wscalculation.web.models.CancelDemand; -import org.egov.wscalculation.web.models.SingleDemand; -import org.egov.wscalculation.web.models.WaterConnection; +import org.egov.wscalculation.web.models.*; public interface WSCalculationService { @@ -22,7 +17,7 @@ public interface WSCalculationService { // String cancelDemand(CancelDemand cancelDemand); void generateBillBasedLocality(RequestInfo requestInfo); - void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkBillCriteria bulkBillCriteria); + void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkDemandCriteria bulkDemandCriteriaCriteria); String generateDemandForConsumerCodeBasedOnTimePeriod(RequestInfo requestInfo, BulkBillCriteria bulkBillCriteria); diff --git a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/WSCalculationServiceImpl.java b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/WSCalculationServiceImpl.java index 7d31bbf4c58..1e5fb28c140 100644 --- a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/WSCalculationServiceImpl.java +++ b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/service/WSCalculationServiceImpl.java @@ -693,15 +693,18 @@ public void getBillingPeriod(ArrayList mdmsResponse, RequestInfo requestInfo, /** * Generate Demand Based on Time (Monthly, Quarterly, Yearly) */ - public void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkBillCriteria bulkBillCriteria) { + public void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkDemandCriteria bulkDemandCriteria) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime date = LocalDateTime.now(); log.info("Time schedule start for water demand generation on : " + date.format(dateTimeFormatter)); // List tenantIds = wSCalculationDao.getTenantId(); List tenantIds = new ArrayList<>(); - String tenat = requestInfo.getMsgId(); + List localities = new ArrayList<>(); +// String tenat = requestInfo.getMsgId(); + String tenant = bulkDemandCriteria.getTenantId(); + String locality = bulkDemandCriteria.getLocality(); - if (!tenat.contains("pb")) { + if (!tenant.contains("pb")) { MdmsCriteriaReq mdmsCriteriaReq = calculatorUtil.gettenants(requestInfo); StringBuilder url = calculatorUtil.getMdmsSearchUrl(); Object res = repository.fetchResult(url, mdmsCriteriaReq); @@ -715,24 +718,29 @@ public void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkBillCri Object mdmsResObj = resMap.get("MdmsRes"); Map mdmsRes = (Map) mdmsResObj; Object tenantObj = mdmsRes.get("tenant"); - Map tenant = (Map) tenantObj; - Object waterSewerageObj = tenant.get("waterSewerage"); + Map tenantMap = (Map) tenantObj; + Object waterSewerageObj = tenantMap.get("waterSewerage"); List waterSewerageList = (List) waterSewerageObj; for (Object obj : waterSewerageList) { if (obj instanceof Map) { Map waterSewerageMap = (Map) obj; Object codeObj = waterSewerageMap.get("code"); + Object localitiesObj = waterSewerageMap.get("localities"); if (codeObj != null) { String code = codeObj.toString(); tenantIds.add(code); - } - } + } else if (localitiesObj != null ) { + String local = localitiesObj.toString(); + localities.add(local); + } + } } } } else { - tenantIds.add(tenat); + tenantIds.add(tenant); + localities.add(locality); } if (tenantIds.isEmpty()) { @@ -742,9 +750,13 @@ public void generateDemandBasedOnTimePeriod(RequestInfo requestInfo, BulkBillCri log.info("Tenant Ids : " + tenantIds.toString()); tenantIds.forEach(tenantId -> { try { - - demandService.generateDemandForTenantId(tenantId, requestInfo); - + if(!localities.isEmpty()){ + localities.forEach(localty -> { + demandService.generateDemandForTenantId(tenantId, localty, requestInfo); + }); + }else { + demandService.generateDemandForTenantId(tenantId,null, requestInfo); + } } catch (Exception e) { log.error("Exception occured while generating demand for tenant: " + tenantId); e.printStackTrace(); diff --git a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/controller/CalculatorController.java b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/controller/CalculatorController.java index a58394a0365..a11d0600f60 100644 --- a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/controller/CalculatorController.java +++ b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/controller/CalculatorController.java @@ -88,8 +88,8 @@ public ResponseEntity updateDemands(@RequestBody @Valid RequestI } @PostMapping("/_jobscheduler") - public void jobscheduler(@Valid @RequestBody BulkBillReq bulkBillReq) { - wSCalculationService.generateDemandBasedOnTimePeriod(bulkBillReq.getRequestInfo(), bulkBillReq.getBulkBillCriteria()); + public void jobscheduler(@Valid @RequestBody BulkDemandReq bulkDemandReq) { + wSCalculationService.generateDemandBasedOnTimePeriod(bulkDemandReq.getRequestInfo(), bulkDemandReq.getBulkDemandCriteria()); } @PostMapping("/_singledemand") diff --git a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/models/BulkDemandCriteria.java b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/models/BulkDemandCriteria.java new file mode 100644 index 00000000000..dc6a19dc25e --- /dev/null +++ b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/models/BulkDemandCriteria.java @@ -0,0 +1,39 @@ +package org.egov.wscalculation.web.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; +import org.springframework.validation.annotation.Validated; + +import java.util.List; + +@Validated +@Data +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +@ToString +public class BulkDemandCriteria { + + @JsonProperty("tenantIds") + private List tenantIds; + + @JsonProperty("offset") + private Long offset; + + @JsonProperty("limit") + private Long limit; + + @JsonProperty("consumerCode") + private String consumerCode; + + @JsonProperty("tenantId") + private String tenantId; + + @JsonProperty("locality") + private String locality; + + @JsonProperty("localities") + private List localities; +} diff --git a/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/models/BulkDemandReq.java b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/models/BulkDemandReq.java new file mode 100644 index 00000000000..245dabca4f3 --- /dev/null +++ b/municipal-services/ws-calculator/src/main/java/org/egov/wscalculation/web/models/BulkDemandReq.java @@ -0,0 +1,26 @@ +package org.egov.wscalculation.web.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; +import org.egov.common.contract.request.RequestInfo; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotNull; + +@Validated +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +@ToString +public class BulkDemandReq { + + @JsonProperty("RequestInfo") + @NotNull + private RequestInfo requestInfo; + + @JsonProperty("BulkDemandCriteria") + private BulkDemandCriteria bulkDemandCriteria; + +} diff --git a/municipal-services/ws-calculator/src/main/resources/application.properties b/municipal-services/ws-calculator/src/main/resources/application.properties index 6adfd3e1e57..650226799d8 100644 --- a/municipal-services/ws-calculator/src/main/resources/application.properties +++ b/municipal-services/ws-calculator/src/main/resources/application.properties @@ -33,6 +33,7 @@ spring.kafka.producer.value-serializer=org.springframework.kafka.support.seriali $KAFKA TOPIC DETAILS #egov.watercalculatorservice.createdemand.topic=ws-generate-demand egov.watercalculatorservice.createdemand.topic=ws-scheduler-generate-demand +egov.watercalculatorservice.createsingledemand.topic=ws-scheduler-generate-single-demand egov.watercalculatorservice.billgenerate.topic=ws-bulk-bill-job-scheduler #Demand Saved And Failed Topic From 00c1e6cc417db90a63e00fea5c2c6aafb45db228 Mon Sep 17 00:00:00 2001 From: gauravsharma-jup Date: Tue, 7 Jul 2026 15:50:35 +0530 Subject: [PATCH 2/3] Update application.properties --- .../src/main/resources/application.properties | 5 ----- 1 file changed, 5 deletions(-) diff --git a/municipal-services/ws-calculator-v2/src/main/resources/application.properties b/municipal-services/ws-calculator-v2/src/main/resources/application.properties index c9ef7180ae7..40a3ff4bfdb 100644 --- a/municipal-services/ws-calculator-v2/src/main/resources/application.properties +++ b/municipal-services/ws-calculator-v2/src/main/resources/application.properties @@ -8,11 +8,6 @@ spring.datasource.driver-class-name=org.postgresql.Driver #spring.datasource.username=postgres #spring.datasource.password=postgres -spring.datasource.url=jdbc:postgresql://10.44.237.25:5432/egov_prod_db -spring.datasource.username=egovprod -spring.datasource.password=jr88WZdM#4YU##1Q -#Set context root - #KAFKA topic configuration egov.meterservice.createmeterconnection=save-ws-meter-v2 egov.meterservice.updatemeterconnection=update-ws-meter-v2 From 9c9a764fae7c7937b5bb7e3616a264f37b0afbc7 Mon Sep 17 00:00:00 2001 From: gauravsharma-jup Date: Wed, 8 Jul 2026 09:59:39 +0530 Subject: [PATCH 3/3] Update WSCalculatorQueryBuilder.java --- .../repository/builder/WSCalculatorQueryBuilder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java index b04d3f181e7..4bc2b8b745c 100644 --- a/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java +++ b/municipal-services/ws-calculator-v2/src/main/java/org/egov/wscalculation/repository/builder/WSCalculatorQueryBuilder.java @@ -358,6 +358,7 @@ public String getLocalityListWithBatch(String tenantId, String batchCode, List preparedStatement) { StringBuilder query = new StringBuilder(connectionNoListQuery); + query.append(" INNER JOIN eg_pt_property p ON conn.property_id = p.propertyid INNER JOIN eg_pt_address a ON a.propertyid = p.id "); // Add connection type addClauseIfRequired(preparedStatement, query); @@ -382,7 +383,7 @@ public String getConnectionNumberList(String tenantId, String locality, String c if (locality != null) { addClauseIfRequired(preparedStatement, query); - query.append(" conn.locality = ? "); + query.append(" a.locality = ? "); preparedStatement.add(locality); } // Test with connection number