update scan
This commit is contained in:
parent
e61db1f379
commit
896d8cf61e
6
pom.xml
6
pom.xml
@ -19,10 +19,10 @@
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>1.6</maven.compiler.source>
|
||||
<maven.compiler.target>1.6</maven.compiler.target>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<spring.version>4.3.8.RELEASE</spring.version>
|
||||
<spring-boot.version>1.5.4.RELEASE</spring-boot.version>
|
||||
<spring-boot.version>1.5.10.RELEASE</spring-boot.version>
|
||||
<slf4j.version>1.7.23</slf4j.version>
|
||||
<log4j.version>2.7</log4j.version>
|
||||
<shiro.version>1.3.2</shiro.version>
|
||||
|
@ -1,8 +1,9 @@
|
||||
package me.chyxion.tigon.service;
|
||||
|
||||
import java.util.List;
|
||||
import javax.validation.constraints.Min;
|
||||
import java.util.function.Function;
|
||||
import me.chyxion.tigon.mybatis.Search;
|
||||
import javax.validation.constraints.Min;
|
||||
import me.chyxion.tigon.model.BaseModel;
|
||||
import me.chyxion.tigon.model.ViewModel;
|
||||
import me.chyxion.tigon.model.ListResult;
|
||||
@ -89,14 +90,14 @@ public interface BaseQueryService<PrimaryKey,
|
||||
* scan model of all
|
||||
* @param scanner scanner
|
||||
*/
|
||||
Model scan(@NotNull Scanner<Model> scanner);
|
||||
Model scan(@NotNull Function<Model, Boolean> scanner);
|
||||
|
||||
/**
|
||||
* scan model by search
|
||||
* @param search search
|
||||
* @param scanner scanner
|
||||
*/
|
||||
Model scan(Search search, @NotNull Scanner<Model> scanner);
|
||||
Model scan(Search search, @NotNull Function<Model, Boolean> scanner);
|
||||
|
||||
/**
|
||||
* scan model by search
|
||||
@ -104,15 +105,11 @@ public interface BaseQueryService<PrimaryKey,
|
||||
* @param search search
|
||||
* @param scanner scanner
|
||||
*/
|
||||
Model scan(@Min(1) int batchSize, Search search, @NotNull Scanner<Model> scanner);
|
||||
Model scan(@Min(1) int batchSize, Search search, @NotNull Function<Model, Boolean> scanner);
|
||||
|
||||
interface Scanner<T> {
|
||||
|
||||
/**
|
||||
* scan model
|
||||
* @param model model
|
||||
* @return false to break
|
||||
*/
|
||||
boolean found(T model);
|
||||
}
|
||||
Model scan(@Min(1) int batchSize,
|
||||
Search search,
|
||||
@NotNull Function<Search, List<Model>> dataQuerier,
|
||||
@NotNull Function<Search, Integer> countQuerier,
|
||||
@NotNull Function<Model, Boolean> scanner);
|
||||
}
|
||||
|
@ -2,8 +2,9 @@ package me.chyxion.tigon.service.support;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.chyxion.tigon.model.BaseModel;
|
||||
import java.util.function.Function;
|
||||
import me.chyxion.tigon.mybatis.Search;
|
||||
import me.chyxion.tigon.model.BaseModel;
|
||||
import me.chyxion.tigon.model.ViewModel;
|
||||
import me.chyxion.tigon.model.ListResult;
|
||||
import me.chyxion.tigon.mybatis.BaseMapper;
|
||||
@ -116,7 +117,7 @@ public class BaseQueryServiceSupport
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public Model scan(Scanner<Model> scanner) {
|
||||
public Model scan(Function<Model, Boolean> scanner) {
|
||||
return scan(null, scanner);
|
||||
}
|
||||
|
||||
@ -124,7 +125,7 @@ public class BaseQueryServiceSupport
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public Model scan(Search search, Scanner<Model> scanner) {
|
||||
public Model scan(Search search, Function<Model, Boolean> scanner) {
|
||||
return scan(scanBatchSize(), search, scanner);
|
||||
}
|
||||
|
||||
@ -132,28 +133,40 @@ public class BaseQueryServiceSupport
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public Model scan(int batchSize, Search search, Scanner<Model> scanner) {
|
||||
log.info("Scan Model By Search [{}].", search);
|
||||
int total = count(search);
|
||||
public Model scan(int batchSize, Search search, Function<Model, Boolean> scanner) {
|
||||
return scan(batchSize, search, this::list, this::count, scanner);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public Model scan(final int batchSize,
|
||||
Search search,
|
||||
final Function<Search, List<Model>> dataQuerier,
|
||||
final Function<Search, Integer> countQuerier,
|
||||
final Function<Model, Boolean> scanner) {
|
||||
log.info("Scan model by search [{}].", search);
|
||||
int total = countQuerier.apply(search);
|
||||
if (total > 0) {
|
||||
if (search == null) {
|
||||
log.debug("Scan Search Is Null, Use Default.");
|
||||
log.debug("Scan search is null, use default.");
|
||||
search = new Search();
|
||||
}
|
||||
for (int start = 0; start < total; start += batchSize) {
|
||||
for (Model model : list(
|
||||
search.offset(start)
|
||||
.limit(Math.min(batchSize, total - start)))) {
|
||||
if (scanner.found(model)) {
|
||||
log.info("Model [{}] Found By Scanner.", model);
|
||||
for (Model model : dataQuerier.apply(
|
||||
search.offset(start)
|
||||
.limit(Math.min(batchSize, total - start)))) {
|
||||
if (scanner.apply(model)) {
|
||||
log.info("Model [{}] found by scanner, stop scan.", model);
|
||||
return model;
|
||||
}
|
||||
}
|
||||
}
|
||||
log.debug("No Matched Model Found By Scanner.");
|
||||
log.info("Scan completed, no matched model found by scanner.");
|
||||
}
|
||||
else {
|
||||
log.info("No Model To Scan By Search [{}].", search);
|
||||
log.info("No model to scan by search [{}].", search);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user