Commit a8c9383c authored by muhong's avatar muhong

Merge branch 'master' into applet-dev

# Conflicts:
#	ch-dao/src/main/java/com/wwdz/ch/db/domain/Switch.java
parents 0e5e1235 ea39d55e
...@@ -103,13 +103,13 @@ public class ItemController { ...@@ -103,13 +103,13 @@ public class ItemController {
} }
@GetMapping("/updateUrl") // @GetMapping("/updateUrl")
public void syn() { public void syn() {
synCoinJob.updateImageUrlOfsSize(); synCoinJob.updateImageUrlOfsSize();
} }
@GetMapping("/synToEs") // @GetMapping("/synToEs")
public void synToEs() { public void synToEs() {
synCoinJob.synItemToEs(); synCoinJob.synItemToEs();
} }
......
...@@ -78,7 +78,7 @@ public class SynItemToEsJob { ...@@ -78,7 +78,7 @@ public class SynItemToEsJob {
logger.info("es中最新数据时间为 {}", DateUtils.toString(time)); logger.info("es中最新数据时间为 {}", DateUtils.toString(time));
CoinRequestDto coinRequestDto = new CoinRequestDto(); CoinRequestDto coinRequestDto = new CoinRequestDto();
coinRequestDto.setPage(1); coinRequestDto.setPage(1);
coinRequestDto.setLimit(10); coinRequestDto.setLimit(100);
coinRequestDto.setStartUpdateTime(time); coinRequestDto.setStartUpdateTime(time);
coinRequestDto.setSortColumn("update_time"); coinRequestDto.setSortColumn("update_time");
List<Item> itemList = itemDao.findListByPage(coinRequestDto); List<Item> itemList = itemDao.findListByPage(coinRequestDto);
......
...@@ -4,6 +4,11 @@ import java.io.Serializable; ...@@ -4,6 +4,11 @@ import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import lombok.Data; import lombok.Data;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
/** /**
* @author shiyu * @author shiyu
......
...@@ -92,38 +92,36 @@ public class ItemEsDao { ...@@ -92,38 +92,36 @@ public class ItemEsDao {
SOURCE_LIST.forEach(i -> { SOURCE_LIST.forEach(i -> {
sourceQueryList.add(FieldValue.of(i)); sourceQueryList.add(FieldValue.of(i));
}); });
Query termsQuery = QueryBuilders.terms(s->s.field("source").terms(t->t.value(sourceQueryList))); Query sourceQuery = QueryBuilders.terms(s->s.field("source").terms(t->t.value(sourceQueryList)));
//展示待处理和已发布状态的商品 //展示待处理和已发布状态的商品
List<FieldValue> stateQueryList = new ArrayList<>(); List<FieldValue> stateQueryList = new ArrayList<>();
stateQueryList.add(FieldValue.of(1)); stateQueryList.add(FieldValue.of(1));
stateQueryList.add(FieldValue.of(10)); stateQueryList.add(FieldValue.of(10));
Query stateQuery = QueryBuilders.terms(s->s.field("state").terms(t->t.value(stateQueryList))); Query stateQuery = QueryBuilders.terms(s->s.field("state").terms(t->t.value(stateQueryList)));
Query shouldQuery = QueryBuilders.bool(q->q.should(termsQuery, stateQuery));
BoolQuery.Builder build = QueryBuilders.bool().filter(shouldQuery); BoolQuery.Builder build = QueryBuilders.bool().filter(stateQuery).filter(sourceQuery);
Query wildcardQuery = WildcardQuery.of(w->w.field("images").value("*_*"))._toQuery();
build.filter(wildcardQuery);
Query isDeleteQuery = TermQuery.of(t->t.field("isDeleted").value(false))._toQuery();
build.filter(isDeleteQuery);
if(StringUtils.hasLength(esSearchRequestDto.getContent())) { if(StringUtils.hasLength(esSearchRequestDto.getContent())) {
Query matchQuery = MatchQuery.of(m -> m Query matchQuery = MatchQuery.of(m -> m
.field("name") .field("name")
.query(esSearchRequestDto.getContent()) .query(esSearchRequestDto.getContent())
)._toQuery(); )._toQuery();
build.must(matchQuery); build.must(matchQuery);
builder.from(from);
builder.query(build.build()._toQuery()); builder.query(build.build()._toQuery());
builder.from(from);
} else { } else {
Random random = new Random(); Random random = new Random();
FunctionScoreQuery functionScoreQuery = FunctionScoreQuery.of(a->a.query(build.build()._toQuery()).boostMode(FunctionBoostMode.Replace) 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()))))); .functions(b->b.randomScore(s->s.field("id").seed(String.valueOf(random.nextDouble())))));
builder.query(functionScoreQuery._toQuery()); builder.query(functionScoreQuery._toQuery());
} }
Query wildcardQuery = WildcardQuery.of(w->w.field("images").value("*_*"))._toQuery();
build.filter(wildcardQuery);
Query isDeleteQuery = TermQuery.of(t->t.field("isDeleted").value(false))._toQuery();
build.filter(isDeleteQuery);
builder.size(size); builder.size(size);
SearchRequest searchRequest = builder.build(); SearchRequest searchRequest = builder.build();
logger.info("查询语句 : {}", searchRequest.toString()); logger.info("es查询语句 : {}", searchRequest.toString());
SearchResponse<ItemOfEs> searchResponse = elasticsearchClient.search(searchRequest, ItemOfEs.class); SearchResponse<ItemOfEs> searchResponse = elasticsearchClient.search(searchRequest, ItemOfEs.class);
long total = searchResponse.hits().total().value(); long total = searchResponse.hits().total().value();
logger.info("总数据量 : {}, 耗时 : {}", total, searchResponse.took()); logger.info("总数据量 : {}, 耗时 : {}", total, searchResponse.took());
...@@ -149,8 +147,7 @@ public class ItemEsDao { ...@@ -149,8 +147,7 @@ public class ItemEsDao {
List<BulkOperation> opts = new ArrayList<>(); List<BulkOperation> opts = new ArrayList<>();
for (Item item : itemList) { for (Item item : itemList) {
CreateOperation<Item> optObj = new CreateOperation.Builder<Item>() CreateOperation<Item> optObj = new CreateOperation.Builder<Item>()
.index("quanku_prod_temp") .index(INDEX)
// .index(INDEX)
.id(String.valueOf(item.getId())) .id(String.valueOf(item.getId()))
.document(item) .document(item)
.build(); .build();
......
...@@ -7,4 +7,9 @@ import lombok.Data; ...@@ -7,4 +7,9 @@ import lombok.Data;
public class QueryPriceRequestDto implements Entity { public class QueryPriceRequestDto implements Entity {
private Integer cid; private Integer cid;
/**
* 时间跨度
*/
private Integer timeSpan;
} }
...@@ -10,15 +10,14 @@ import com.wwdz.ch.db.dao.CategoryDao; ...@@ -10,15 +10,14 @@ import com.wwdz.ch.db.dao.CategoryDao;
import com.wwdz.ch.db.domain.BidRecord; import com.wwdz.ch.db.domain.BidRecord;
import com.wwdz.ch.db.domain.Category; import com.wwdz.ch.db.domain.Category;
import com.wwdz.ch.db.dto.request.BidRecordRequestDto; import com.wwdz.ch.db.dto.request.BidRecordRequestDto;
import com.wwdz.ch.wx.entity.request.QueryPriceRequestDto;
import com.wwdz.ch.wx.entity.vo.BidRecordVo; import com.wwdz.ch.wx.entity.vo.BidRecordVo;
import com.wwdz.ch.wx.entity.vo.CategoryVo; import com.wwdz.ch.wx.entity.vo.CategoryVo;
import com.wwdz.ch.wx.service.QueryPriceService; import com.wwdz.ch.wx.service.QueryPriceService;
import com.xxdxxs.utils.DateUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.*; import java.time.*;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -40,21 +39,26 @@ public class QueryPriceServiceImpl implements QueryPriceService { ...@@ -40,21 +39,26 @@ public class QueryPriceServiceImpl implements QueryPriceService {
@Override @Override
public Result queryPrice(Integer id) { public Result queryPrice(QueryPriceRequestDto queryPriceRequestDto) {
try { try {
Integer id = queryPriceRequestDto.getCid();
Category category = categoryDao.findById(id); Category category = categoryDao.findById(id);
//成交记录折线图 //成交记录折线图
BidRecordRequestDto dto = new BidRecordRequestDto(); BidRecordRequestDto dto = new BidRecordRequestDto();
LocalDate now = LocalDate.now(); LocalDate now = LocalDate.now();
int nowMills = (int) now.atStartOfDay(ZoneOffset.UTC).toEpochSecond(); int nowMills = (int) now.atStartOfDay(ZoneOffset.UTC).toEpochSecond();
//时间跨度参数为空,默认为近一年, 时间跨度不等于1的时候,代表历史所有数据,则不设置开始时间
if (queryPriceRequestDto.getTimeSpan() == null || queryPriceRequestDto.getTimeSpan() == 1) {
LocalDate starTime = now.minusYears(1); LocalDate starTime = now.minusYears(1);
int startMills = (int) starTime.atStartOfDay(ZoneOffset.UTC).toEpochSecond(); int startMills = (int) starTime.atStartOfDay(ZoneOffset.UTC).toEpochSecond();
dto.setCid(id);
dto.setStartBidTime(startMills); dto.setStartBidTime(startMills);
}
dto.setCid(id);
dto.setEndBidTime(nowMills); dto.setEndBidTime(nowMills);
List<BidRecord> bidRecordList = bidRecordDao.queryByCid(dto); List<BidRecord> bidRecordList = bidRecordDao.queryByCid(dto);
List<String> xData = new ArrayList<>(); List<String> xData = new ArrayList<>();
List<Object> valueList = new ArrayList<>(); List<Object> valueList = new ArrayList<>();
double totalPrice = 0;
for (BidRecord bidRecord : bidRecordList) { for (BidRecord bidRecord : bidRecordList) {
int bidTime = bidRecord.getBidTime(); int bidTime = bidRecord.getBidTime();
Instant instant = Instant.ofEpochSecond(bidTime); Instant instant = Instant.ofEpochSecond(bidTime);
...@@ -62,14 +66,17 @@ public class QueryPriceServiceImpl implements QueryPriceService { ...@@ -62,14 +66,17 @@ public class QueryPriceServiceImpl implements QueryPriceService {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String time = date.format(formatter); String time = date.format(formatter);
xData.add(time); xData.add(time);
totalPrice += bidRecord.getPrice() / (double)100;
valueList.add(bidRecord.getPrice() / (double)100 / (double)10000); valueList.add(bidRecord.getPrice() / (double)100 / (double)10000);
} }
double averagePrice = totalPrice / bidRecordList.size();
Chart chart = new Chart(); Chart chart = new Chart();
chart.setXData(xData); chart.setXData(xData);
chart.setValues(valueList); chart.setValues(valueList);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("details", CategoryVo.of(category)); map.put("details", CategoryVo.of(category));
map.put("chart", chart); map.put("chart", chart);
map.put("averagePrice", averagePrice);
return Result.success(map); return Result.success(map);
} catch (Exception e) { } catch (Exception e) {
logger.error("查询类目价格详情失败:{}", e); logger.error("查询类目价格详情失败:{}", e);
......
...@@ -2,10 +2,11 @@ package com.wwdz.ch.wx.service; ...@@ -2,10 +2,11 @@ package com.wwdz.ch.wx.service;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.BidRecordRequestDto; import com.wwdz.ch.db.dto.request.BidRecordRequestDto;
import com.wwdz.ch.wx.entity.request.QueryPriceRequestDto;
public interface QueryPriceService { public interface QueryPriceService {
Result queryPrice(Integer id); Result queryPrice(QueryPriceRequestDto dto);
/** /**
* 查询该子类目的成交记录 * 查询该子类目的成交记录
......
...@@ -38,7 +38,7 @@ public class QueryPriceController { ...@@ -38,7 +38,7 @@ public class QueryPriceController {
if (StringUtils.isEmpty(dto.getCid())) { if (StringUtils.isEmpty(dto.getCid())) {
return Result.failed(ResultCode.PARAM_ERROR); return Result.failed(ResultCode.PARAM_ERROR);
} }
return queryPriceService.queryPrice(dto.getCid()); return queryPriceService.queryPrice(dto);
} }
@ApiOperation(value = "查价成交记录") @ApiOperation(value = "查价成交记录")
......
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