Commit 9373fdd5 authored by Roberto Loayza's avatar Roberto Loayza

Mantenimiento de ETL de borrado y dashboard.

parent 669488af
...@@ -24,7 +24,6 @@ import com.bytesw.bytebot.model.enums.AgentStatusEnum; ...@@ -24,7 +24,6 @@ import com.bytesw.bytebot.model.enums.AgentStatusEnum;
import com.bytesw.bytebot.model.enums.FrequencyType; import com.bytesw.bytebot.model.enums.FrequencyType;
import com.bytesw.bytebot.model.enums.ProcessETLEnum; import com.bytesw.bytebot.model.enums.ProcessETLEnum;
import com.bytesw.bytebot.repository.*; import com.bytesw.bytebot.repository.*;
import com.bytesw.xdf.exception.NotFoundException;
import com.bytesw.xdf.multitenant.core.ThreadLocalStorage; import com.bytesw.xdf.multitenant.core.ThreadLocalStorage;
import com.google.gson.Gson; import com.google.gson.Gson;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
...@@ -171,15 +170,14 @@ public class ScheduleService implements SchedulingConfigurer { ...@@ -171,15 +170,14 @@ public class ScheduleService implements SchedulingConfigurer {
private void configureTask(String tenantIdentifier, String identifier, ScheduledTaskRegistrar taskRegistrar) { private void configureTask(String tenantIdentifier, String identifier, ScheduledTaskRegistrar taskRegistrar) {
Trigger trigger = new CronTrigger(cronExpression, TimeZone.getDefault()); Trigger trigger = new CronTrigger(cronExpression, TimeZone.getDefault());
/* ETL de Dashboard */ /* ETL de Dashboard */
// String key = String.format("%s-%s", tenantIdentifier, identifier); String key = String.format("%s-%s", tenantIdentifier, identifier);
// futureMap.put(key, taskRegistrar.getScheduler().schedule(() -> scheduleCron(createJob(tenantIdentifier), tenantIdentifier), trigger)); futureMap.put(key, taskRegistrar.getScheduler().schedule(() -> scheduleCron(createJob(tenantIdentifier), tenantIdentifier), trigger));
/* Extraer el id del proceso - Delete */ /* Extraer el id del proceso - Delete */
ProcessETL processDelete = processETLRepository.findByName(ProcessETLEnum.PROCESS_DELETE.getName()); ProcessETL processDelete = processETLRepository.findByName(ProcessETLEnum.PROCESS_DELETE.getName());
/* Busca las listas de SchedulerTask */ /* Busca las listas de SchedulerTask */
List<SchedulerTask> listSchedulerTask = schedulerTaskRepository.findByEtlId(processDelete.getId()); List<SchedulerTask> listSchedulerTask = schedulerTaskRepository.findByEtlId(processDelete.getId());
System.out.println(listSchedulerTask);
for (SchedulerTask schedulerTask : listSchedulerTask) { for (SchedulerTask schedulerTask : listSchedulerTask) {
Trigger triggerDelete = new CronTrigger(schedulerTask.getCronExpression(), TimeZone.getDefault()); Trigger triggerDelete = new CronTrigger(schedulerTask.getCronExpression(), TimeZone.getDefault());
String keyScheduler = String.format("%s-%s", tenantIdentifier, schedulerTask.getCalendarID()); String keyScheduler = String.format("%s-%s", tenantIdentifier, schedulerTask.getCalendarID());
...@@ -192,7 +190,6 @@ public class ScheduleService implements SchedulingConfigurer { ...@@ -192,7 +190,6 @@ public class ScheduleService implements SchedulingConfigurer {
/*ETL eliminacion de data sensible*/ /*ETL eliminacion de data sensible*/
public void processDeleteData(String tenantIdentifier, ScheduledTaskRegistrar taskRegistrar, String calendarId) { public void processDeleteData(String tenantIdentifier, ScheduledTaskRegistrar taskRegistrar, String calendarId) {
Optional<List<WeekScheduler>> dates = weekSchedulerRepository.findByCalendarId(calendarId); Optional<List<WeekScheduler>> dates = weekSchedulerRepository.findByCalendarId(calendarId);
System.out.println(dates);
OffsetDateTime actual = OffsetDateTime.now(); OffsetDateTime actual = OffsetDateTime.now();
for(WeekScheduler weekScheduler: dates.get()) { for(WeekScheduler weekScheduler: dates.get()) {
if (actual.isBefore(weekScheduler.getTo()) && actual.isAfter(weekScheduler.getFrom())) { if (actual.isBefore(weekScheduler.getTo()) && actual.isAfter(weekScheduler.getFrom())) {
...@@ -202,7 +199,6 @@ public class ScheduleService implements SchedulingConfigurer { ...@@ -202,7 +199,6 @@ public class ScheduleService implements SchedulingConfigurer {
schedulerFlag = validateException(calendarException.get()); schedulerFlag = validateException(calendarException.get());
break; break;
} }
} else { } else {
schedulerFlag = false; schedulerFlag = false;
} }
...@@ -221,7 +217,6 @@ public class ScheduleService implements SchedulingConfigurer { ...@@ -221,7 +217,6 @@ public class ScheduleService implements SchedulingConfigurer {
keys.add(keyDataSens); keys.add(keyDataSens);
futureMap.put(keyDataSens, taskRegistrar.getScheduler() futureMap.put(keyDataSens, taskRegistrar.getScheduler()
.schedule(() -> scheduleCron(createJobDataSens(tenantIdentifier, data), tenantIdentifier), trigger)); .schedule(() -> scheduleCron(createJobDataSens(tenantIdentifier, data), tenantIdentifier), trigger));
System.out.println("Hola mundo");
} }
} }
} else { } else {
...@@ -281,7 +276,6 @@ public class ScheduleService implements SchedulingConfigurer { ...@@ -281,7 +276,6 @@ public class ScheduleService implements SchedulingConfigurer {
private Step createStep(String tenantIdentifier) { private Step createStep(String tenantIdentifier) {
ByteBotJPAWriter writer = new ByteBotJPAWriter(); ByteBotJPAWriter writer = new ByteBotJPAWriter();
writer.setService(service); writer.setService(service);
return stepBuilderFactory.get("processByteBotData").<DynaBean, DynaBean>chunk(chunk) return stepBuilderFactory.get("processByteBotData").<DynaBean, DynaBean>chunk(chunk)
.reader(getReader(tenantIdentifier)) .reader(getReader(tenantIdentifier))
.processor(new ConvertToBeanProcessor()) .processor(new ConvertToBeanProcessor())
...@@ -310,7 +304,7 @@ public class ScheduleService implements SchedulingConfigurer { ...@@ -310,7 +304,7 @@ public class ScheduleService implements SchedulingConfigurer {
private Job createJobDataSens(String tenantIdentifier, DeleteDataSensBean data) { private Job createJobDataSens(String tenantIdentifier, DeleteDataSensBean data) {
ThreadLocalStorage.setTenantName(tenantIdentifier); ThreadLocalStorage.setTenantName(tenantIdentifier);
return jobBuilderFactory.get("processJobDataSensible") return jobBuilderFactory.get( String.format("processDataSensible%d",+data.getAgenId()))
.incrementer(new RunIdIncrementer()).listener(listener) .incrementer(new RunIdIncrementer()).listener(listener)
.flow(createStepDataSens(tenantIdentifier, data)).end().build(); .flow(createStepDataSens(tenantIdentifier, data)).end().build();
} }
...@@ -344,7 +338,7 @@ public class ScheduleService implements SchedulingConfigurer { ...@@ -344,7 +338,7 @@ public class ScheduleService implements SchedulingConfigurer {
DeleteDataSensControlBean control = deleteDataSensJDBCRepository.getControl(data.getAgenId()); DeleteDataSensControlBean control = deleteDataSensJDBCRepository.getControl(data.getAgenId());
OffsetDateTime endDate = OffsetDateTime.now(); OffsetDateTime endDate = OffsetDateTime.now();
Long id = 13000L; Long id = 0L;
int differenceTime = 0; int differenceTime = 0;
if (control != null) { if (control != null) {
......
...@@ -25,9 +25,7 @@ import org.springframework.batch.item.ItemWriter; ...@@ -25,9 +25,7 @@ import org.springframework.batch.item.ItemWriter;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Optional;
@Log4j2 @Log4j2
...@@ -60,6 +58,13 @@ public class DataSensibleJPAWriter implements ItemWriter<DynaBean>, StepExecutio ...@@ -60,6 +58,13 @@ public class DataSensibleJPAWriter implements ItemWriter<DynaBean>, StepExecutio
@Override @Override
@Transactional @Transactional
public void write(List<? extends DynaBean> list) throws Exception { public void write(List<? extends DynaBean> list) throws Exception {
/* JSON de prueba */
//String jsonPrueba = "{\"telefonos_desplegados\":[{\"CodigoInternacional\": \"1415\",\"numero\": \"5238886\"},{\"CodigoInternacional\": \"51\",\"numero\": \"456789\"},{\"CodigoInternacional\": \"51\", \"numero\": \"456789\"}]}";
//agent.setChannelValue(jsonPrueba);
//-------
Object numeros = JsonUtils.getFieldFromJson(agent.getChannelValue(), "$.telefonos_desplegados");
List<String> numerosAgentes = numbersAgent((List<Map>) numeros);
//*------
for (DynaBean dynaBean : list) { for (DynaBean dynaBean : list) {
Long id = Long.parseLong(dynaBean.get("id").toString()); Long id = Long.parseLong(dynaBean.get("id").toString());
String json = (String) dynaBean.get("data"); String json = (String) dynaBean.get("data");
...@@ -72,7 +77,17 @@ public class DataSensibleJPAWriter implements ItemWriter<DynaBean>, StepExecutio ...@@ -72,7 +77,17 @@ public class DataSensibleJPAWriter implements ItemWriter<DynaBean>, StepExecutio
presentDate = presentDate.replace(timeZone, ""); presentDate = presentDate.replace(timeZone, "");
if (EventTypeEnum.USER.getName().equals(event)) { if (EventTypeEnum.USER.getName().equals(event)) {
String toAgent = (String) JsonUtils.getFieldFromJson(json, "$.metadata.To"); String toAgent = (String) JsonUtils.getFieldFromJson(json, "$.metadata.To");
if (agent.getChannelValue().equals(toAgent)) { //*------------
String agentNumber = new String();
if (toAgent == null) {
continue;
}
if (toAgent.isEmpty()) {
agentNumber = toAgent.split(":")[1];
}
//*------------
if (numerosAgentes.contains(agentNumber)) {
// if (agent.getChannelValue().equals(toAgent)) {
String intent = (String) JsonUtils.getFieldFromJson(json, "$.parse_data.intent.name"); String intent = (String) JsonUtils.getFieldFromJson(json, "$.parse_data.intent.name");
if (intentByAgent.contains(intent)) { if (intentByAgent.contains(intent)) {
String SmSMessageSid = (String) JsonUtils.getFieldFromJson(json, "$.metadata.SmsMessageSid"); String SmSMessageSid = (String) JsonUtils.getFieldFromJson(json, "$.metadata.SmsMessageSid");
...@@ -133,6 +148,19 @@ public class DataSensibleJPAWriter implements ItemWriter<DynaBean>, StepExecutio ...@@ -133,6 +148,19 @@ public class DataSensibleJPAWriter implements ItemWriter<DynaBean>, StepExecutio
} }
} }
//-------
private List<String> numbersAgent(List<Map> listNumber){
List<String> result = new ArrayList<>();
for (Map map : listNumber){
String cod = (String) map.get("CodigoInternacional");
String number = (String) map.get("numero");
String agent = "+" + cod + number;
result.add(agent);
}
return result;
}
//-------
@Override @Override
public void beforeStep(StepExecution stepExecution) { public void beforeStep(StepExecution stepExecution) {
String tenantId = stepExecution.getJobParameters().getString("tenantId"); String tenantId = stepExecution.getJobParameters().getString("tenantId");
......
...@@ -8,6 +8,7 @@ import org.springframework.data.repository.query.Param; ...@@ -8,6 +8,7 @@ import org.springframework.data.repository.query.Param;
import java.util.Optional; import java.util.Optional;
public interface IntentRepository extends CrudRepository<Intent, Long> { public interface IntentRepository extends CrudRepository<Intent, Long> {
Optional<Intent> findByIdentifier(String identifier); Optional<Intent> findByIdentifier(String identifier);
@Query("SELECT s from Intent s WHERE s.identifier = :intenIdent and s.agenId = :agenId") @Query("SELECT s from Intent s WHERE s.identifier = :intenIdent and s.agenId = :agenId")
......
package com.bytesw.bytebot.etl.services; package com.bytesw.bytebot.etl.services;
import com.bytesw.bytebot.etl.batch.beans.DeleteDataSensBean;
import com.bytesw.bytebot.etl.beans.SessionBean; import com.bytesw.bytebot.etl.beans.SessionBean;
import com.bytesw.bytebot.etl.dao.IntentRepository; import com.bytesw.bytebot.etl.dao.IntentRepository;
import com.bytesw.bytebot.etl.dao.MessageRepository; import com.bytesw.bytebot.etl.dao.MessageRepository;
...@@ -12,7 +13,10 @@ import com.bytesw.bytebot.etl.model.Message; ...@@ -12,7 +13,10 @@ import com.bytesw.bytebot.etl.model.Message;
import com.bytesw.bytebot.etl.model.Session; import com.bytesw.bytebot.etl.model.Session;
import com.bytesw.bytebot.etl.model.User; import com.bytesw.bytebot.etl.model.User;
import com.bytesw.bytebot.etl.utils.JsonUtils; import com.bytesw.bytebot.etl.utils.JsonUtils;
import com.bytesw.bytebot.jdbc.DeleteDataSensJDBCRepository;
import com.bytesw.bytebot.model.Channel; import com.bytesw.bytebot.model.Channel;
import com.bytesw.bytebot.model.enums.AgentParameterEnum;
import com.bytesw.bytebot.model.enums.AgentStatusEnum;
import com.bytesw.bytebot.repository.ChannelRepository; import com.bytesw.bytebot.repository.ChannelRepository;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -23,6 +27,9 @@ import javax.annotation.PostConstruct; ...@@ -23,6 +27,9 @@ import javax.annotation.PostConstruct;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
@Log4j2 @Log4j2
...@@ -48,6 +55,9 @@ public class UserMessageProcessed extends MessageProcessedSupport implements Mes ...@@ -48,6 +55,9 @@ public class UserMessageProcessed extends MessageProcessedSupport implements Mes
@Autowired @Autowired
private IntentRepository intentRepository; private IntentRepository intentRepository;
@Autowired
private DeleteDataSensJDBCRepository deleteDataSensJDBCRepository;
@Value("${application.etl.text-user.threshold:0.5}") @Value("${application.etl.text-user.threshold:0.5}")
private BigDecimal threshold; private BigDecimal threshold;
...@@ -69,26 +79,27 @@ public class UserMessageProcessed extends MessageProcessedSupport implements Mes ...@@ -69,26 +79,27 @@ public class UserMessageProcessed extends MessageProcessedSupport implements Mes
if (!userFound.isPresent()) { if (!userFound.isPresent()) {
return false; return false;
} }
SessionBean session = sessionBotJDBCRepository.getLastSessionByUser(userFound.get().getId()); SessionBean session = sessionBotJDBCRepository.getLastSessionByUser(userFound.get().getId());
if (session != null) { if (session != null) {
Message message = cloneMessage(json, session.getId()); /* ID del agente */
if (message != null) { Long agentId = identifierAgent(json);
int correlative = messageJDBCRepository.getLastCorrelativeBySession(message.getSessionId()); if (agentId >= 1) {
correlative++; Message message = cloneMessage(json, session.getId(), agentId);
message.setCorrelative(correlative); if (message != null) {
int correlative = messageJDBCRepository.getLastCorrelativeBySession(message.getSessionId());
messageRepository.save(message); correlative++;
message.setCorrelative(correlative);
String channel = (String) JsonUtils.getFieldFromJson(json, this.fields.get(CHANNEL_FIELD_NAME));
messageRepository.save(message);
updateSession(session.getId(), message.getDate(), channel);
return true; String channel = (String) JsonUtils.getFieldFromJson(json, this.fields.get(CHANNEL_FIELD_NAME));
updateSession(session.getId(), message.getDate(), channel);
return true;
}
} }
} }
} }
return false; return false;
} }
...@@ -107,7 +118,7 @@ public class UserMessageProcessed extends MessageProcessedSupport implements Mes ...@@ -107,7 +118,7 @@ public class UserMessageProcessed extends MessageProcessedSupport implements Mes
} }
} }
private Message cloneMessage(String json, Long sessionId) { private Message cloneMessage(String json, Long sessionId, Long agentId) {
Double timestamp = (Double) JsonUtils.getFieldFromJson(json, this.fields.get(TIMESTAMP_FIELD_NAME)); Double timestamp = (Double) JsonUtils.getFieldFromJson(json, this.fields.get(TIMESTAMP_FIELD_NAME));
Object confidence = JsonUtils.getFieldFromJson(json, this.fields.get(CONFIDENCE_FIELD_NAME)); Object confidence = JsonUtils.getFieldFromJson(json, this.fields.get(CONFIDENCE_FIELD_NAME));
String content = (String) JsonUtils.getFieldFromJson(json, this.fields.get(CONTENT_FIELD_NAME)); String content = (String) JsonUtils.getFieldFromJson(json, this.fields.get(CONTENT_FIELD_NAME));
...@@ -136,11 +147,44 @@ public class UserMessageProcessed extends MessageProcessedSupport implements Mes ...@@ -136,11 +147,44 @@ public class UserMessageProcessed extends MessageProcessedSupport implements Mes
if (MessageTypeEnum.ACCEPTED.equals(message.getType())) { if (MessageTypeEnum.ACCEPTED.equals(message.getType())) {
String intentName = (String) JsonUtils.getFieldFromJson(json, this.fields.get(INTENT_NAME)); String intentName = (String) JsonUtils.getFieldFromJson(json, this.fields.get(INTENT_NAME));
Optional<Intent> optionalIntent = intentRepository.findByIdentifier(intentName); Optional<Intent> optionalIntent = intentRepository.findIntenNameById(intentName, agentId);
if (optionalIntent.isPresent()) { if (optionalIntent.isPresent()) {
message.setIntentId(optionalIntent.get().getId()); message.setIntentId(optionalIntent.get().getId());
} }
} }
return message; return message;
} }
//-------
private Long identifierAgent(String json){
Long agentId = 0l;
String number= (String) JsonUtils.getFieldFromJson(json, "$.metadata.To");
if (number != null) {
number = number.split(":")[1];
List<DeleteDataSensBean> deleteDataSensBeans = deleteDataSensJDBCRepository
.getListAgentChannel(AgentStatusEnum.DEPLOYED.getName(), AgentParameterEnum.ACCESS_TWILIO.getName());
for (DeleteDataSensBean deleteDataSensBean: deleteDataSensBeans) {
Object numeros = JsonUtils.getFieldFromJson(deleteDataSensBean.getChannelValue(), "$.telefonos_desplegados");
List<String> numerosAgentes = numbersAgent((List<Map>) numeros);
if (numerosAgentes.contains(number)) {
agentId = deleteDataSensBean.getAgenId();
break;
}
}
}
return agentId;
}
private List<String> numbersAgent(List<Map> listNumber){
List<String> result = new ArrayList<>();
for (Map map : listNumber){
String cod = (String) map.get("CodigoInternacional");
String number = (String) map.get("numero");
String agent = "+" + cod + number;
result.add(agent);
}
return result;
}
//------
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment