zhuyifan

feat(settlement): 为企业添加独立的结算账单生成 Excel功能

...@@ -2,10 +2,12 @@ package com.infoloop.tianting.model.dto; ...@@ -2,10 +2,12 @@ package com.infoloop.tianting.model.dto;
2 2
3 import com.infoloop.tianting.enums.SettlementDimensionEnum; 3 import com.infoloop.tianting.enums.SettlementDimensionEnum;
4 import io.swagger.annotations.ApiModel; 4 import io.swagger.annotations.ApiModel;
5 -import java.time.LocalDateTime;
6 import lombok.Builder; 5 import lombok.Builder;
7 import lombok.Data; 6 import lombok.Data;
8 7
8 +import java.time.LocalDateTime;
9 +import java.util.List;
10 +
9 @Data 11 @Data
10 @ApiModel(description = "统计DTO") 12 @ApiModel(description = "统计DTO")
11 public class SettlementDTO { 13 public class SettlementDTO {
...@@ -15,6 +17,10 @@ public class SettlementDTO { ...@@ -15,6 +17,10 @@ public class SettlementDTO {
15 @ApiModel(description = "SettlementRequestDto") 17 @ApiModel(description = "SettlementRequestDto")
16 public static class SettlementRequestDto { 18 public static class SettlementRequestDto {
17 19
20 + private int enterpriseId;
21 +
22 + private List<Integer> stallIds;
23 +
18 private SettlementDimensionEnum dimension; 24 private SettlementDimensionEnum dimension;
19 25
20 private LocalDateTime timeStart; 26 private LocalDateTime timeStart;
......
...@@ -6,26 +6,14 @@ import com.infoloop.tianting.context.LoginContextHolder; ...@@ -6,26 +6,14 @@ import com.infoloop.tianting.context.LoginContextHolder;
6 import com.infoloop.tianting.exception.ClientEndExceptions.BusinessException; 6 import com.infoloop.tianting.exception.ClientEndExceptions.BusinessException;
7 import com.infoloop.tianting.exception.ErrorCodeEnum; 7 import com.infoloop.tianting.exception.ErrorCodeEnum;
8 import com.infoloop.tianting.menuservice.SingleMenuDetailRpcResponse; 8 import com.infoloop.tianting.menuservice.SingleMenuDetailRpcResponse;
9 -import com.infoloop.tianting.menuservice.SingleMenuRpcResponse;
10 -import com.infoloop.tianting.model.common.ResponseResult;
11 import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto; 9 import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
12 import com.infoloop.tianting.model.dto.SettlementDTO.SettlementMenuSkuDto; 10 import com.infoloop.tianting.model.dto.SettlementDTO.SettlementMenuSkuDto;
13 import com.infoloop.tianting.model.dto.SettlementDTO.SettlementRequestDto; 11 import com.infoloop.tianting.model.dto.SettlementDTO.SettlementRequestDto;
14 -import com.infoloop.tianting.service.OrderService;
15 import com.infoloop.tianting.service.SettlementService; 12 import com.infoloop.tianting.service.SettlementService;
16 import com.infoloop.tianting.service.client.MenuServiceRpcClient; 13 import com.infoloop.tianting.service.client.MenuServiceRpcClient;
17 import com.infoloop.tianting.service.client.OrderServiceRpcClient; 14 import com.infoloop.tianting.service.client.OrderServiceRpcClient;
18 import com.infoloop.tianting.service.client.SkuServiceRpcClient; 15 import com.infoloop.tianting.service.client.SkuServiceRpcClient;
19 import com.infoloop.tianting.utils.DateUtil; 16 import com.infoloop.tianting.utils.DateUtil;
20 -import java.io.ByteArrayOutputStream;
21 -import java.io.FileOutputStream;
22 -import java.io.IOException;
23 -import java.time.format.DateTimeFormatter;
24 -import java.util.ArrayList;
25 -import java.util.HashMap;
26 -import java.util.List;
27 -import java.util.Map;
28 -import java.util.stream.Collectors;
29 import lombok.RequiredArgsConstructor; 17 import lombok.RequiredArgsConstructor;
30 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
31 import org.apache.poi.ss.usermodel.Cell; 19 import org.apache.poi.ss.usermodel.Cell;
...@@ -37,6 +25,14 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; ...@@ -37,6 +25,14 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
37 import org.springframework.beans.factory.annotation.Autowired; 25 import org.springframework.beans.factory.annotation.Autowired;
38 import org.springframework.stereotype.Service; 26 import org.springframework.stereotype.Service;
39 27
28 +import java.io.ByteArrayOutputStream;
29 +import java.io.IOException;
30 +import java.util.ArrayList;
31 +import java.util.HashMap;
32 +import java.util.List;
33 +import java.util.Map;
34 +import java.util.stream.Collectors;
35 +
40 @Slf4j 36 @Slf4j
41 @Service 37 @Service
42 @RequiredArgsConstructor(onConstructor = @__(@Autowired)) 38 @RequiredArgsConstructor(onConstructor = @__(@Autowired))
...@@ -50,11 +46,13 @@ public class SettlementServiceImpl implements SettlementService { ...@@ -50,11 +46,13 @@ public class SettlementServiceImpl implements SettlementService {
50 46
51 final var operatorLoginInfo = LoginContextHolder.getLoginInfo(); 47 final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
52 final var queryOrderDto = QueryOrderByConditionDto.builder() 48 final var queryOrderDto = QueryOrderByConditionDto.builder()
53 - .enterpriseId(operatorLoginInfo.getEnterpriseId()) 49 + .enterpriseId(LoginContextHolder.hasLogin() ? operatorLoginInfo.getEnterpriseId() : settlementRequest.getEnterpriseId())
54 .shouldFilterCreatedAtTimeStart(true) 50 .shouldFilterCreatedAtTimeStart(true)
55 .createdAtTimeStart(settlementRequest.getTimeStart()) 51 .createdAtTimeStart(settlementRequest.getTimeStart())
56 .shouldFilterCreatedAtTimeEnd(true) 52 .shouldFilterCreatedAtTimeEnd(true)
57 .createdAtTimeEnd(settlementRequest.getTimeEnd()) 53 .createdAtTimeEnd(settlementRequest.getTimeEnd())
54 + .shouldFilterStallIds(!settlementRequest.getStallIds().isEmpty())
55 + .stallIds(settlementRequest.getStallIds())
58 .build(); 56 .build();
59 final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto); 57 final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
60 List<Integer> orderIds = orderList.stream().map( 58 List<Integer> orderIds = orderList.stream().map(
......
1 package com.infoloop.tianting.streamController; 1 package com.infoloop.tianting.streamController;
2 2
3 import com.github.xiaoymin.knife4j.annotations.ApiSupport; 3 import com.github.xiaoymin.knife4j.annotations.ApiSupport;
4 -import com.infoloop.tianting.model.common.ResponseResult;
5 import com.infoloop.tianting.model.dto.SettlementDTO.SettlementRequestDto; 4 import com.infoloop.tianting.model.dto.SettlementDTO.SettlementRequestDto;
6 import com.infoloop.tianting.service.SettlementService; 5 import com.infoloop.tianting.service.SettlementService;
7 import io.swagger.annotations.Api; 6 import io.swagger.annotations.Api;
8 import io.swagger.annotations.ApiOperation; 7 import io.swagger.annotations.ApiOperation;
9 -import java.io.ByteArrayOutputStream;
10 -import javax.validation.Valid;
11 import lombok.RequiredArgsConstructor; 8 import lombok.RequiredArgsConstructor;
12 import lombok.extern.slf4j.Slf4j; 9 import lombok.extern.slf4j.Slf4j;
13 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
...@@ -16,11 +13,14 @@ import org.springframework.http.HttpStatus; ...@@ -16,11 +13,14 @@ import org.springframework.http.HttpStatus;
16 import org.springframework.http.MediaType; 13 import org.springframework.http.MediaType;
17 import org.springframework.http.ResponseEntity; 14 import org.springframework.http.ResponseEntity;
18 import org.springframework.validation.annotation.Validated; 15 import org.springframework.validation.annotation.Validated;
19 -import org.springframework.web.bind.annotation.GetMapping;
20 import org.springframework.web.bind.annotation.PostMapping; 16 import org.springframework.web.bind.annotation.PostMapping;
21 import org.springframework.web.bind.annotation.RequestBody; 17 import org.springframework.web.bind.annotation.RequestBody;
22 import org.springframework.web.bind.annotation.ResponseStatus; 18 import org.springframework.web.bind.annotation.ResponseStatus;
23 import org.springframework.web.bind.annotation.RestController; 19 import org.springframework.web.bind.annotation.RestController;
20 +import springfox.documentation.annotations.ApiIgnore;
21 +
22 +import javax.validation.Valid;
23 +import java.io.ByteArrayOutputStream;
24 24
25 @Api(tags = "结算") 25 @Api(tags = "结算")
26 @ApiSupport(order = 0) 26 @ApiSupport(order = 0)
...@@ -31,6 +31,20 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -31,6 +31,20 @@ import org.springframework.web.bind.annotation.RestController;
31 public class SettlementController { 31 public class SettlementController {
32 private final SettlementService settlementService; 32 private final SettlementService settlementService;
33 33
34 + @ApiIgnore
35 + @ApiOperation(value = "结算账单生成excel")
36 + @PostMapping("/enterprise/settlement/generate-excel")
37 + @ResponseStatus(HttpStatus.OK)
38 + public ResponseEntity<byte[]> enterpriseSettlementGenerateExcel(@Valid @RequestBody SettlementRequestDto settlementRequestDto) {
39 + ByteArrayOutputStream outputStream = settlementService.generateOrderSettlementExcel(settlementRequestDto);
40 + HttpHeaders headers = new HttpHeaders();
41 + headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
42 + headers.setContentDispositionFormData("attachment", "订单数据.xlsx");
43 + return ResponseEntity.ok()
44 + .headers(headers)
45 + .body(outputStream.toByteArray());
46 + }
47 +
34 @ApiOperation(value = "结算账单生成excel") 48 @ApiOperation(value = "结算账单生成excel")
35 @PostMapping("/settlement/generate-excel") 49 @PostMapping("/settlement/generate-excel")
36 @ResponseStatus(HttpStatus.OK) 50 @ResponseStatus(HttpStatus.OK)
......