SettlementController.java 3.99 KB
package com.infoloop.tianting.streamController;

import cn.dev33.satoken.annotation.SaIgnore;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.enums.SettlementDimensionEnum;
import com.infoloop.tianting.model.dto.OrderDbDTO;
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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
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.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.io.ByteArrayOutputStream;
import java.time.format.DateTimeFormatter;

@Api(tags = "结算")
@ApiSupport(order = 0)
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class SettlementController {
    private final SettlementService settlementService;

    @SaIgnore
    @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)
    public ResponseEntity<byte[]> settlementGenerateExcel(@Valid @RequestBody SettlementRequestDto settlementRequestDto) {
        ByteArrayOutputStream outputStream = settlementService.generateOrderSettlementExcel(
                settlementRequestDto);

        String fileName;
        if (settlementRequestDto.getDimension() == SettlementDimensionEnum.BY_ORDER) {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
            String startDate = settlementRequestDto.getTimeStart().format(formatter);
            String endDate = settlementRequestDto.getTimeEnd().format(formatter);
            fileName = String.format("结算报表_%s_%s.xlsx", startDate, endDate);
        } else {
            fileName = "订单数据.xlsx";
        }

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", fileName);

        return ResponseEntity.ok()
                .headers(headers)
                .body(outputStream.toByteArray());
    }

    @ApiOperation(value = "院区端订单导出")
    @PostMapping("/separateMeals/export")
    @ResponseStatus(HttpStatus.OK)
    public ResponseEntity<byte[]> exportSeparateMeals(@Valid @RequestBody OrderDbDTO.QueryOrderDto queryOrderDto) {
        ByteArrayOutputStream outputStream = settlementService.exportSeparateMealsExcel(queryOrderDto);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", "分餐表.xlsx");
        return ResponseEntity.ok()
                .headers(headers)
                .body(outputStream.toByteArray());
    }

}