feat(energy): 添加 4 个导出 Excel 接口

为 HydrogenRecord、HydrogenDetail、EnergyBill、EnergyAccount 各添加 /export-excel 端点,创建对应 ExcelVO 类,并在 MapStruct Convert 接口中新增 convertExcelList 方法。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
kkfluous
2026-03-16 00:42:13 +08:00
parent 7792c5157f
commit 842a81d7e4
11 changed files with 202 additions and 0 deletions

View File

@@ -1,7 +1,9 @@
package cn.iocoder.yudao.module.energy.controller.admin.account; package cn.iocoder.yudao.module.energy.controller.admin.account;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.energy.controller.admin.account.vo.*; import cn.iocoder.yudao.module.energy.controller.admin.account.vo.*;
import cn.iocoder.yudao.module.energy.convert.account.EnergyAccountConvert; import cn.iocoder.yudao.module.energy.convert.account.EnergyAccountConvert;
import cn.iocoder.yudao.module.energy.dal.dataobject.account.EnergyAccountDO; import cn.iocoder.yudao.module.energy.dal.dataobject.account.EnergyAccountDO;
@@ -12,11 +14,13 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@@ -39,6 +43,16 @@ public class EnergyAccountController {
return success(EnergyAccountConvert.INSTANCE.convertPage(pageResult)); return success(EnergyAccountConvert.INSTANCE.convertPage(pageResult));
} }
@GetMapping("/export-excel")
@Operation(summary = "导出能源账户 Excel")
@PreAuthorize("@ss.hasPermission('energy:account:export')")
public void exportExcel(@Valid EnergyAccountPageReqVO pageReqVO, HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
PageResult<EnergyAccountDO> pageResult = accountService.getAccountPage(pageReqVO);
List<EnergyAccountExcelVO> excelList = EnergyAccountConvert.INSTANCE.convertExcelList(pageResult.getList());
ExcelUtils.write(response, "能源账户.xlsx", "数据", EnergyAccountExcelVO.class, excelList);
}
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得账户详情") @Operation(summary = "获得账户详情")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)

View File

@@ -0,0 +1,33 @@
package cn.iocoder.yudao.module.energy.controller.admin.account.vo;
import cn.idev.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
@Data
public class EnergyAccountExcelVO {
@ExcelProperty("客户名称")
private String customerName;
@ExcelProperty("当前余额")
private BigDecimal balance;
@ExcelProperty("累计充值")
private BigDecimal accumulatedRecharge;
@ExcelProperty("累计消费")
private BigDecimal accumulatedConsume;
@ExcelProperty("余额预警阈值")
private BigDecimal reminderThreshold;
@ExcelProperty("账户状态")
private String accountStatusName;
@ExcelProperty("最后充值日期")
private LocalDate lastRechargeDate;
}

View File

@@ -1,7 +1,9 @@
package cn.iocoder.yudao.module.energy.controller.admin.bill; package cn.iocoder.yudao.module.energy.controller.admin.bill;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.energy.controller.admin.bill.vo.*; import cn.iocoder.yudao.module.energy.controller.admin.bill.vo.*;
import cn.iocoder.yudao.module.energy.convert.bill.EnergyBillConvert; import cn.iocoder.yudao.module.energy.convert.bill.EnergyBillConvert;
import cn.iocoder.yudao.module.energy.dal.dataobject.bill.EnergyBillDO; import cn.iocoder.yudao.module.energy.dal.dataobject.bill.EnergyBillDO;
@@ -10,11 +12,13 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -36,6 +40,16 @@ public class EnergyBillController {
return success(EnergyBillConvert.INSTANCE.convertPage(pageResult)); return success(EnergyBillConvert.INSTANCE.convertPage(pageResult));
} }
@GetMapping("/export-excel")
@Operation(summary = "导出能源账单 Excel")
@PreAuthorize("@ss.hasPermission('energy:bill:export')")
public void exportExcel(@Valid EnergyBillPageReqVO pageReqVO, HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
PageResult<EnergyBillDO> pageResult = billService.getBillPage(pageReqVO);
List<EnergyBillExcelVO> excelList = EnergyBillConvert.INSTANCE.convertExcelList(pageResult.getList());
ExcelUtils.write(response, "能源账单.xlsx", "数据", EnergyBillExcelVO.class, excelList);
}
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得账单详情") @Operation(summary = "获得账单详情")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)

