‘linchangsheng’ 4 months ago
parent
commit
66973903ca

+ 2 - 1
mall-server-api/src/main/java/com/gree/mall/manager/bean/letter/LeLetterVO.java

@@ -100,7 +100,8 @@ public class LeLetterVO   {
     @ApiModelProperty(value = "所属科室")
     private String dapartment;
 
-
+    @ApiModelProperty(value = "产品大类")
+    private String mainName;
 
     @ApiModelProperty(value = "审批人")
     private String examineName;

+ 3 - 3
mall-server-api/src/main/java/com/gree/mall/manager/bean/workorder/OrderBaseCountBean.java

@@ -27,11 +27,11 @@ public class OrderBaseCountBean {
     private Integer dqd = 0;
 
     @ApiModelProperty("七天订单趋势 新增工单,完工工单,进行中")
-    private Map<String, List<Integer>> qtddqs;
+    private Map<String, List<Long>> qtddqs;
 
     @ApiModelProperty("未来七天上门")
-    private  List<Integer> qtsm;
+    private  List<Long> qtsm;
 
     @ApiModelProperty("七天订单趋势 新增工单,完工工单,进行中")
-    private Map<String, List<Integer>> wglxfb;
+    private Map<String, List<Long>> wglxfb;
 }

+ 172 - 32
mall-server-api/src/main/java/com/gree/mall/manager/logic/workorder/OrderBaseCountLogic.java

@@ -1,20 +1,35 @@
 package com.gree.mall.manager.logic.workorder;
 
 import cn.hutool.core.date.DateUtil;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.google.common.collect.Lists;
 import com.gree.mall.manager.bean.admin.AdminUserCom;
+import com.gree.mall.manager.bean.es.OrderBaseEs;
 import com.gree.mall.manager.bean.workorder.OrderBaseCountBean;
 import com.gree.mall.manager.bean.workorder.OrderCount7DayBean;
 import com.gree.mall.manager.commonmapper.workorder.OrderBaseCMapper;
 import com.gree.mall.manager.enums.OrderStatusEnum;
 import com.gree.mall.manager.enums.workorder.OrderBaseStatusEnum;
+import com.gree.mall.manager.enums.workorder.OrderTypeEnum;
 import com.gree.mall.manager.logic.common.CommonLogic;
 import com.gree.mall.manager.plus.entity.PgOrderBase;
 import com.gree.mall.manager.plus.service.PgOrderBaseService;
 import io.swagger.models.auth.In;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
+import org.elasticsearch.search.aggregations.AggregationBuilders;
+import org.elasticsearch.search.aggregations.Aggregations;
+import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder;
+import org.elasticsearch.search.aggregations.bucket.filter.ParsedFilter;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
+import org.springframework.data.elasticsearch.core.SearchHits;
+import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
+import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
@@ -29,6 +44,7 @@ public class OrderBaseCountLogic {
     private final OrderBaseCMapper orderBaseCMapper;
     private final PgOrderBaseService pgOrderBaseService;
     private final CommonLogic commonLogic;
+    private final ElasticsearchRestTemplate elasticsearchRestTemplate;
 
     /**
      * 首页工单统计
@@ -39,15 +55,19 @@ public class OrderBaseCountLogic {
         OrderBaseCountBean orderBaseCountBean = orderBaseCMapper
                 .countOrderBaseIndex(adminUser.getCompanyWechatId(), adminUser.getAdminWebsitIds(),adminUser.getType());
 
+/*
         List<PgOrderBase> pgOrderBaseList = pgOrderBaseService.lambdaQuery()
                 .select(PgOrderBase::getOrderType, PgOrderBase::getOrderTypeText, PgOrderBase::getCreateTime, PgOrderBase::getId
                         , PgOrderBase::getOrderStatus,PgOrderBase::getAppointmentTime)
                 .between(PgOrderBase::getCreateTime, DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), -30)), new Date())
                 .in(CollectionUtils.isNotEmpty(adminUser.getCompanyWechatIds()),PgOrderBase::getCompanyWechatId,adminUser.getCompanyWechatId())
                 .and(CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds()),
-                        v -> v.in(PgOrderBase::getWebsitId,adminUser.getAdminWebsitIds()).or().in(PgOrderBase::getCreateWebsitId,adminUser.getAdminWebsitIds()))
+                        v -> v.in(PgOrderBase::getWebsitId,adminUser.getAdminWebsitIds()).or()
+                                .in(PgOrderBase::getCreateWebsitId,adminUser.getAdminWebsitIds()))
                 .list();
+*/
 
+/*
         List<PgOrderBase> pgOrderBaseListOver = pgOrderBaseService.lambdaQuery()
                 .select(PgOrderBase::getOrderType, PgOrderBase::getOrderTypeText, PgOrderBase::getCreateTime, PgOrderBase::getId
                         , PgOrderBase::getOrderStatus,PgOrderBase::getAppointmentTime,PgOrderBase::getOverDate,PgOrderBase::getOverTime)
@@ -56,13 +76,14 @@ public class OrderBaseCountLogic {
                 .and(CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds()),
                         v -> v.in(PgOrderBase::getWebsitId,adminUser.getAdminWebsitIds()).or().in(PgOrderBase::getCreateWebsitId,adminUser.getAdminWebsitIds()))
                 .list();
+*/
 
-        Map<String,List<Integer>> qtddqs = new HashMap<>();
+        Map<String,List<Long>> qtddqs = new HashMap<>();
 
-        List<Integer> xzgdList = new ArrayList<>();
-        List<Integer> wgdList = new ArrayList<>();
-        List<Integer> jxzList = new ArrayList<>();
-        List<Integer> qtsmList = new ArrayList<>();
+        List<Long> xzgdList = new ArrayList<>();
+        List<Long> wgdList = new ArrayList<>();
+        List<Long> jxzList = new ArrayList<>();
+        List<Long> qtsmList = new ArrayList<>();
 
         List<String> orderStatus = new ArrayList<>();
 
@@ -82,58 +103,161 @@ public class OrderBaseCountLogic {
 
         for (int i = 6; i >= 0; i--) {
             Integer day = i*-1;
-            int xzgd = pgOrderBaseList.stream().filter(item -> item.getCreateTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
+       /*     Long xzgd = pgOrderBaseList.stream().filter(item -> item.getCreateTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
                     item.getCreateTime().after(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))))
-            ).collect(Collectors.toList()).size();
-            xzgdList.add(xzgd);
-            int wgd = pgOrderBaseListOver.stream().filter(item -> item.getOverTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
-                    item.getOverTime().after(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))))
-                    && orderStatus.contains(item.getOrderStatus())
-
-            ).collect(Collectors.toList()).size();
-            wgdList.add(wgd);
-            int jxz = pgOrderBaseList.stream().filter(item -> item.getCreateTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
+            ).count();
+*/
+            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
+
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds())) {
+                List<QueryBuilder> should = queryBuilder.should();
+                should.add(QueryBuilders.termsQuery("create_websit_id", adminUser.getAdminWebsitIds()));
+                should.add(QueryBuilders.termsQuery("websit_id", adminUser.getAdminWebsitIds()));
+            }
+            //新增工单
+            NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
+                    .withQuery(queryBuilder)
+                    .withPageable(PageRequest.of(1, 1))
+                    .addAggregation(this.getAggs(AggregationBuilders.filter("xzgd", QueryBuilders.boolQuery()
+                            .must(QueryBuilders.rangeQuery("create_time")
+                                    .gte(DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))),"yyyy-MM-dd HH:mm:ss"))
+                                    .lte(DateUtil.format(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day))),"yyyy-MM-dd HH:mm:ss")))
+                    )))
+                    .build();
+            SearchHits response = elasticsearchRestTemplate.search(searchQuery, OrderBaseEs.class);
+
+            xzgdList.add(this.getWorkerOrderCountResult(response.getAggregations(),"xzgd"));
+
+    /*        Long wgd = pgOrderBaseListOver.stream().filter(item -> item.getOverTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
+                            item.getOverTime().after(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))))
+                            && orderStatus.contains(item.getOrderStatus())      ).count();*/
+
+
+            //完工单
+            NativeSearchQuery searchQueryWGD = new NativeSearchQueryBuilder()
+                    .withQuery(queryBuilder)
+                    .withPageable(PageRequest.of(1, 1))
+                    .addAggregation(this.getAggs(AggregationBuilders.filter("wgd", QueryBuilders.boolQuery()
+                            .must(QueryBuilders.termsQuery("order_status",orderStatus))
+                            .must(QueryBuilders.rangeQuery("over_time")
+                                    .gte(DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))),"yyyy-MM-dd HH:mm:ss"))
+                                    .lte(DateUtil.format(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day))),"yyyy-MM-dd HH:mm:ss")))
+                    )))
+                    .build();
+            SearchHits responseWGD = elasticsearchRestTemplate.search(searchQueryWGD, OrderBaseEs.class);
+            wgdList.add(this.getWorkerOrderCountResult(responseWGD.getAggregations(),"wgd"));
+
+
+
+/*            Long jxz = pgOrderBaseList.stream().filter(item -> item.getCreateTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
                     item.getCreateTime().after(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))))
                     && !orderStatus.contains(item.getOrderStatus())
                     && !orderStatusQx.contains(item.getOrderStatus())
-            ).collect(Collectors.toList()).size();
-            jxzList.add(jxz);
+            ).count();*/
 
 
+            //待商户派工
+            NativeSearchQuery searchQueryJXZ= new NativeSearchQueryBuilder()
+                    .withQuery(queryBuilder)
+                    .withPageable(PageRequest.of(1, 1))
+                    .addAggregation(this.getAggs(AggregationBuilders.filter("jxz", QueryBuilders.boolQuery()
+                            .mustNot(QueryBuilders.termsQuery("order_status",orderStatus))
+                            .mustNot(QueryBuilders.termsQuery("order_status",orderStatusQx))
+                            .must(QueryBuilders.rangeQuery("create_time")
+                                    .gte(DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))),"yyyy-MM-dd HH:mm:ss"))
+                                    .lte(DateUtil.format(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day))),"yyyy-MM-dd HH:mm:ss")))
+                    )))
+                    .build();
+            SearchHits responseJXZ = elasticsearchRestTemplate.search(searchQueryJXZ, OrderBaseEs.class);
 
