Forráskód Böngészése

任务提交 订单查询EXCEL下载

秦国才 4 éve
szülő
commit
aa4024701d

+ 5 - 0
modules/admin/pom.xml

@@ -47,6 +47,11 @@
             <artifactId>hutool-all</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+        </dependency>
+
        <dependency>
             <groupId>javax.xml.bind</groupId>
             <artifactId>jaxb-api</artifactId>

+ 34 - 0
modules/admin/src/main/java/com/fire/admin/rest/OrderRest.java

@@ -1,9 +1,13 @@
 package com.fire.admin.rest;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import cn.hutool.poi.excel.ExcelWriter;
 import com.fire.admin.request.DispatchSearchPram;
 import com.fire.admin.request.OrderSearchPram;
 import com.fire.admin.service.OrderManagementService;
 import com.fire.dto.response.BaseRestResponse;
+import com.fire.es.OrderEsDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,6 +16,14 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 
@@ -49,8 +61,30 @@ public class OrderRest {
         return new BaseRestResponse<>(orderManagementService.dispatchSearch(dispatchSearchPram));
     }
 
+    @PostMapping("/getOrderExcel")
+    @ApiOperation(value = "导出订单数据")
+    public void getOrderExcel(@RequestBody OrderSearchPram orderSearchPram, HttpServletResponse response) {
+        String fileName = "Order-" + new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+        ServletOutputStream out = null;
+        try {
+            ArrayList<OrderEsDto> orderList = orderManagementService.getOrderList(orderSearchPram);
+            out = response.getOutputStream();
+            response.setContentType("multipart/form-data");
+            response.setCharacterEncoding("utf-8");
+            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx");
+            ExcelWriter excelWriter = ExcelUtil.getWriter(true);
+            excelWriter.write(orderList);
+            excelWriter.flush(response.getOutputStream());
+            excelWriter.close();
+            out.flush();
+    } catch (Exception e) {
+        e.printStackTrace();
+    }
+
 
 
+    }
+
 
 
 }

+ 122 - 0
modules/admin/src/main/java/com/fire/admin/service/OrderManagementService.java

@@ -1,5 +1,7 @@
 package com.fire.admin.service;
 
+import cn.hutool.poi.excel.BigExcelWriter;
+import cn.hutool.poi.excel.ExcelUtil;
 import com.fire.admin.request.DispatchSearchPram;
 import com.fire.admin.request.OrderSearchPram;
 import com.fire.es.DispatchDto;
@@ -13,6 +15,9 @@ import org.elasticsearch.search.aggregations.AggregationBuilders;
 import org.elasticsearch.search.aggregations.Aggregations;
 import org.elasticsearch.search.aggregations.metrics.ParsedSum;
 import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder;
+import org.elasticsearch.search.sort.FieldSortBuilder;
+import org.elasticsearch.search.sort.SortBuilders;
+import org.elasticsearch.search.sort.SortOrder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
@@ -411,6 +416,123 @@ public class OrderManagementService {
         }
         return pageMap;
     }