View File

@@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.energy.controller.admin.bill.vo;
import cn.idev.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
@Data
public class EnergyBillExcelVO {
@ExcelProperty("账单编号")
private String billCode;
@ExcelProperty("客户名称")
private String customerName;
@ExcelProperty("加氢站")
private String stationName;
@ExcelProperty("合作模式")
private String cooperationTypeName;
@ExcelProperty("账单周期开始")
private LocalDate billPeriodStart;
@ExcelProperty("账单周期结束")
private LocalDate billPeriodEnd;
@ExcelProperty("应收金额")
private BigDecimal receivableAmount;
@ExcelProperty("实收金额")
private BigDecimal actualAmount;
@ExcelProperty("调整金额")
private BigDecimal adjustmentAmount;
@ExcelProperty("账单状态")
private String statusName;
@ExcelProperty("审核状态")
private String auditStatusName;
@ExcelProperty("付款状态")
private String paymentStatusName;
}

View File

@@ -1,7 +1,9 @@
package cn.iocoder.yudao.module.energy.controller.admin.detail; package cn.iocoder.yudao.module.energy.controller.admin.detail;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.energy.controller.admin.detail.vo.*; import cn.iocoder.yudao.module.energy.controller.admin.detail.vo.*;
import cn.iocoder.yudao.module.energy.convert.detail.HydrogenDetailConvert; import cn.iocoder.yudao.module.energy.convert.detail.HydrogenDetailConvert;
import cn.iocoder.yudao.module.energy.dal.dataobject.detail.EnergyHydrogenDetailDO; import cn.iocoder.yudao.module.energy.dal.dataobject.detail.EnergyHydrogenDetailDO;
@@ -10,11 +12,13 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -36,6 +40,16 @@ public class HydrogenDetailController {
return success(HydrogenDetailConvert.INSTANCE.convertPage(pageResult)); return success(HydrogenDetailConvert.INSTANCE.convertPage(pageResult));
} }
@GetMapping("/export-excel")
@Operation(summary = "导出加氢明细 Excel")
@PreAuthorize("@ss.hasPermission('energy:hydrogen-detail:export')")
public void exportExcel(@Valid HydrogenDetailPageReqVO pageReqVO, HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
PageResult<EnergyHydrogenDetailDO> pageResult = hydrogenDetailService.getDetailPage(pageReqVO);
List<HydrogenDetailExcelVO> excelList = HydrogenDetailConvert.INSTANCE.convertExcelList(pageResult.getList());
ExcelUtils.write(response, "加氢明细.xlsx", "数据", HydrogenDetailExcelVO.class, excelList);
}
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得明细详情") @Operation(summary = "获得明细详情")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)

View File

