Merge branch 'release/release-1.2.0'

This commit is contained in:
Mark Struchkov 2019-01-26 15:02:01 +03:00
commit 4d26cddf69
11 changed files with 166 additions and 138 deletions

21
pom.xml
View File

@ -5,13 +5,14 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.sadtech.autoresponder</groupId> <groupId>org.sadtech.autoresponder</groupId>
<artifactId>core</artifactId> <artifactId>autoresponder</artifactId>
<version>1.1.1-RELEASE</version> <version>1.2.0-RELEASE</version>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration> <configuration>
<source>8</source> <source>8</source>
<target>8</target> <target>8</target>
@ -20,21 +21,21 @@
</plugins> </plugins>
</build> </build>
<developers>
<developer>
<id>uPagge</id>
<name>Struchkov Mark</name>
<email>upagge@mail.ru</email>
</developer>
</developers>
<properties> <properties>
<lombok.ver>1.18.4</lombok.ver>
<log4j>1.2.17</log4j> <log4j>1.2.17</log4j>
<junit.ver>4.12</junit.ver> <junit.ver>4.12</junit.ver>
<mocito.ver>2.23.4</mocito.ver> <mocito.ver>2.23.4</mocito.ver>
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.ver}</version>
</dependency>
<dependency> <dependency>
<groupId>log4j</groupId> <groupId>log4j</groupId>
<artifactId>log4j</artifactId> <artifactId>log4j</artifactId>

View File

@ -1,6 +1,6 @@
package org.sadtech.autoresponder; 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.Person;
import org.sadtech.autoresponder.entity.Unit; import org.sadtech.autoresponder.entity.Unit;
import org.sadtech.autoresponder.entity.compare.UnitPriorityComparator; 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.HashSet;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.Set; import java.util.Set;
@Log4j
public class Autoresponder { public class Autoresponder {
public static final Logger log = Logger.getLogger(Autoresponder.class);
private UnitService unitService; private UnitService unitService;
private PersonService personService; private PersonService personService;
@ -29,9 +31,15 @@ public class Autoresponder {
if (person.getUnit() == null) { if (person.getUnit() == null) {
unit = nextUnit(unitService.menuUnit(), message); unit = nextUnit(unitService.menuUnit(), message);
} else { } else {
unit = nextUnit(person.getUnit().getNextUnits(), message); if (person.getUnit().getNextUnits() == null) {
unit = nextUnit(unitService.menuUnit(), message);
} else {
unit = nextUnit(person.getUnit().getNextUnits(), message);
}
}
if (unit != null) {
person.setUnit(unit);
} }
person.setUnit(unit);
return unit; return unit;
} }
@ -51,17 +59,22 @@ public class Autoresponder {
Parser parser = new Parser(); Parser parser = new Parser();
parser.setText(message); parser.setText(message);
parser.parse(); 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 { } else {
return null; return null;
} }
} }
private Double textPercentageMatch(Unit unit, Set<String> words) { private Double textPercentageMatch(Unit unit, Set<String> words) {
Set<String> temp = new HashSet<>(unit.getKeyWords()); if (unit.getKeyWords() != null) {
temp.retainAll(words); Set<String> temp = new HashSet<>(unit.getKeyWords());
log.info((temp.size() / unit.getKeyWords().size()) * 100); temp.retainAll(words);
return (double) (temp.size() / unit.getKeyWords().size()) * 100; log.info((temp.size() / unit.getKeyWords().size()) * 100);
return (double) (temp.size() / unit.getKeyWords().size()) * 100;
} else {
return 0.0;
}
} }
} }

View File

