diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java index 9f9e8d7a5..8128e335f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java @@ -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 orderGoodsPlateRespVOS = goodsDateGroupMap.get(dateStr); - if (ObjectUtil.isNotNull(orderGoodsPlateRespVOS)) { - orderGoodsPlateRespVOS.add(vo); - } else { - ArrayList 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+数量存入map,key:时间轴 + List 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 goodsPlateRespVOS = new ArrayList<>(); + goodsPlateRespVOS.add(vo); + goodsDateGroupMap.put(dateStr, goodsPlateRespVOS); + } + }); }); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/OrderPlateStatisticsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/OrderPlateStatisticsMapper.xml index 2354fd008..7d210d7dc 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/OrderPlateStatisticsMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/OrderPlateStatisticsMapper.xml @@ -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;