@@ -0,0 +1,49 @@
package cn.iocoder.yudao.module.energy.controller.admin.detail.vo;
import cn.idev.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
public class HydrogenDetailExcelVO {
@ExcelProperty("加氢站")
private String stationName;
@ExcelProperty("客户名称")
private String customerName;
@ExcelProperty("车牌号")
private String plateNumber;
@ExcelProperty("加氢日期")
private LocalDate hydrogenDate;
@ExcelProperty("加氢量(KG)")
private BigDecimal hydrogenQuantity;
@ExcelProperty("成本单价")
private BigDecimal costPrice;
@ExcelProperty("成本金额")
private BigDecimal costAmount;
@ExcelProperty("对客单价")
private BigDecimal customerPrice;
@ExcelProperty("对客金额")
private BigDecimal customerAmount;
@ExcelProperty("审核状态")
private String auditStatusName;
@ExcelProperty("扣款状态")
private String deductionStatusName;
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@@ -17,6 +17,10 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
@@ -75,6 +79,16 @@ public class HydrogenRecordController {
return success(HydrogenRecordConvert.INSTANCE.convertPage(pageResult)); return success(HydrogenRecordConvert.INSTANCE.convertPage(pageResult));
} }
@GetMapping("/export-excel")
@Operation(summary = "导出加氢记录 Excel")
@PreAuthorize("@ss.hasPermission('energy:hydrogen-record:export')")
public void exportExcel(@Valid HydrogenRecordPageReqVO pageReqVO, HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
PageResult<EnergyHydrogenRecordDO> pageResult = hydrogenRecordService.getRecordPage(pageReqVO);
List<HydrogenRecordExcelVO> excelList = HydrogenRecordConvert.INSTANCE.convertExcelList(pageResult.getList());
ExcelUtils.write(response, "加氢记录.xlsx", "数据", HydrogenRecordExcelVO.class, excelList);
}
@Deprecated // 被 import-preview + import-confirm + import-progress 三步流程替代 @Deprecated // 被 import-preview + import-confirm + import-progress 三步流程替代
@PostMapping("/import") @PostMapping("/import")
@Operation(summary = "Excel 批量导入") @Operation(summary = "Excel 批量导入")

View File