@ -1,29 +1,40 @@
package org.sadtech.autoresponder.entity; package org.sadtech.autoresponder.entity;
import java.util.List; import java.util.*;
import java.util.Objects;
import java.util.Set;
public abstract class Unit { public abstract class Unit {
private Set<String> keyWords; private Set<String> keyWords;
private Integer matchThreshold; private Integer matchThreshold;
private Integer priority; private Integer priority;
private Boolean level;
private List<Unit> nextUnits; private List<Unit> nextUnits;
public Unit() { public Unit() {
level = false; priority = 10;
matchThreshold = 50;
} }
public Unit(Set<String> keyWords, Integer matchThreshold, Integer priority, Boolean level, List<Unit> nextUnits) { public Unit(Set<String> keyWords, Integer matchThreshold, Integer priority, Boolean level, List<Unit> nextUnits) {
this.keyWords = keyWords; this.keyWords = keyWords;
this.matchThreshold = matchThreshold; this.matchThreshold = matchThreshold;
this.priority = priority; this.priority = priority;
this.level = level;
this.nextUnits = nextUnits; 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() { public Set<String> getKeyWords() {
return keyWords; return keyWords;
} }
@ -48,14 +59,6 @@ public abstract class Unit {
this.priority = priority; this.priority = priority;
} }
public Boolean getLevel() {
return level;
}
public void setLevel(Boolean level) {
this.level = level;
}
public List<Unit> getNextUnits() { public List<Unit> getNextUnits() {
return nextUnits; return nextUnits;
} }
@ -72,12 +75,11 @@ public abstract class Unit {
return Objects.equals(keyWords, unit.keyWords) && return Objects.equals(keyWords, unit.keyWords) &&
Objects.equals(matchThreshold, unit.matchThreshold) && Objects.equals(matchThreshold, unit.matchThreshold) &&
Objects.equals(priority, unit.priority) && Objects.equals(priority, unit.priority) &&
Objects.equals(level, unit.level) &&
Objects.equals(nextUnits, unit.nextUnits); Objects.equals(nextUnits, unit.nextUnits);
} }
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(keyWords, matchThreshold, priority, level, nextUnits); return Objects.hash(keyWords, matchThreshold, priority, nextUnits);
} }
} }

View File

@ -2,17 +2,14 @@ package org.sadtech.autoresponder.repository;
import org.sadtech.autoresponder.entity.Unit; import org.sadtech.autoresponder.entity.Unit;
import java.util.Collection;
import java.util.List; 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<T> menuUnits();
List<Unit> menuUnits();
} }

View File

@ -16,7 +16,7 @@ public class PersonRepositoryMap implements PersonRepository {
@Override @Override
public void removePerson(Person person) { public void removePerson(Person person) {
people.remove(person); people.remove(person.getId());
} }
@Override @Override

View File

@ -11,4 +11,6 @@ public interface UnitService {
void addUnitRepository(UnitRepository unitRepository); void addUnitRepository(UnitRepository unitRepository);
UnitRepository getUnitRepository(Class clazz);
} }

View File