-        }
 
-        for (int i = 0; i < 7; i++) {
-            Integer day = i;
-            int qtsm = pgOrderBaseList.stream().filter(item -> item.getAppointmentTime() != null && item.getAppointmentTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
-                    item.getAppointmentTime().after(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))))
+            jxzList.add(this.getWorkerOrderCountResult(responseJXZ.getAggregations(),"jxz"));
 
-            ).collect(Collectors.toList()).size();
 
-            qtsmList.add(qtsm);
 
         }
+
         qtddqs.put("新增工单",xzgdList);
         qtddqs.put("完工工单",wgdList);
         qtddqs.put("进行中",jxzList);
 
         orderBaseCountBean.setQtddqs(qtddqs);
+
+        for (int i = 0; i < 7; i++) {
+            Integer day = i;
+
+            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
+
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds())) {
+                List<QueryBuilder> should = queryBuilder.should();
+                should.add(QueryBuilders.termsQuery("create_websit_id", adminUser.getAdminWebsitIds()));
+                should.add(QueryBuilders.termsQuery("websit_id", adminUser.getAdminWebsitIds()));
+            }
+
+/*            Long qtsm = pgOrderBaseList.stream().filter(item -> item.getAppointmentTime() != null && item.getAppointmentTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
+                    item.getAppointmentTime().after(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))))
+
+            ).count();*/
+
+            //七天上门
+            NativeSearchQuery searchQueryQTSM= new NativeSearchQueryBuilder()
+                    .withQuery(queryBuilder)
+                    .withPageable(PageRequest.of(1, 1))
+                    .addAggregation(this.getAggs(AggregationBuilders.filter("qtsm", QueryBuilders.boolQuery()
+                            .must(QueryBuilders.rangeQuery("appointment_time")
+                                    .gte(DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))),"yyyy-MM-dd HH:mm:ss"))
+                                    .lte(DateUtil.format(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day))),"yyyy-MM-dd HH:mm:ss"))))))
+                    .build();
+            SearchHits responseQTSM = elasticsearchRestTemplate.search(searchQueryQTSM, OrderBaseEs.class);
+
+
+            qtsmList.add(this.getWorkerOrderCountResult(responseQTSM.getAggregations(),"qtsm"));
+
+        }
+
+
+
         orderBaseCountBean.setQtsm(qtsmList);
 