@@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.energy.convert.account; package cn.iocoder.yudao.module.energy.convert.account;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.energy.controller.admin.account.vo.EnergyAccountExcelVO;
import cn.iocoder.yudao.module.energy.controller.admin.account.vo.EnergyAccountRespVO; import cn.iocoder.yudao.module.energy.controller.admin.account.vo.EnergyAccountRespVO;
import cn.iocoder.yudao.module.energy.controller.admin.account.vo.EnergyProjectAccountRespVO; import cn.iocoder.yudao.module.energy.controller.admin.account.vo.EnergyProjectAccountRespVO;
import cn.iocoder.yudao.module.energy.dal.dataobject.account.EnergyAccountDO; import cn.iocoder.yudao.module.energy.dal.dataobject.account.EnergyAccountDO;
@@ -8,6 +9,8 @@ import cn.iocoder.yudao.module.energy.dal.dataobject.account.EnergyProjectAccoun
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper @Mapper
public interface EnergyAccountConvert { public interface EnergyAccountConvert {
EnergyAccountConvert INSTANCE = Mappers.getMapper(EnergyAccountConvert.class); EnergyAccountConvert INSTANCE = Mappers.getMapper(EnergyAccountConvert.class);
@@ -15,4 +18,5 @@ public interface EnergyAccountConvert {
PageResult<EnergyAccountRespVO> convertPage(PageResult<EnergyAccountDO> page); PageResult<EnergyAccountRespVO> convertPage(PageResult<EnergyAccountDO> page);
EnergyProjectAccountRespVO convert(EnergyProjectAccountDO bean); EnergyProjectAccountRespVO convert(EnergyProjectAccountDO bean);
PageResult<EnergyProjectAccountRespVO> convertProjectPage(PageResult<EnergyProjectAccountDO> page); PageResult<EnergyProjectAccountRespVO> convertProjectPage(PageResult<EnergyProjectAccountDO> page);
List<EnergyAccountExcelVO> convertExcelList(List<EnergyAccountDO> list);
} }

View File

@@ -1,14 +1,18 @@
package cn.iocoder.yudao.module.energy.convert.bill; package cn.iocoder.yudao.module.energy.convert.bill;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.energy.controller.admin.bill.vo.EnergyBillExcelVO;
import cn.iocoder.yudao.module.energy.controller.admin.bill.vo.EnergyBillRespVO; import cn.iocoder.yudao.module.energy.controller.admin.bill.vo.EnergyBillRespVO;
import cn.iocoder.yudao.module.energy.dal.dataobject.bill.EnergyBillDO; import cn.iocoder.yudao.module.energy.dal.dataobject.bill.EnergyBillDO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper @Mapper
public interface EnergyBillConvert { public interface EnergyBillConvert {
EnergyBillConvert INSTANCE = Mappers.getMapper(EnergyBillConvert.class); EnergyBillConvert INSTANCE = Mappers.getMapper(EnergyBillConvert.class);
EnergyBillRespVO convert(EnergyBillDO bean); EnergyBillRespVO convert(EnergyBillDO bean);
PageResult<EnergyBillRespVO> convertPage(PageResult<EnergyBillDO> page); PageResult<EnergyBillRespVO> convertPage(PageResult<EnergyBillDO> page);
List<EnergyBillExcelVO> convertExcelList(List<EnergyBillDO> list);
} }

View File

@@ -1,14 +1,18 @@
package cn.iocoder.yudao.module.energy.convert.detail; package cn.iocoder.yudao.module.energy.convert.detail;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.energy.controller.admin.detail.vo.HydrogenDetailExcelVO;
import cn.iocoder.yudao.module.energy.controller.admin.detail.vo.HydrogenDetailRespVO; import cn.iocoder.yudao.module.energy.controller.admin.detail.vo.HydrogenDetailRespVO;
import cn.iocoder.yudao.module.energy.dal.dataobject.detail.EnergyHydrogenDetailDO; import cn.iocoder.yudao.module.energy.dal.dataobject.detail.EnergyHydrogenDetailDO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper @Mapper
public interface HydrogenDetailConvert { public interface HydrogenDetailConvert {
HydrogenDetailConvert INSTANCE = Mappers.getMapper(HydrogenDetailConvert.class); HydrogenDetailConvert INSTANCE = Mappers.getMapper(HydrogenDetailConvert.class);
HydrogenDetailRespVO convert(EnergyHydrogenDetailDO bean); HydrogenDetailRespVO convert(EnergyHydrogenDetailDO bean);
PageResult<HydrogenDetailRespVO> convertPage(PageResult<EnergyHydrogenDetailDO> page); PageResult<HydrogenDetailRespVO> convertPage(PageResult<EnergyHydrogenDetailDO> page);
List<HydrogenDetailExcelVO> convertExcelList(List<EnergyHydrogenDetailDO> list);
} }

View File

@@ -1,16 +1,20 @@
package cn.iocoder.yudao.module.energy.convert.record; package cn.iocoder.yudao.module.energy.convert.record;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.energy.controller.admin.record.vo.HydrogenRecordExcelVO;
import cn.iocoder.yudao.module.energy.controller.admin.record.vo.HydrogenRecordRespVO; import cn.iocoder.yudao.module.energy.controller.admin.record.vo.HydrogenRecordRespVO;
import cn.iocoder.yudao.module.energy.controller.admin.record.vo.HydrogenRecordSaveReqVO; import cn.iocoder.yudao.module.energy.controller.admin.record.vo.HydrogenRecordSaveReqVO;
import cn.iocoder.yudao.module.energy.dal.dataobject.record.EnergyHydrogenRecordDO; import cn.iocoder.yudao.module.energy.dal.dataobject.record.EnergyHydrogenRecordDO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper @Mapper
public interface HydrogenRecordConvert { public interface HydrogenRecordConvert {
HydrogenRecordConvert INSTANCE = Mappers.getMapper(HydrogenRecordConvert.class); HydrogenRecordConvert INSTANCE = Mappers.getMapper(HydrogenRecordConvert.class);
EnergyHydrogenRecordDO convert(HydrogenRecordSaveReqVO bean); EnergyHydrogenRecordDO convert(HydrogenRecordSaveReqVO bean);
HydrogenRecordRespVO convert(EnergyHydrogenRecordDO bean); HydrogenRecordRespVO convert(EnergyHydrogenRecordDO bean);
PageResult<HydrogenRecordRespVO> convertPage(PageResult<EnergyHydrogenRecordDO> page); PageResult<HydrogenRecordRespVO> convertPage(PageResult<EnergyHydrogenRecordDO> page);
List<HydrogenRecordExcelVO> convertExcelList(List<EnergyHydrogenRecordDO> list);
} }