分析页统计:1、大板数量createtime和goodsid查询失效修复、分组错误修复;2、小板面积按面积倒序失效修复;

This commit is contained in:
gaoqr
2024-09-30 15:07:18 +08:00
parent 86130098f8
commit f651fb643f
2 changed files with 37 additions and 26 deletions
@@ -11,7 +11,6 @@ import co.elastic.clients.elasticsearch._types.aggregations.CalendarInterval;
import co.elastic.clients.elasticsearch._types.aggregations.DateHistogramAggregation;
import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.json.JsonData;
import co.elastic.clients.util.NamedValue;
import com.cf.imes.framework.common.enums.OrderStatusEnum;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -86,6 +85,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
private static final String ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME = "createTime";
private static final String ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME = "goods_group";
private static final String ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME = "goods_count";
private static final String ORDER_REMAIN_PLATE_MODEL_DATE_GROUP_NAME = "date_group";
private static final String DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH = "yyyy-M";
private static final String DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH_DAY = "yyyy-M-d";
private static final String ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME = "goodsId";
@@ -427,10 +427,12 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
SearchRequest searchRequest = new SearchRequest.Builder()
.size(0)
.index(OptimizePlanService.ORDER_REMAIN_PLATE_MODEL)
.query(q -> q.range(r -> r.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)
.gte(JsonData.of(reqVO.getCreateTime()[0].format(dateTimeFormatter)))
.lte(JsonData.of(reqVO.getCreateTime()[1].format(dateTimeFormatter))))
)
.query(q ->
q.bool(b -> b
.must(m -> m.range(m1 -> m1.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)
.from(reqVO.getCreateTime()[0].format(dateTimeFormatter))
.to(reqVO.getCreateTime()[1].format(dateTimeFormatter))))
.must(m -> m.match(m2 -> m2.field("organId").query(SecurityFrameworkUtils.getUserOrganId())))))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME,
agg -> agg.terms(terms -> terms.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME).size(10).order(new NamedValue<>(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, SortOrder.Desc)))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, sumAgg -> sumAgg.sum(sum -> sum.field("boardCount")))
@@ -456,16 +458,20 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
SearchRequest dateGroupRequest = new SearchRequest.Builder()
.size(0)
.index(OptimizePlanService.ORDER_REMAIN_PLATE_MODEL)
.query(q -> q.range(r -> r.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)
.gte(JsonData.of(reqVO.getCreateTime()[0].format(dateTimeFormatter)))
.lte(JsonData.of(reqVO.getCreateTime()[1].format(dateTimeFormatter))))
.query(q ->
q.bool(b -> b
.must(m -> m.range(m1 -> m1.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)
.from(reqVO.getCreateTime()[0].format(dateTimeFormatter))
.to(reqVO.getCreateTime()[1].format(dateTimeFormatter))))
.must(m -> m.match(m2 -> m2.field("organId").query(SecurityFrameworkUtils.getUserOrganId())))
.must(m -> m.bool(m3 -> m3.must(t -> t.terms(gi -> gi.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME).terms(tv -> tv.value(goodsIdFieldValueList))))))
)
)
.query(q -> q.bool(b -> b.must(m -> m.terms(t -> t.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME).terms(tv -> tv.value(goodsIdFieldValueList))))))
.query(q -> q.match(m -> m.field("organId").query(SecurityFrameworkUtils.getUserOrganId())))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME,
agg -> agg.terms(terms -> terms.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME).order(new NamedValue<>(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, SortOrder.Desc)))
.aggregations("date_group", dateAgg -> dateAgg.dateHistogram(date -> getDateHistogram(unit, date.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME))))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, sumAgg -> sumAgg.sum(sum -> sum.field("boardCount")))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME, agg ->
agg.terms(terms -> terms.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME))
.aggregations(ORDER_REMAIN_PLATE_MODEL_DATE_GROUP_NAME, dateAgg -> dateAgg.dateHistogram(date -> getDateHistogram(unit, date.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, sumAgg -> sumAgg.sum(sum -> sum.field("boardCount")))
)
)
.build();
response = client.search(dateGroupRequest, Map.class);
@@ -475,17 +481,22 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
goodsDateAgg.sterms().buckets().array().forEach(goodsDateAggBucket -> {
// todo 目前没有发现好的es统计月周的方式,先把年月日查出来转周,后续优化
String dateStr = dateToWeekMonth(goodsDateAggBucket.aggregations().get("date_group").dateHistogram().buckets().array().get(0).keyAsString(), unit);
double goodsCount = goodsDateAggBucket.aggregations().get(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME).sum().value();
OrderGoodsPlateRespVO vo = OrderGoodsPlateRespVO.builder().goodsId(goodsDateAggBucket.key().stringValue()).orderDate(dateStr).orderCount((int) goodsCount).build();
List<OrderGoodsPlateRespVO> orderGoodsPlateRespVOS = goodsDateGroupMap.get(dateStr);
if (ObjectUtil.isNotNull(orderGoodsPlateRespVOS)) {
orderGoodsPlateRespVOS.add(vo);
} else {
ArrayList<OrderGoodsPlateRespVO> goodsPlateRespVOS = new ArrayList<>();
goodsPlateRespVOS.add(vo);
goodsDateGroupMap.put(dateStr, goodsPlateRespVOS);
}
goodsDateAggBucket.aggregations().get(ORDER_REMAIN_PLATE_MODEL_DATE_GROUP_NAME).dateHistogram().buckets().array().forEach(dateHistogramBucket -> {
// 时间轴
String dateStr = dateToWeekMonth(dateHistogramBucket.keyAsString(), unit);
// 时间轴下的boardCount
double goodsCount = dateHistogramBucket.aggregations().get(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME).sum().value();
// goodsid+数量存入mapkey:时间轴
List<OrderGoodsPlateRespVO> orderGoodsPlateRespVOS = goodsDateGroupMap.get(dateStr);
OrderGoodsPlateRespVO vo = OrderGoodsPlateRespVO.builder().goodsId(goodsDateAggBucket.key().stringValue()).orderDate(dateStr).orderCount((int) goodsCount).build();
if (ObjectUtil.isNotNull(orderGoodsPlateRespVOS)) {
orderGoodsPlateRespVOS.add(vo);
} else {
ArrayList<OrderGoodsPlateRespVO> goodsPlateRespVOS = new ArrayList<>();
goodsPlateRespVOS.add(vo);
goodsDateGroupMap.put(dateStr, goodsPlateRespVOS);
}
});
});
}
@@ -60,7 +60,7 @@
where g.deleted = 0
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
group by g.goods_id
order by orderArea
order by orderArea desc
limit 10;
</select>