-        List<String> collect = pgOrderBaseList.stream().map(PgOrderBase::getOrderTypeText).distinct().collect(Collectors.toList());
+        List<String> collect = new ArrayList<>();
 
-        Map<String,List<Integer>> wglxfb = new HashMap<>();
+        collect.add(OrderTypeEnum.INSTALL.getRemark());
+        collect.add(OrderTypeEnum.REPAIR.getRemark());
+
+        Map<String,List<Long>> wglxfb = new HashMap<>();
         for (String orderTypeText : collect) {
 
-            List<Integer> list = new ArrayList<>();
+            List<Long> list = new ArrayList<>();
             for (int i = 0; i < 30; i++) {
                 Integer day = i*-1;
 
-                int num = pgOrderBaseList.stream().filter(item -> item.getCreateTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
+       /*         Long num = pgOrderBaseList.stream().filter(item -> item.getCreateTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
                         item.getCreateTime().after(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))))
                         && item.getOrderTypeText().equals(orderTypeText)
-                ).collect(Collectors.toList()).size();
-                list.add(num);
+                ).count();*/
+
+                BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
+
+                if (CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds())) {
+                    List<QueryBuilder> should = queryBuilder.should();
+                    should.add(QueryBuilders.termsQuery("create_websit_id", adminUser.getAdminWebsitIds()));
+                    should.add(QueryBuilders.termsQuery("websit_id", adminUser.getAdminWebsitIds()));
+                }
+
+                //工单类型
+                NativeSearchQuery searchQueryGDLX= new NativeSearchQueryBuilder()
+                        .withQuery(queryBuilder)
+                        .withPageable(PageRequest.of(1, 1))
+                        .addAggregation(this.getAggs(AggregationBuilders.filter("gdlx", QueryBuilders.boolQuery()
+                                .must(QueryBuilders.termsQuery("order_type_text",orderTypeText))
+                                .must(QueryBuilders.rangeQuery("create_time")
+                                        .gte(DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))),"yyyy-MM-dd HH:mm:ss"))
+                                        .lte(DateUtil.format(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day))),"yyyy-MM-dd HH:mm:ss"))))))
+                        .build();
+                SearchHits responseGDLX = elasticsearchRestTemplate.search(searchQueryGDLX, OrderBaseEs.class);
+
+
+                list.add(this.getWorkerOrderCountResult(responseGDLX.getAggregations(),"gdlx"));
             }
 
             Collections.reverse(list);
@@ -148,6 +272,22 @@ public class OrderBaseCountLogic {
         return orderBaseCountBean;
     }
 
+
+    public AbstractAggregationBuilder<?> getAggs(FilterAggregationBuilder filter) {
+        return filter.subAggregation(AggregationBuilders.sum("total_mac_sum").field("total_num"))
+                .subAggregation(AggregationBuilders.terms("order_type_group").field("order_type")
+                        .subAggregation(AggregationBuilders.sum("mac_sum").field("total_num")));
+    }
+
+    private long getWorkerOrderCountResult(Aggregations aggregations, String name) {
+        StringBuffer sb = new StringBuffer();
+        ParsedFilter parsedFilter = aggregations.get(name);
+        //总服务单数
+        long totalOrderNums = parsedFilter.getDocCount();
+
+        return totalOrderNums;
+    }
+
     /**
      * 统计近7天的订单趋势和需上门数量
      * @return