+
+    public ArrayList<OrderEsDto> getOrderList(OrderSearchPram orderSearchPram) {
+        HashMap<String, Object> pageMap = new HashMap<>();
+        ArrayList<OrderEsDto> resultsList = new ArrayList<>();
+        //查询时间范围
+        Date applyDateStart = orderSearchPram.getApplyDateStart();
+        Date applyDateEnd = orderSearchPram.getApplyDateEnd();
+        //以创建时间倒序排列
+        FieldSortBuilder timeSort = SortBuilders.fieldSort("applyDate").order(SortOrder.DESC);
+
+        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
+        RangeQueryBuilder rangeQueryBuilder = null;
+        //判断回调时间参数是否为空 不为空以回调时间来查询 否则用创建时间来查询
+        if (null != orderSearchPram.getCallbackTimeStart()) {
+            rangeQueryBuilder = QueryBuilders.rangeQuery("callbackTime")
+                    .gte(orderSearchPram.getCallbackTimeStart().getTime())
+                    .lte(orderSearchPram.getCallbackTimeEnd().getTime());
+            boolQuery.must(rangeQueryBuilder);
+            boolQuery.must(QueryBuilders.existsQuery("callbackTime"));
+        }
+        rangeQueryBuilder = QueryBuilders.rangeQuery("applyDate")
+                .gte(applyDateStart.getTime())
+                .lte(applyDateEnd.getTime());
+        boolQuery.must(rangeQueryBuilder);
+
+        //筛选条件
+        //订单号
+        if (Strings.isNotBlank(orderSearchPram.getOrderId())) {
+            boolQuery.must(QueryBuilders.termQuery("orderId", orderSearchPram.getOrderId()));
+        }
+        //客户订单号
+        if (Strings.isNotBlank(orderSearchPram.getExtorderId())) {
+            boolQuery.must(QueryBuilders.termQuery("extorderId", orderSearchPram.getExtorderId()));
+        }
+
+        //商户订单号
+        if (Strings.isNotBlank(orderSearchPram.getGwSeqNo())) {
+            boolQuery.must(QueryBuilders.termQuery("gwSeqNo", orderSearchPram.getGwSeqNo()));
+            boolQuery.must(QueryBuilders.existsQuery("gwSeqNo"));
+        }
+
+        //回调状态
+        if (Strings.isNotBlank(orderSearchPram.getCallbackStatus())) {
+            boolQuery.must(QueryBuilders.termQuery("callbackStatus", orderSearchPram.getCallbackStatus()));
+            boolQuery.must(QueryBuilders.existsQuery("callbackStatus"));
+        }
+
+        //电话号码
+        if (Strings.isNotBlank(orderSearchPram.getPhoneNo())) {
+            String usedMobiles = orderSearchPram.getPhoneNo();
+            if (usedMobiles.contains(",")) {
+                String[] usedMobileList = usedMobiles.split(",");
+                BoolQueryBuilder temp = QueryBuilders.boolQuery();
+                for (String usedMobile : usedMobileList) {
+                    temp.should(QueryBuilders.termQuery("phoneNo", usedMobile));
+                }
+                boolQuery.must(temp);
+            } else {
+                boolQuery.must(QueryBuilders.termQuery("phoneNo", usedMobiles));
+            }
+        }
+        //客户名称
+        if (Strings.isNotBlank(orderSearchPram.getCustomerName())) {
+            boolQuery.must(QueryBuilders.wildcardQuery("customerName.keyword", "*" + orderSearchPram.getCustomerName() + "*"));
+        }
+        //通道名称
+        if (Strings.isNotBlank(orderSearchPram.getChannelName())) {
+            boolQuery.must(QueryBuilders.wildcardQuery("channelName.keyword", "*" + orderSearchPram.getChannelName() + "*" ));
+            boolQuery.must(QueryBuilders.existsQuery("channelName"));
+        }
+        //订单状态
+        if (Strings.isNotBlank(orderSearchPram.getStatus())) {
+            boolQuery.must(QueryBuilders.termQuery("status", orderSearchPram.getStatus()));
+        }
+        //运营商
+        if (Strings.isNotBlank(orderSearchPram.getPhoneOperator())) {
+            boolQuery.must(QueryBuilders.termQuery("phoneOperator", orderSearchPram.getPhoneOperator()));
+        }
+        //面额
+        if (Strings.isNotBlank(orderSearchPram.getFlowAmount())) {
+            String flowAmount = orderSearchPram.getFlowAmount();
+            if (flowAmount.contains("-")) {
+                String[] flowAmountSplit = flowAmount.split("-");
+                rangeQueryBuilder = QueryBuilders.rangeQuery("flowAmount")
+                        .gte(flowAmountSplit[0])
+                        .lte(flowAmountSplit[1]);
+                boolQuery.must(rangeQueryBuilder);
+            }
+        }
+        //归属地
+        if (Strings.isNotBlank(orderSearchPram.getPhoneHome())) {
+            boolQuery.must(QueryBuilders.wildcardQuery("phoneHome.keyword", "*" + orderSearchPram.getPhoneHome() + "*"));
+        }
+
+        NativeSearchQuery query = new NativeSearchQueryBuilder()
+                .withSort(timeSort)
+                .withQuery(boolQuery)
+                .build();
+        //查询数据
+        try {
+            SearchHits<OrderEsDto> hits = restTemplate.search(query, OrderEsDto.class);
+            long total = hits.getTotalHits();
+            List<SearchHit<OrderEsDto>> searchHits = hits.getSearchHits();
+            System.out.println("一共" + total + "个");
+            for (SearchHit<OrderEsDto> searchHit : searchHits) {
+                OrderEsDto orderEsDto = searchHit.getContent();
+                resultsList.add(orderEsDto);
+            }
+            //写出到EXCEL
+//            BigExcelWriter writer= ExcelUtil.getBigWriter("e:/xxx.xlsx");
+//            writer.write(resultsList);
+//            writer.close();
+            } catch (Exception e) {
+                log.error(String.valueOf(e));
+            }
+        return resultsList;
+    }
 }
 
 

+ 0 - 1
modules/save-data/src/main/java/com/fire/savedata/consumer/OrderTidbConsumer.java

@@ -12,7 +12,6 @@ import org.apache.rocketmq.common.message.MessageExt;
 import org.apache.rocketmq.spring.annotation.ConsumeMode;
 import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
 import org.apache.rocketmq.spring.core.RocketMQListener;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;

+ 5 - 0
pom.xml

@@ -90,6 +90,11 @@
                 <artifactId>hutool-all</artifactId>
                 <version>5.2.0</version>
             </dependency>
+            <dependency>
+                <groupId>org.apache.poi</groupId>
+                <artifactId>poi-ooxml</artifactId>
+                <version>5.0.0</version>
+            </dependency>
 
             <dependency>
                 <groupId>io.jsonwebtoken</groupId>