Commit 55424a5d authored by shiyu's avatar shiyu

随机返回一条数据

parent c19603d7
......@@ -10,6 +10,7 @@ import com.wwdz.ch.core.consts.ItemStateEnum;
import com.wwdz.ch.core.storage.QiniuStorage;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.StringUtil;
import com.wwdz.ch.db.bean.ItemOfEs;
import com.wwdz.ch.db.dao.CroppingRecordDao;
import com.wwdz.ch.db.dao.ItemDao;
import com.wwdz.ch.db.domain.Category;
......@@ -19,6 +20,7 @@ import com.wwdz.ch.db.domain.OperateLog;
import com.wwdz.ch.db.dto.request.CoinRequestDto;
import com.wwdz.ch.db.dao.CategoryDao;
import com.wwdz.ch.db.dto.request.CroppingRecordRequestDto;
import com.wwdz.ch.db.es.ItemEsDao;
import com.xxdxxs.utils.DateUtils;
import com.xxdxxs.utils.EntityMapper;
import com.xxdxxs.utils.JsonUtils;
......@@ -53,6 +55,9 @@ public class ItemServiceImpl implements ItemService {
@Autowired
CroppingRecordDao croppingRecordDao;
@Autowired
ItemEsDao itemEsDao;
@Override
public List<CoinVo> findList(CoinRequestDto coinRequestDto) {
try {
......@@ -72,12 +77,16 @@ public class ItemServiceImpl implements ItemService {
@Override
public Result findDetails(CoinRequestDto coinRequestDto) {
try {
Item item;
Item item = new Item();
Long itemId = coinRequestDto.getId();
if (!ObjectUtils.isEmpty(itemId)) {
item = itemDao.findDetails(coinRequestDto.getId());
} else {
item = itemDao.findOne(coinRequestDto);
ItemOfEs itemOfEs = itemEsDao.findRandomOne();
if (itemOfEs != null) {
long id = itemOfEs.getId();
item = itemDao.findDetails(id);
}
}
CoinVo coinVo = convertEntity(item);
//用于展示商品归属的类目(页面级联下拉控件数据展示)
......
......@@ -56,7 +56,7 @@ public class ElasticsearchUtilTest {
@Test
public void find() {
EsSearchRequestDto esSearchRequestDto = new EsSearchRequestDto();
// esSearchRequestDto.setContent("清代");
esSearchRequestDto.setContent("通天修为紫金大帝");
// esSearchRequestDto.setIncludes(Arrays.asList("id", "source", "name","images","updateTime", "createTime"));
esSearchRequestDto.setPage(1);
esSearchRequestDto.setSize(40);
......@@ -66,6 +66,14 @@ public class ElasticsearchUtilTest {
}
@Test
public void findRandomOne() {
ItemOfEs itemOfEs = itemEsDao.findRandomOne();
logger.info("itemOfEs = {}", itemOfEs);
}
@Test
public void findByRange() {
EsSearchRequestDto esSearchRequestDto = new EsSearchRequestDto();
......
......@@ -221,6 +221,55 @@ public class ItemEsDao {
public ItemOfEs findRandomOne() {
try {
SearchRequest.Builder builder = new SearchRequest.Builder();
builder.index(INDEX);
List<FieldValue> sourceQueryList = new ArrayList<>();
SOURCE_LIST.forEach(i -> {
sourceQueryList.add(FieldValue.of(i));
});
//来源是中国的商品
Query sourceQuery = QueryBuilders.terms(s->s.field("source").terms(t->t.value(sourceQueryList)));
//查询未处理的商品
Query stateQuery = TermQuery.of(t->t.field("state").value(0))._toQuery();
//未删除的商品
Query isDeleteQuery = TermQuery.of(t->t.field("isDeleted").value(false))._toQuery();
//种类是钱币的商品,kind=1
Query kindQuery = TermQuery.of(t->t.field("kind").value(1))._toQuery();
//只查询权限为公开的商品
Query viewPermissionQuery = TermQuery.of(t->t.field("viewPermission").value(0))._toQuery();
BoolQuery.Builder build = QueryBuilders.bool()
.filter(stateQuery)
.filter(sourceQuery)
.filter(isDeleteQuery)
.filter(kindQuery)
.filter(viewPermissionQuery);
Random random = new Random();
FunctionScoreQuery functionScoreQuery = FunctionScoreQuery.of(a->a.query(build.build()._toQuery()).boostMode(FunctionBoostMode.Replace)
.functions(b->b.randomScore(s->s.field("id").seed(String.valueOf(random.nextDouble())))));
builder.query(functionScoreQuery._toQuery());
builder.size(1);
SearchRequest searchRequest = builder.build();
logger.info("es查询语句 : {}", searchRequest.toString());
SearchResponse<ItemOfEs> searchResponse = elasticsearchClient.search(searchRequest, ItemOfEs.class);
long total = searchResponse.hits().total().value();
logger.info("总数据量 : {}, 耗时 : {}", total, searchResponse.took());
List<Hit<ItemOfEs>> hitList = searchResponse.hits().hits();
if (!CollectionUtils.isEmpty(hitList)) {
ItemOfEs itemOfEs = hitList.get(0).source();
logger.info("======== 返回的数据id : {}", itemOfEs.getId());
return itemOfEs;
}
} catch (Exception e) {
logger.error("ES 随机返回一个商品 error : {}", e);
}
return null;
}
public void create(List<Item> itemList) {
// 批量添加数据
List<BulkOperation> opts = new ArrayList<>();
......
......@@ -151,11 +151,8 @@ public class ItemDaoImpl implements ItemDao {
ItemExample example = new ItemExample();
ItemExample.Criteria criteria = example.createCriteria();
criteria.andIdEqualTo(id);
List<Item> items = itemMapper.selectByExampleWithBLOBs(example);
if (!CollectionUtils.isEmpty(items)) {
return items.get(0);
}
return new Item();
Item item = itemMapper.selectOneByExampleWithBLOBs(example);
return item;
}
@Override
......
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