Browse Source

任务提交 分发记录下载

秦国才 4 years ago
parent
commit
1e4f2ce674

+ 24 - 7
modules/admin/src/main/java/com/fire/admin/rest/OrderRest.java

@@ -1,12 +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.DispatchDto;
 import com.fire.es.OrderEsDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -18,12 +19,10 @@ 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;
 
 
@@ -77,12 +76,30 @@ public class OrderRest {
             excelWriter.flush(response.getOutputStream());
             excelWriter.close();
             out.flush();
-    } catch (Exception e) {
-        e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
-
-
+    @PostMapping("/getDispatchExcel")
+    @ApiOperation(value = "导出分发记录数据")
+    public void getDispatchExcel(@RequestBody DispatchSearchPram dispatchSearchPram, HttpServletResponse response) {
+        String fileName = "dispatch-" + new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+        ServletOutputStream out = null;
+        try {
+            ArrayList<DispatchDto> dispatchList = orderManagementService.getDispatchList(dispatchSearchPram);
+            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(dispatchList);
+            excelWriter.flush(response.getOutputStream());
+            excelWriter.close();
+            out.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
 

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

@@ -533,6 +533,96 @@ public class OrderManagementService {
             }
         return resultsList;
     }
+
+
+
+    public ArrayList<DispatchDto> getDispatchList(DispatchSearchPram dispatchSearchPram) {
+
+        ArrayList<DispatchDto> resultsList = new ArrayList<>();
+        //以创建时间倒序排列
+        Date createDateStart = dispatchSearchPram.getCreateDateStart();
+        Date createDateEnd = dispatchSearchPram.getCreateDateEnd();
+
+        //分页条件
+        FieldSortBuilder timeSort = SortBuilders.fieldSort("createDate").order(SortOrder.DESC);
+        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
+        //时间范围
+        RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("createDate")
+                .gte(createDateStart.getTime())
+                .lte(createDateEnd.getTime());
+        boolQuery.must(rangeQueryBuilder);
+        //筛选条件
+        //订单号
+        if (Strings.isNotBlank(dispatchSearchPram.getOrderId())) {
+            boolQuery.must(QueryBuilders.termQuery("orderId", dispatchSearchPram.getOrderId()));
+        }
+        //分发订单号
+        if (Strings.isNotBlank(dispatchSearchPram.getRecId())) {
+            boolQuery.must(QueryBuilders.matchQuery("recId", dispatchSearchPram.getRecId()));
+        }
+        //通道名称
+        if (Strings.isNotBlank(dispatchSearchPram.getChannelName())) {
+            boolQuery.must(QueryBuilders.wildcardQuery("channelName.keyword", "*" + dispatchSearchPram.getChannelName() + "*"));
+        }
+        //电话号码
+        if (Strings.isNotBlank(dispatchSearchPram.getPhoneNo())) {
+            String usedMobiles = dispatchSearchPram.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(dispatchSearchPram.getSendStatus())) {
+            boolQuery.must(QueryBuilders.termQuery("sendStatus",dispatchSearchPram.getSendStatus()));
+        }
+        //运营商
+        if (Strings.isNotBlank(dispatchSearchPram.getPhoneOperator())) {
+            boolQuery.must(QueryBuilders.termQuery("phoneOperator", dispatchSearchPram.getPhoneOperator()));
+        }
+        //面额
+        if (Strings.isNotBlank(dispatchSearchPram.getFlowAmount())) {
+            String flowAmount = dispatchSearchPram.getFlowAmount();
+            if (flowAmount.contains("-")) {
+                String[] flowAmountSplit = flowAmount.split("-");
+                rangeQueryBuilder = QueryBuilders.rangeQuery("flowAmount")
+                        .gte(flowAmountSplit[0])
+                        .lte(flowAmountSplit[1]);
+                boolQuery.must(rangeQueryBuilder);
+            }
+        }
+        //归属地
+        if (Strings.isNotBlank(dispatchSearchPram.getPhoneHome())) {
+            boolQuery.must(QueryBuilders.wildcardQuery("phoneHome.keyword", "*" + dispatchSearchPram.getPhoneHome() + "*"));
+        }
+
+        NativeSearchQuery query = new NativeSearchQueryBuilder()
+                .withSort(timeSort)
+                .withQuery(boolQuery)
+                .build();
+        //查询数据
+        try {
+            SearchHits<DispatchDto> hits = restTemplate.search(query, DispatchDto.class);
+            long total = hits.getTotalHits();
+            List<SearchHit<DispatchDto>> searchHits = hits.getSearchHits();
+            System.out.println("一共" + total + "个");
+            System.out.println("搜索结果" + searchHits.size() + "个");
+            for (SearchHit<DispatchDto> searchHit : searchHits) {
+                DispatchDto dispatchDto = searchHit.getContent();
+                resultsList.add(dispatchDto);
+            }
+        } catch (Exception e) {
+            log.error(String.valueOf(e));
+        }
+        return resultsList;
+
+    }
 }