Merge branch 'release/release-1.2.0'
This commit is contained in:
commit
4d26cddf69
21
pom.xml
21
pom.xml
@ -5,13 +5,14 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>org.sadtech.autoresponder</groupId>
|
||||
<artifactId>core</artifactId>
|
||||
<version>1.1.1-RELEASE</version>
|
||||
<artifactId>autoresponder</artifactId>
|
||||
<version>1.2.0-RELEASE</version>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.0</version>
|
||||
<configuration>
|
||||
<source>8</source>
|
||||
<target>8</target>
|
||||
@ -20,21 +21,21 @@
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<id>uPagge</id>
|
||||
<name>Struchkov Mark</name>
|
||||
<email>upagge@mail.ru</email>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<properties>
|
||||
<lombok.ver>1.18.4</lombok.ver>
|
||||
<log4j>1.2.17</log4j>
|
||||
<junit.ver>4.12</junit.ver>
|
||||
<mocito.ver>2.23.4</mocito.ver>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${lombok.ver}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
|
@ -1,6 +1,6 @@
|
||||
package org.sadtech.autoresponder;
|
||||
|
||||
import lombok.extern.log4j.Log4j;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.sadtech.autoresponder.entity.Person;
|
||||
import org.sadtech.autoresponder.entity.Unit;
|
||||
import org.sadtech.autoresponder.entity.compare.UnitPriorityComparator;
|
||||
@ -10,11 +10,13 @@ import org.sadtech.autoresponder.submodule.parser.Parser;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
@Log4j
|
||||
public class Autoresponder {
|
||||
|
||||
public static final Logger log = Logger.getLogger(Autoresponder.class);
|
||||
|
||||
private UnitService unitService;
|
||||
private PersonService personService;
|
||||
|
||||
@ -28,10 +30,16 @@ public class Autoresponder {
|
||||
Unit unit;
|
||||
if (person.getUnit() == null) {
|
||||
unit = nextUnit(unitService.menuUnit(), message);
|
||||
} else {
|
||||
if (person.getUnit().getNextUnits() == null) {
|
||||
unit = nextUnit(unitService.menuUnit(), message);
|
||||
} else {
|
||||
unit = nextUnit(person.getUnit().getNextUnits(), message);
|
||||
}
|
||||
}
|
||||
if (unit != null) {
|
||||
person.setUnit(unit);
|
||||
}
|
||||
return unit;
|
||||
}
|
||||
|
||||
@ -51,17 +59,22 @@ public class Autoresponder {
|
||||
Parser parser = new Parser();
|
||||
parser.setText(message);
|
||||
parser.parse();
|
||||
return nextUnits.stream().filter(nextUnit -> textPercentageMatch(nextUnit, parser.getWords()) >= nextUnit.getMatchThreshold()).max(new UnitPriorityComparator()).get();
|
||||
Optional<Unit> max = nextUnits.stream().filter(nextUnit -> textPercentageMatch(nextUnit, parser.getWords()) >= nextUnit.getMatchThreshold() || nextUnit.getKeyWords() == null).max(new UnitPriorityComparator());
|
||||
return max.orElse(null);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private Double textPercentageMatch(Unit unit, Set<String> words) {
|
||||
if (unit.getKeyWords() != null) {
|
||||
Set<String> temp = new HashSet<>(unit.getKeyWords());
|
||||
temp.retainAll(words);
|
||||
log.info((temp.size() / unit.getKeyWords().size()) * 100);
|
||||
return (double) (temp.size() / unit.getKeyWords().size()) * 100;
|
||||
} else {
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,29 +1,40 @@
|
||||
package org.sadtech.autoresponder.entity;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public abstract class Unit {
|
||||
|
||||
private Set<String> keyWords;
|
||||
private Integer matchThreshold;
|
||||
private Integer priority;
|
||||
private Boolean level;
|
||||
private List<Unit> nextUnits;
|
||||
|
||||
public Unit() {
|
||||
level = false;
|
||||
priority = 10;
|
||||
matchThreshold = 50;
|
||||
}
|
||||
|
||||
public Unit(Set<String> keyWords, Integer matchThreshold, Integer priority, Boolean level, List<Unit> nextUnits) {
|
||||
this.keyWords = keyWords;
|
||||
this.matchThreshold = matchThreshold;
|
||||
this.priority = priority;
|
||||
this.level = level;
|
||||
this.nextUnits = nextUnits;
|
||||
}
|
||||
|
||||
public void setKeyWord(String keyWord) {
|
||||
if (keyWords == null) {
|
||||
keyWords = new HashSet<>();
|
||||
}
|
||||
keyWords.add(keyWord);
|
||||
}
|
||||
|
||||
public void setNextUnit(Unit unit) {
|
||||
if (nextUnits == null) {
|
||||
nextUnits = new ArrayList<>();
|
||||
}
|
||||
nextUnits.add(unit);
|
||||
}
|
||||
|
||||
public Set<String> getKeyWords() {
|
||||
return keyWords;
|
||||
}
|
||||
@ -48,14 +59,6 @@ public abstract class Unit {
|
||||
this.priority = priority;
|
||||
}
|
||||
|
||||
public Boolean getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
public void setLevel(Boolean level) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
public List<Unit> getNextUnits() {
|
||||
return nextUnits;
|
||||
}
|
||||
@ -72,12 +75,11 @@ public abstract class Unit {
|
||||
return Objects.equals(keyWords, unit.keyWords) &&
|
||||
Objects.equals(matchThreshold, unit.matchThreshold) &&
|
||||
Objects.equals(priority, unit.priority) &&
|
||||
Objects.equals(level, unit.level) &&
|
||||
Objects.equals(nextUnits, unit.nextUnits);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(keyWords, matchThreshold, priority, level, nextUnits);
|
||||
return Objects.hash(keyWords, matchThreshold, priority, nextUnits);
|
||||
}
|
||||
}
|
||||
|
@ -2,17 +2,14 @@ package org.sadtech.autoresponder.repository;
|
||||
|
||||
import org.sadtech.autoresponder.entity.Unit;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public interface UnitRepository {
|
||||
public interface UnitRepository<T extends Unit> {
|
||||
|
||||
void addUnit(Unit unit);
|
||||
void addUnit(T unit);
|
||||
|
||||
void addUnits(Collection<Unit> units);
|
||||
void addUnits(List<T> units);
|
||||
|
||||
void removeUnit(Unit idUnit);
|
||||
|
||||
List<Unit> menuUnits();
|
||||
List<T> menuUnits();
|
||||
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ public class PersonRepositoryMap implements PersonRepository {
|
||||
|
||||
@Override
|
||||
public void removePerson(Person person) {
|
||||
people.remove(person);
|
||||
people.remove(person.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -11,4 +11,6 @@ public interface UnitService {
|
||||
|
||||
void addUnitRepository(UnitRepository unitRepository);
|
||||
|
||||
UnitRepository getUnitRepository(Class clazz);
|
||||
|
||||
}
|
||||
|
@ -4,8 +4,12 @@ import org.sadtech.autoresponder.entity.Person;
|
||||
import org.sadtech.autoresponder.repository.PersonRepository;
|
||||
import org.sadtech.autoresponder.service.PersonService;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
public class PersonServiceImpl implements PersonService {
|
||||
|
||||
private static final Logger log = Logger.getLogger(PersonServiceImpl.class);
|
||||
|
||||
private PersonRepository personRepository;
|
||||
|
||||
public PersonServiceImpl(PersonRepository personRepository) {
|
||||
@ -20,6 +24,7 @@ public class PersonServiceImpl implements PersonService {
|
||||
@Override
|
||||
public void addPerson(Person person) {
|
||||
personRepository.addPerson(person);
|
||||
log.info("Пользователь отправлен в репозиторий");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,6 +1,6 @@
|
||||
package org.sadtech.autoresponder.service.impl;
|
||||
|
||||
import lombok.extern.log4j.Log4j;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.sadtech.autoresponder.entity.Unit;
|
||||
import org.sadtech.autoresponder.repository.UnitRepository;
|
||||
import org.sadtech.autoresponder.service.UnitService;
|
||||
@ -8,9 +8,10 @@ import org.sadtech.autoresponder.service.UnitService;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Log4j
|
||||
public class UnitServiceImpl implements UnitService {
|
||||
|
||||
private static final Logger log = Logger.getLogger(UnitServiceImpl.class);
|
||||
|
||||
private List<UnitRepository> unitRepositories;
|
||||
|
||||
public UnitServiceImpl() {
|
||||
@ -35,6 +36,16 @@ public class UnitServiceImpl implements UnitService {
|
||||
unitRepositories.add(unitRepository);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnitRepository getUnitRepository(Class clazz) {
|
||||
for (UnitRepository unitRepository : unitRepositories) {
|
||||
if (unitRepository.getClass().equals(clazz)) {
|
||||
return unitRepository;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,33 +1,33 @@
|
||||
package org.sadtech.autoresponder.submodule.insertwords;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class InsertWords {
|
||||
|
||||
@Setter
|
||||
private String inText;
|
||||
@Getter
|
||||
private String outText;
|
||||
|
||||
public void insert(List<String> words) {
|
||||
Pattern pattern = Pattern.compile("\\{(\\d+)}"); // Задаем шаблон
|
||||
Matcher m = pattern.matcher(inText); // Инициализация Matcher
|
||||
StringBuffer result = new StringBuffer(); // Буфер для конечного значения
|
||||
while (m.find()) { // Проверка на совпадение
|
||||
if (Integer.parseInt(m.group(1)) < words.size()) {
|
||||
m.appendReplacement(result, words.get(Integer.parseInt(m.group(1)))); // Подставляем значение из HashMap
|
||||
} else {
|
||||
m.appendReplacement(result, m.group(0));
|
||||
}
|
||||
}
|
||||
m.appendTail(result); // Добавить остаток строки
|
||||
outText = result.toString();
|
||||
}
|
||||
|
||||
}
|
||||
//package org.sadtech.autoresponder.submodule.insertwords;
|
||||
//
|
||||
//import lombok.Getter;
|
||||
//import lombok.Setter;
|
||||
//
|
||||
//import java.util.List;
|
||||
//import java.util.regex.Matcher;
|
||||
//import java.util.regex.Pattern;
|
||||
//
|
||||
//public class InsertWords {
|
||||
//
|
||||
// @Setter
|
||||
// private String inText;
|
||||
// @Getter
|
||||
// private String outText;
|
||||
//
|
||||
// public void insert(List<String> words) {
|
||||
// Pattern pattern = Pattern.compile("\\{(\\d+)}"); // Задаем шаблон
|
||||
// Matcher m = pattern.matcher(inText); // Инициализация Matcher
|
||||
// StringBuffer result = new StringBuffer(); // Буфер для конечного значения
|
||||
// while (m.find()) { // Проверка на совпадение
|
||||
// if (Integer.parseInt(m.group(1)) < words.size()) {
|
||||
// m.appendReplacement(result, words.get(Integer.parseInt(m.group(1)))); // Подставляем значение из HashMap
|
||||
// } else {
|
||||
// m.appendReplacement(result, m.group(0));
|
||||
// }
|
||||
// }
|
||||
// m.appendTail(result); // Добавить остаток строки
|
||||
// outText = result.toString();
|
||||
// }
|
||||
//
|
||||
//}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package org.sadtech.autoresponder;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.sadtech.autoresponder.entity.Person;
|
||||
import org.sadtech.autoresponder.entity.Unit;
|
||||
@ -37,7 +38,6 @@ public class AutoresponderTest {
|
||||
words2.add("тест");
|
||||
words2.add("привет");
|
||||
|
||||
unit.setLevel(true);
|
||||
unit.setPriority(50);
|
||||
unit.setKeyWords(words);
|
||||
unit.setAnswer("Здравствуйте, вы написали в нашу компанию!");
|
||||
@ -73,6 +73,7 @@ public class AutoresponderTest {
|
||||
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void NoAnswer() {
|
||||
person.setUnit(null);
|
||||
autoresponder.answer(person.getId(), "Привет это срабатывания");
|
||||
@ -80,11 +81,13 @@ public class AutoresponderTest {
|
||||
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void answerByPriority() {
|
||||
Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания"), "Ответ с {0} параметрами!");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void answerNoPerson() {
|
||||
TextUnit textUnit = (TextUnit) autoresponder.answer(100, "Привет это тест срабатывания");
|
||||
Assert.assertEquals(textUnit.getAnswer(), "Здравствуйте, вы написали в нашу компанию!");
|
||||
@ -109,33 +112,27 @@ public class AutoresponderTest {
|
||||
}
|
||||
}
|
||||
|
||||
private class TextUnitRepositoryList implements UnitRepository {
|
||||
private class TextUnitRepositoryList implements UnitRepository<TextUnit> {
|
||||
|
||||
List<TextUnit> textUnits = new ArrayList<>();
|
||||
|
||||
List<Unit> textUnits = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void addUnit(Unit unit) {
|
||||
public void addUnit(TextUnit unit) {
|
||||
textUnits.add(unit);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addUnits(Collection<Unit> units) {
|
||||
public void addUnits(List<TextUnit> units) {
|
||||
textUnits.addAll(units);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeUnit(Unit idUnit) {
|
||||
textUnits.remove(idUnit);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Unit> menuUnits() {
|
||||
List<Unit> units = new ArrayList<>();
|
||||
for (Unit textUnit : textUnits) {
|
||||
if (textUnit.getLevel()) {
|
||||
public List<TextUnit> menuUnits() {
|
||||
List<TextUnit> units = new ArrayList<>();
|
||||
for (TextUnit textUnit : textUnits) {
|
||||
units.add(textUnit);
|
||||
}
|
||||
}
|
||||
return units;
|
||||
}
|
||||
}
|
||||
|
@ -1,45 +1,45 @@
|
||||
package org.sadtech.autoresponder.submodule.insertwords;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.sadtech.autoresponder.submodule.insertwords.InsertWords;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class InsertWordsTest {
|
||||
|
||||
private ArrayList<String> arrayList = new ArrayList<>();
|
||||
private InsertWords insertWords = new InsertWords();
|
||||
|
||||
@After
|
||||
public void setUp() {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void insert() {
|
||||
insertWords.setInText("Проверка {0} теста");
|
||||
arrayList.add("первого");
|
||||
insertWords.insert(arrayList);
|
||||
Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void insert2() {
|
||||
insertWords.setInText("Проверка {0} теста и {1} {теста}");
|
||||
arrayList.add("первого");
|
||||
arrayList.add("второго");
|
||||
insertWords.insert(arrayList);
|
||||
Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста и второго {теста}");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void insert3() {
|
||||
insertWords.setInText("Проверка {1} теста и {0} {теста}");
|
||||
arrayList.add("первого");
|
||||
arrayList.add("второго");
|
||||
insertWords.insert(arrayList);
|
||||
Assert.assertEquals(insertWords.getOutText(),"Проверка второго теста и первого {теста}");
|
||||
}
|
||||
}
|
||||
//package org.sadtech.autoresponder.submodule.insertwords;
|
||||
//
|
||||
//import org.junit.After;
|
||||
//import org.junit.Assert;
|
||||
//import org.junit.Test;
|
||||
//import org.sadtech.autoresponder.submodule.insertwords.InsertWords;
|
||||
//
|
||||
//import java.util.ArrayList;
|
||||
//
|
||||
//public class InsertWordsTest {
|
||||
//
|
||||
// private ArrayList<String> arrayList = new ArrayList<>();
|
||||
// private InsertWords insertWords = new InsertWords();
|
||||
//
|
||||
// @After
|
||||
// public void setUp() {
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void insert() {
|
||||
// insertWords.setInText("Проверка {0} теста");
|
||||
// arrayList.add("первого");
|
||||
// insertWords.insert(arrayList);
|
||||
// Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста");
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void insert2() {
|
||||
// insertWords.setInText("Проверка {0} теста и {1} {теста}");
|
||||
// arrayList.add("первого");
|
||||
// arrayList.add("второго");
|
||||
// insertWords.insert(arrayList);
|
||||
// Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста и второго {теста}");
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void insert3() {
|
||||
// insertWords.setInText("Проверка {1} теста и {0} {теста}");
|
||||
// arrayList.add("первого");
|
||||
// arrayList.add("второго");
|
||||
// insertWords.insert(arrayList);
|
||||
// Assert.assertEquals(insertWords.getOutText(),"Проверка второго теста и первого {теста}");
|
||||
// }
|
||||
//}
|
Loading…
Reference in New Issue
Block a user