zhuyifan

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

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