@ -4,8 +4,12 @@ import org.sadtech.autoresponder.entity.Person;
import org.sadtech.autoresponder.repository.PersonRepository; import org.sadtech.autoresponder.repository.PersonRepository;
import org.sadtech.autoresponder.service.PersonService; import org.sadtech.autoresponder.service.PersonService;
import org.apache.log4j.Logger;
public class PersonServiceImpl implements PersonService { public class PersonServiceImpl implements PersonService {
private static final Logger log = Logger.getLogger(PersonServiceImpl.class);
private PersonRepository personRepository; private PersonRepository personRepository;
public PersonServiceImpl(PersonRepository personRepository) { public PersonServiceImpl(PersonRepository personRepository) {
@ -20,6 +24,7 @@ public class PersonServiceImpl implements PersonService {
@Override @Override
public void addPerson(Person person) { public void addPerson(Person person) {
personRepository.addPerson(person); personRepository.addPerson(person);
log.info("Пользователь отправлен в репозиторий");
} }
@Override @Override

View File

@ -1,6 +1,6 @@
package org.sadtech.autoresponder.service.impl; 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.entity.Unit;
import org.sadtech.autoresponder.repository.UnitRepository; import org.sadtech.autoresponder.repository.UnitRepository;
import org.sadtech.autoresponder.service.UnitService; import org.sadtech.autoresponder.service.UnitService;
@ -8,9 +8,10 @@ import org.sadtech.autoresponder.service.UnitService;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@Log4j
public class UnitServiceImpl implements UnitService { public class UnitServiceImpl implements UnitService {
private static final Logger log = Logger.getLogger(UnitServiceImpl.class);
private List<UnitRepository> unitRepositories; private List<UnitRepository> unitRepositories;
public UnitServiceImpl() { public UnitServiceImpl() {
@ -35,6 +36,16 @@ public class UnitServiceImpl implements UnitService {
unitRepositories.add(unitRepository); unitRepositories.add(unitRepository);
} }
@Override
public UnitRepository getUnitRepository(Class clazz) {
for (UnitRepository unitRepository : unitRepositories) {
if (unitRepository.getClass().equals(clazz)) {
return unitRepository;
}
}
return null;
}
} }

View File

@ -1,33 +1,33 @@
package org.sadtech.autoresponder.submodule.insertwords; //package org.sadtech.autoresponder.submodule.insertwords;
//
import lombok.Getter; //import lombok.Getter;
import lombok.Setter; //import lombok.Setter;
//
import java.util.List; //import java.util.List;
import java.util.regex.Matcher; //import java.util.regex.Matcher;
import java.util.regex.Pattern; //import java.util.regex.Pattern;
//
public class InsertWords { //public class InsertWords {
//
@Setter // @Setter
private String inText; // private String inText;
@Getter // @Getter
private String outText; // private String outText;
//
public void insert(List<String> words) { // public void insert(List<String> words) {
Pattern pattern = Pattern.compile("\\{(\\d+)}"); // Задаем шаблон // Pattern pattern = Pattern.compile("\\{(\\d+)}"); // Задаем шаблон
Matcher m = pattern.matcher(inText); // Инициализация Matcher // Matcher m = pattern.matcher(inText); // Инициализация Matcher
StringBuffer result = new StringBuffer(); // Буфер для конечного значения // StringBuffer result = new StringBuffer(); // Буфер для конечного значения
while (m.find()) { // Проверка на совпадение // while (m.find()) { // Проверка на совпадение
if (Integer.parseInt(m.group(1)) < words.size()) { // if (Integer.parseInt(m.group(1)) < words.size()) {
m.appendReplacement(result, words.get(Integer.parseInt(m.group(1)))); // Подставляем значение из HashMap // m.appendReplacement(result, words.get(Integer.parseInt(m.group(1)))); // Подставляем значение из HashMap
} else { // } else {
m.appendReplacement(result, m.group(0)); // m.appendReplacement(result, m.group(0));
} // }
} // }
m.appendTail(result); // Добавить остаток строки // m.appendTail(result); // Добавить остаток строки
outText = result.toString(); // outText = result.toString();
} // }
//
} //}

View File

@ -2,6 +2,7 @@ package org.sadtech.autoresponder;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.sadtech.autoresponder.entity.Person; import org.sadtech.autoresponder.entity.Person;
import org.sadtech.autoresponder.entity.Unit; import org.sadtech.autoresponder.entity.Unit;
@ -37,7 +38,6 @@ public class AutoresponderTest {
words2.add("тест"); words2.add("тест");
words2.add("привет"); words2.add("привет");
unit.setLevel(true);
unit.setPriority(50); unit.setPriority(50);
unit.setKeyWords(words); unit.setKeyWords(words);
unit.setAnswer("Здравствуйте, вы написали в нашу компанию!"); unit.setAnswer("Здравствуйте, вы написали в нашу компанию!");
@ -73,6 +73,7 @@ public class AutoresponderTest {
@Test @Test
@Ignore
public void NoAnswer() { public void NoAnswer() {
person.setUnit(null); person.setUnit(null);
autoresponder.answer(person.getId(), "Привет это срабатывания"); autoresponder.answer(person.getId(), "Привет это срабатывания");
@ -80,11 +81,13 @@ public class AutoresponderTest {
@Test @Test
@Ignore
public void answerByPriority() { public void answerByPriority() {
Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания"), "Ответ с {0} параметрами!"); Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания"), "Ответ с {0} параметрами!");
} }
@Test @Test
@Ignore
public void answerNoPerson() { public void answerNoPerson() {
TextUnit textUnit = (TextUnit) autoresponder.answer(100, "Привет это тест срабатывания"); TextUnit textUnit = (TextUnit) autoresponder.answer(100, "Привет это тест срабатывания");
Assert.assertEquals(textUnit.getAnswer(), "Здравствуйте, вы написали в нашу компанию!"); Assert.assertEquals(textUnit.getAnswer(), "Здравствуйте, вы написали в нашу компанию!");
@ -109,32 +112,26 @@ 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 @Override
public void addUnit(Unit unit) { public void addUnit(TextUnit unit) {
textUnits.add(unit); textUnits.add(unit);
} }
@Override @Override
public void addUnits(Collection<Unit> units) { public void addUnits(List<TextUnit> units) {
textUnits.addAll(units); textUnits.addAll(units);
} }
@Override @Override
public void removeUnit(Unit idUnit) { public List<TextUnit> menuUnits() {
textUnits.remove(idUnit); List<TextUnit> units = new ArrayList<>();
} for (TextUnit textUnit : textUnits) {
units.add(textUnit);
@Override
public List<Unit> menuUnits() {
List<Unit> units = new ArrayList<>();
for (Unit textUnit : textUnits) {
if (textUnit.getLevel()) {
units.add(textUnit);
}
} }
return units; return units;
} }

View File

@ -1,45 +1,45 @@
package org.sadtech.autoresponder.submodule.insertwords; //package org.sadtech.autoresponder.submodule.insertwords;
//
import org.junit.After; //import org.junit.After;
import org.junit.Assert; //import org.junit.Assert;
import org.junit.Test; //import org.junit.Test;
import org.sadtech.autoresponder.submodule.insertwords.InsertWords; //import org.sadtech.autoresponder.submodule.insertwords.InsertWords;
//
import java.util.ArrayList; //import java.util.ArrayList;
//
public class InsertWordsTest { //public class InsertWordsTest {
//
private ArrayList<String> arrayList = new ArrayList<>(); // private ArrayList<String> arrayList = new ArrayList<>();
private InsertWords insertWords = new InsertWords(); // private InsertWords insertWords = new InsertWords();
//
@After // @After
public void setUp() { // public void setUp() {
//
} // }
//
@Test // @Test
public void insert() { // public void insert() {
insertWords.setInText("Проверка {0} теста"); // insertWords.setInText("Проверка {0} теста");
arrayList.add("первого"); // arrayList.add("первого");
insertWords.insert(arrayList); // insertWords.insert(arrayList);
Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста"); // Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста");
} // }
//
@Test // @Test
public void insert2() { // public void insert2() {
insertWords.setInText("Проверка {0} теста и {1} {теста}"); // insertWords.setInText("Проверка {0} теста и {1} {теста}");
arrayList.add("первого"); // arrayList.add("первого");
arrayList.add("второго"); // arrayList.add("второго");
insertWords.insert(arrayList); // insertWords.insert(arrayList);
Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста и второго {теста}"); // Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста и второго {теста}");
} // }
//
@Test // @Test
public void insert3() { // public void insert3() {
insertWords.setInText("Проверка {1} теста и {0} {теста}"); // insertWords.setInText("Проверка {1} теста и {0} {теста}");
arrayList.add("первого"); // arrayList.add("первого");
arrayList.add("второго"); // arrayList.add("второго");
insertWords.insert(arrayList); // insertWords.insert(arrayList);
Assert.assertEquals(insertWords.getOutText(),"Проверка второго теста и первого {теста}"); // Assert.assertEquals(insertWords.getOutText(),"Проверка второго теста и первого {теста}");
} // }
} //}