Skip to content
This repository has been archived by the owner on Aug 4, 2023. It is now read-only.

Wf centralinstance fix #175

Open
wants to merge 18 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion build/build-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -404,4 +404,17 @@ config:
image-name: "service-request"
dockerfile: "build/maven/Dockerfile"
- work-dir: "core-services/service-request/src/main/resources/db"
image-name: "service-request-db"
image-name: "service-request-db"

# frontend
- name: builds/Core-Platform/accelerators/workbench-ui
build:
- work-dir: accelerators/frontend/micro-ui/
dockerfile: accelerators/frontend/micro-ui/web/docker/Dockerfile
image-name: workbench-ui

- name: builds/Core-Platform/accelerators/digit-ui
build:
- work-dir: accelerators/frontend/micro-ui/
dockerfile: accelerators/frontend/micro-ui/web/docker/Dockerfile
image-name: digit-ui
6 changes: 3 additions & 3 deletions core-services/egov-searcher/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,12 @@
<dependency>
<groupId>org.egov.services</groupId>
<artifactId>services-common</artifactId>
<version>1.1.0-SNAPSHOT</version>
<version>1.1.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.egov</groupId>
<artifactId>enc-client</artifactId>
<version>2.0.3-SNAPSHOT</version>
<version>2.0.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
Expand Down Expand Up @@ -87,7 +87,7 @@
<dependency>
<groupId>org.egov.services</groupId>
<artifactId>tracer</artifactId>
<version>2.1.0-SNAPSHOT</version>
<version>2.1.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.egov.wf.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.*;
import java.util.TimeZone;

import javax.annotation.PostConstruct;

import org.egov.common.utils.MultiStateInstanceUtil;
import org.egov.tracer.config.TracerConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -11,8 +13,13 @@
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.TimeZone;
import com.fasterxml.jackson.databind.ObjectMapper;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;



