ycl-pojo/src/main/java/com/ycl/platform/domain/excel/CalculateExport.java
New file @@ -0,0 +1,63 @@ package com.ycl.platform.domain.excel; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.*; import com.alibaba.excel.enums.BooleanEnum; import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum; import com.alibaba.excel.enums.poi.VerticalAlignmentEnum; import lombok.Data; import java.math.BigDecimal; /** * @author gonghl * @since 2024/7/30 上午 10:01 */ @Data @ColumnWidth(20) @HeadRowHeight(30) @ContentRowHeight(30) @HeadStyle(fillForegroundColor = 64) @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER) @ContentFontStyle(fontHeightInPoints = 18, bold = BooleanEnum.TRUE, fontName = "宋体") @HeadFontStyle(fontHeightInPoints = 18, bold = BooleanEnum.TRUE, fontName = "宋体") public class CalculateExport { /** * 规则名称 */ @ExcelProperty({"自贡市公共视频监控系统续维合同", "规则名称"}) @ColumnWidth(40) private String ruleName; /** * 数量 */ @ExcelProperty({"自贡市公共视频监控系统续维合同", "数量"}) private Integer num; /** * 金额 */ @ExcelProperty({"自贡市公共视频监控系统续维合同", "金额"}) private BigDecimal money; /** * 分数 */ @ExcelProperty({"自贡市公共视频监控系统续维合同", "分数"}) private Integer score; /** * 剩余分数 */ @ExcelProperty({"自贡市公共视频监控系统续维合同", "剩余分数"}) private Integer surplusScore; /** * 合计 */ @ExcelProperty({"自贡市公共视频监控系统续维合同", "合计"}) private BigDecimal total; } ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
@@ -1,22 +1,15 @@ package com.ycl.platform.controller; import com.ycl.platform.domain.form.CalculateReportBackfillForm; import com.ycl.platform.domain.param.HK.CoordinateByAreaParam; import com.ycl.system.domain.group.Update; import com.ycl.system.domain.group.Add; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import lombok.RequiredArgsConstructor; import java.util.List; import org.springframework.validation.annotation.Validated; import jakarta.validation.constraints.NotEmpty; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import com.ycl.platform.domain.query.CalculateReportQuery; import com.ycl.platform.service.CalculateReportService; import com.ycl.system.Result; import com.ycl.platform.domain.form.CalculateReportForm; import com.ycl.platform.domain.query.CalculateReportQuery; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; /** @@ -62,4 +55,11 @@ return calculateReportService.updatePublishStatus(reportId); } @PostMapping("/export") @ApiOperation(value = "导出", notes = "导出") @PreAuthorize("@ss.hasPermi('system:calculate:report:export')") public void export(Integer contractId, HttpServletResponse response) { calculateReportService.export(contractId, response); } } ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java
@@ -1,16 +1,16 @@ package com.ycl.platform.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.platform.domain.entity.CalculateReport; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.platform.domain.excel.CalculateExport; import com.ycl.platform.domain.query.CalculateReportQuery; import com.ycl.platform.domain.vo.CalculateRecordVO; import com.ycl.platform.domain.vo.CalculateReportDetailVO; import com.ycl.platform.domain.vo.CalculateReportVO; import com.ycl.platform.domain.form.CalculateReportForm; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; /** * 核算报告 Mapper 接口 @@ -37,4 +37,10 @@ * @return */ CalculateReportDetailVO getById(@Param("id") Long id); /** * 导出数据 * @return 数据 */ List<CalculateExport> exportData(Integer contractId); } ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java
@@ -6,6 +6,8 @@ import com.ycl.system.Result; import com.ycl.platform.domain.form.CalculateReportForm; import com.ycl.platform.domain.query.CalculateReportQuery; import jakarta.servlet.http.HttpServletResponse; import java.util.List; /** @@ -79,4 +81,10 @@ * @return */ Result updatePublishStatus(Long reportId); /** * 导出 * @param response 响应 */ void export(Integer contractId, HttpServletResponse response); } ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
@@ -1,40 +1,37 @@ package com.ycl.platform.service.impl; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.platform.domain.entity.CalculateRecord; import com.ycl.platform.domain.entity.CalculateReport; import com.ycl.platform.domain.excel.CalculateExport; import com.ycl.platform.domain.form.CalculateReportBackfillForm; import com.ycl.platform.domain.vo.CalculateRecordVO; import com.ycl.platform.domain.form.CalculateReportForm; import com.ycl.platform.domain.query.CalculateReportQuery; import com.ycl.platform.domain.vo.CalculateReportDetailVO; import com.ycl.platform.domain.vo.CalculateReportVO; import com.ycl.platform.mapper.CalculateRecordMapper; import com.ycl.platform.mapper.CalculateReportMapper; import com.ycl.platform.service.CalculateReportService; import com.ycl.system.Result; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.platform.domain.form.CalculateReportForm; import com.ycl.platform.domain.vo.CalculateReportVO; import com.ycl.platform.domain.query.CalculateReportQuery; import java.math.BigDecimal; import java.util.List; import com.ycl.utils.SecurityUtils; import enumeration.general.CalculateReportStatusEnum; import org.apache.commons.lang3.StringUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.system.page.PageUtil; import org.springframework.stereotype.Service; import org.springframework.security.core.context.SecurityContextHolder; import enumeration.general.CalculateReportStatusEnum; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import java.util.ArrayList; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import lombok.RequiredArgsConstructor; import org.springframework.util.CollectionUtils; /** * 核算报告 服务实现类 @@ -198,4 +195,16 @@ baseMapper.updateById(report); return Result.ok("操作成功"); } @Override @SneakyThrows public void export(Integer contractId, HttpServletResponse response) { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("核算报告", StandardCharsets.UTF_8).replace("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); EasyExcel.write(response.getOutputStream(), CalculateExport.class) .sheet("核算报告") .doWrite(baseMapper.exportData(contractId)); } } ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
@@ -20,6 +20,7 @@ <select id="page" resultMap="BaseResultMap"> SELECT tcr.contract_id, tyu.unit_name, tc.name, tcr.id, @@ -99,4 +100,15 @@ WHERE tcr.id = #{id} </select> <select id="exportData" resultType="com.ycl.platform.domain.excel.CalculateExport"> SELECT SUBSTRING_INDEX(rule_name, '/', 1) AS rule_name, COUNT(*) AS num, SUM(score) AS score, (100 - SUM(score)) AS surplusScore FROM t_contract_score WHERE contract_id = #{contractId} AND auditing_status = 'PASS' AND deleted = 0 GROUP BY SUBSTRING_INDEX(rule_name, '/', 1) </select> </mapper>