Expand Down Expand Up @@ -84,7 +91,7 @@ public MappingJackson2HttpMessageConverter jacksonConverter(ObjectMapper objectM


// Statelevel tenantId required for escalation
@Value("${egov.statelevel.tenantid}")
@Value("${state.level.tenant.id}")
private String stateLevelTenantId;

@Value("${egov.wf.escalation.batch.size}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ public List<BusinessService> getBusinessServices(BusinessServiceSearchCriteria c
criteria.setTenantId(null);
List<Object> preparedStmtList = new ArrayList<>();
query = queryBuilder.getBusinessServices(criteria, preparedStmtList);
query = util.replaceSchemaPlaceholder(query, tenantId);
List<BusinessService> searchResults = jdbcTemplate.query(query, preparedStmtList.toArray(), rowMapper);

if(CollectionUtils.isEmpty(searchResults))
Expand Down Expand Up @@ -150,7 +151,7 @@ public Map<String,Map<String,List<String>>> getRoleTenantAndStatusMapping(String
}

/**
* Returns all the avialable businessServices
* Returns all the available businessServices
* @return
*/
private List<BusinessService> getAllBusinessService(String tenantIdForState){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.util.List;
import java.util.Map;

import org.egov.common.utils.MultiStateInstanceUtil;
import org.egov.wf.config.WorkflowConfig;
import org.egov.wf.repository.querybuilder.BusinessServiceQueryBuilder;
import org.egov.wf.repository.rowmapper.BusinessServiceRowMapper;
Expand Down Expand Up @@ -41,6 +42,9 @@ public class BusinessServiceRepositoryV1 {

@Autowired
private WorkflowUtil workflowUtil;

@Autowired
private MultiStateInstanceUtil multiStateInstanceUtil;


@Autowired
Expand Down Expand Up @@ -79,12 +83,14 @@ public List<BusinessService> getBusinessServices(BusinessServiceSearchCriteria c
List<BusinessService> searchResults = new LinkedList<>();

if(!CollectionUtils.isEmpty(stateLevelBusinessServices)){

BusinessServiceSearchCriteria stateLevelCriteria = new BusinessServiceSearchCriteria();
stateLevelCriteria.setTenantId(criteria.getTenantId().split("\\.")[0]);
stateLevelCriteria.setTenantId(multiStateInstanceUtil.getStateLevelTenant(criteria.getTenantId()));
stateLevelCriteria.setBusinessServices(stateLevelBusinessServices);
List<Object> stateLevelPreparedStmtList = new ArrayList<>();

query = queryBuilder.getBusinessServices(stateLevelCriteria, stateLevelPreparedStmtList);
workflowUtil.replaceSchemaPlaceholder(query, criteria.getTenantId());
query = workflowUtil.replaceSchemaPlaceholder(query, criteria.getTenantId());
searchResults.addAll(jdbcTemplate.query(query, stateLevelPreparedStmtList.toArray(), rowMapper));
}
if(!CollectionUtils.isEmpty(tenantBusinessServices)){
Expand All @@ -93,7 +99,7 @@ public List<BusinessService> getBusinessServices(BusinessServiceSearchCriteria c
tenantLevelCriteria.setBusinessServices(tenantBusinessServices);
List<Object> tenantLevelPreparedStmtList = new ArrayList<>();
query = queryBuilder.getBusinessServices(tenantLevelCriteria, tenantLevelPreparedStmtList);
workflowUtil.replaceSchemaPlaceholder(query, criteria.getTenantId());
query = workflowUtil.replaceSchemaPlaceholder(query, criteria.getTenantId());
searchResults.addAll(jdbcTemplate.query(query, tenantLevelPreparedStmtList.toArray(), rowMapper));
}

Expand All @@ -105,13 +111,13 @@ public List<BusinessService> getBusinessServices(BusinessServiceSearchCriteria c
* Creates map of roles vs tenantId vs List of status uuids from all the avialable businessServices
* @return
*/
@Cacheable(value = "roleTenantAndStatusesMapping")
public Map<String,Map<String,List<String>>> getRoleTenantAndStatusMapping(){
@Cacheable(value = "roleTenantAndStatusesMapping", key = "#tenantIdForState")
public Map<String,Map<String,List<String>>> getRoleTenantAndStatusMapping(String tenantIdForState){


Map<String, Map<String,List<String>>> roleTenantAndStatusMapping = new HashMap();

List<BusinessService> businessServices = getAllBusinessService();
List<BusinessService> businessServices = getAllBusinessService(tenantIdForState);

for(BusinessService businessService : businessServices){

Expand Down Expand Up @@ -164,11 +170,11 @@ public Map<String,Map<String,List<String>>> getRoleTenantAndStatusMapping(){
* Returns all the avialable businessServices
* @return
*/
private List<BusinessService> getAllBusinessService(){
private List<BusinessService> getAllBusinessService(String tenantIdForState){

List<Object> preparedStmtList = new ArrayList<>();
String query = queryBuilder.getBusinessServices(new BusinessServiceSearchCriteria(), preparedStmtList);

query = workflowUtil.replaceSchemaPlaceholder(query, tenantIdForState);
List<BusinessService> businessServices = jdbcTemplate.query(query, preparedStmtList.toArray(), rowMapper);
List<BusinessService> filterBusinessServices = filterBusinessServices((businessServices));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class BusinessServiceQueryBuilder {
" ac.lastModifiedTime as ac_lastModifiedTime,ac.createdTime as ac_createdTime," +
"ac.createdBy as ac_createdBy,ac.lastModifiedBy as ac_lastModifiedBy," +
"ac.uuid as ac_uuid,ac.tenantId as ac_tenantId,ac.active as ac_active " +
" {SCHEMA}.FROM eg_wf_businessService_v2 bs " +
" FROM {SCHEMA}.eg_wf_businessService_v2 bs " +
INNER_JOIN + " {SCHEMA}.eg_wf_state_v2 st ON st.businessServiceId = bs.uuid " +
LEFT_OUTER_JOIN + " {SCHEMA}.eg_wf_action_v2 ac ON ac.currentState = st.uuid AND ac.active=TRUE ";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package org.egov.wf.repository.querybuilder;

import org.apache.commons.lang3.StringUtils;
import java.util.List;

import org.egov.wf.web.models.EscalationSearchCriteria;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class EscalationQueryBuilder {

Expand All @@ -14,7 +13,7 @@ public class EscalationQueryBuilder {

private static final String BASE_QUERY = "select businessId from (" +
" SELECT *,RANK () OVER (PARTITION BY businessId ORDER BY createdtime DESC) rank_number " +
" FROM eg_wf_processinstance_v2 WHERE businessservice = ? AND tenantid= ? ) wf WHERE rank_number = 1 ";
" FROM {SCHEMA}.eg_wfprocessinstance_v2 WHERE businessservice = ? AND tenantid= ? ) wf WHERE rank_number = 1 ";


/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,18 @@ public WorkflowQueryBuilder(WorkflowConfig config) {

private final String ORDERBY_CREATEDTIME = " ORDER BY result_offset.wf_createdTime DESC ";

private final String LATEST_RECORD = " pi.lastmodifiedTime IN (SELECT max(lastmodifiedTime) from eg_wf_processinstance_v2 GROUP BY businessid) ";
private final String LATEST_RECORD = " pi.lastmodifiedTime IN (SELECT max(lastmodifiedTime) from {SCHEMA}.eg_wf_processinstance_v2 GROUP BY businessid) ";

private static final String COUNT_WRAPPER = "select count(DISTINCT wf_id) from ({INTERNAL_QUERY}) as count";
private static final String COUNT_WRAPPER_ESCALATED = "select count(DISTINCT businessid) from ({INTERNAL_QUERY}) as count";
private static final String COUNT_WRAPPER_INBOX = " select count(DISTINCT id) from ({INTERNAL_QUERY}) as count" ;
private static final String BASE_QUERY = "select businessId from (" +
" SELECT *,RANK () OVER (PARTITION BY businessId ORDER BY createdtime DESC) rank_number " +
" FROM eg_wf_processinstance_v2 ";
" FROM {SCHEMA}.eg_wf_processinstance_v2 ";

private static final String RANK_WRAPPER = "SELECT wf.* , assg.assignee AS asg, " +
" DENSE_RANK() OVER(PARTITION BY wf.businessid ORDER BY wf.createdtime DESC) outer_rank " +
" FROM eg_wf_processinstance_v2 wf LEFT OUTER JOIN eg_wf_assignee_v2 assg ON wf.id = assg.processinstanceid WHERE wf.businessid IN ({BASE_QUERY})";
" FROM {SCHEMA}.eg_wf_processinstance_v2 wf LEFT OUTER JOIN {SCHEMA}.eg_wf_assignee_v2 assg ON wf.id = assg.processinstanceid WHERE wf.businessid IN ({BASE_QUERY})";

private static final String FINAL_ESCALATED_QUERY ="SELECT businessid from ( {RANKED_QUERY} ) final WHERE outer_rank = 2 ";

Expand Down Expand Up @@ -141,7 +141,7 @@ public String getProcessInstanceIds(ProcessInstanceSearchCriteria criteria, List

if (!criteria.getHistory()) {
with_query_builder.append(" pi_outer.lastmodifiedTime = (" +
"SELECT max(lastmodifiedTime) from eg_wf_processinstance_v2 as pi_inner where pi_inner.businessid = pi_outer.businessid and tenantid = ? " +
"SELECT max(lastmodifiedTime) from {SCHEMA}.eg_wf_processinstance_v2 as pi_inner where pi_inner.businessid = pi_outer.businessid and tenantid = ? " +
") ");
preparedStmtList.add(criteria.getTenantId());
}
Expand Down Expand Up @@ -179,7 +179,7 @@ public String getProcessInstanceIds(ProcessInstanceSearchCriteria criteria, List
}

if(criteria.getAssignee()!=null){
with_query_builder.append(" and id in (select processinstanceid from eg_wf_assignee_v2 asg_inner where asg_inner.assignee = ?) AND pi_outer.tenantid = ? ");
with_query_builder.append(" and id in (select processinstanceid from {SCHEMA}.eg_wf_assignee_v2 asg_inner where asg_inner.assignee = ?) AND pi_outer.tenantid = ? ");
preparedStmtList.add(criteria.getAssignee());
preparedStmtList.add(criteria.getTenantId());
}
Expand Down Expand Up @@ -295,7 +295,7 @@ public String getInboxIdCount(ProcessInstanceSearchCriteria criteria, ArrayList<
public String getInboxIdQuery(ProcessInstanceSearchCriteria criteria, List<Object> preparedStmtList, Boolean isPaginationRequired){

String with_query = WITH_CLAUSE + " pi_outer.lastmodifiedTime = (" +
"SELECT max(lastmodifiedTime) from eg_wf_processinstance_v2 as pi_inner where pi_inner.businessid = pi_outer.businessid and tenantid = ? " +
"SELECT max(lastmodifiedTime) from {SCHEMA}.eg_wf_processinstance_v2 as pi_inner where pi_inner.businessid = pi_outer.businessid and tenantid = ? " +
") ";

preparedStmtList.add(criteria.getTenantId());
Expand All @@ -305,12 +305,12 @@ public String getInboxIdQuery(ProcessInstanceSearchCriteria criteria, List<Objec

if(criteria.getIsAssignedToMeCount()!=null && criteria.getIsAssignedToMeCount())
{
with_query_builder.append(" AND id in (select processinstanceid from eg_wf_assignee_v2 asg_inner where asg_inner.assignee = ?) AND pi_outer.tenantid = ? ");
with_query_builder.append(" AND id in (select processinstanceid from {SCHEMA}.eg_wf_assignee_v2 asg_inner where asg_inner.assignee = ?) AND pi_outer.tenantid = ? ");
preparedStmtList.add(criteria.getAssignee());
preparedStmtList.add(criteria.getTenantId());
}
else if(!config.getAssignedOnly() && !CollectionUtils.isEmpty(tenantSpecificStatus)){
String clause = " AND ((id in (select processinstanceid from eg_wf_assignee_v2 asg_inner where asg_inner.assignee = ?)" +
String clause = " AND ((id in (select processinstanceid from {SCHEMA}.eg_wf_assignee_v2 asg_inner where asg_inner.assignee = ?)" +
" AND pi_outer.tenantid = ? ) {{OR_CLUASE_PLACEHOLDER}} )";

preparedStmtList.add(criteria.getAssignee());
Expand All @@ -324,7 +324,7 @@ else if(!config.getAssignedOnly() && !CollectionUtils.isEmpty(tenantSpecificStat
if(!isNull(criteria.getModuleName()) && criteria.getModuleName().equals("BPAREG")) {
List<String> statusesIrrespectiveOfTenant = criteria.getStatusesIrrespectiveOfTenant();
if (CollectionUtils.isEmpty(tenantSpecificStatus) && !CollectionUtils.isEmpty(statusesIrrespectiveOfTenant)) {
String clause = " AND ((id in (select processinstanceid from eg_wf_assignee_v2 asg_inner where asg_inner.assignee = ?)" +
String clause = " AND ((id in (select processinstanceid from {SCHEMA}.eg_wf_assignee_v2 asg_inner where asg_inner.assignee = ?)" +
" AND pi_outer.tenantid = ? ) {{OR_CLUASE_PLACEHOLDER}} )";

preparedStmtList.add(criteria.getAssignee());
Expand All @@ -336,7 +336,7 @@ else if(!config.getAssignedOnly() && !CollectionUtils.isEmpty(tenantSpecificStat
with_query_builder.append(clause);
}
} else {
with_query_builder.append(" AND id in (select processinstanceid from eg_wf_assignee_v2 asg_inner where asg_inner.assignee = ?) AND pi_outer.tenantid = ? ");
with_query_builder.append(" AND id in (select processinstanceid from {SCHEMA}.eg_wf_assignee_v2 asg_inner where asg_inner.assignee = ?) AND pi_outer.tenantid = ? ");
preparedStmtList.add(criteria.getAssignee());
preparedStmtList.add(criteria.getTenantId());
}
Expand Down Expand Up @@ -434,7 +434,7 @@ public String getInboxCount(ProcessInstanceSearchCriteria criteria, List<Object>
String countQuery = null;

if(statuCount) {
countQuery = "select count(DISTINCT cq.id),cq.applicationStatus,cq.businessservice,cq.PI_STATUS as statusId from ( select ppi.id,ppi.businessservice,ppst.applicationstatus,ppi.status as PI_STATUS FROM eg_wf_processinstance_v2 ppi JOIN eg_wf_state_v2 ppst ON ( ppst.uuid =ppi.status ) WHERE ppi.id IN ({INTERNAL_QUERY}) ) cq GROUP BY cq.applicationStatus,cq.businessservice,cq.PI_STATUS";
countQuery = "select count(DISTINCT cq.id),cq.applicationStatus,cq.businessservice,cq.PI_STATUS as statusId from ( select ppi.id,ppi.businessservice,ppst.applicationstatus,ppi.status as PI_STATUS FROM {SCHEMA}.eg_wf_processinstance_v2 ppi JOIN {SCHEMA}.eg_wf_state_v2 ppst ON ( ppst.uuid =ppi.status ) WHERE ppi.id IN ({INTERNAL_QUERY}) ) cq GROUP BY cq.applicationStatus,cq.businessservice,cq.PI_STATUS";

countQuery = countQuery.replace("{INTERNAL_QUERY}", query);
}else {
Expand Down Expand Up @@ -471,7 +471,7 @@ private String addCountWrapper(String query){


public String getInboxApplicationsBusinessIdsQuery(ProcessInstanceSearchCriteria criteria, ArrayList<Object> preparedStmtList) {
StringBuilder query = new StringBuilder("SELECT DISTINCT businessid FROM eg_wf_processinstance_v2 ");
StringBuilder query = new StringBuilder("SELECT DISTINCT businessid FROM {SCHEMA}.eg_wf_processinstance_v2 ");

if(!isNull(criteria.getTenantId())){
addClauseIfRequired(query, preparedStmtList);
Expand Down
Loading