From 5ed3405a0156f76decc081c9f1d65d2f44f1ad8c Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期二, 30 七月 2024 13:58:19 +0800
Subject: [PATCH] feat:核算报告导出

---
 ycl-pojo/src/main/java/com/ycl/platform/domain/excel/CalculateExport.java              |   63 +++++++++++++++++++++
 ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java    |   26 ++++----
 ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java |   51 ++++++++++-------
 ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml                    |   12 ++++
 ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java            |   14 +++-
 ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java          |    8 ++
 6 files changed, 136 insertions(+), 38 deletions(-)

diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/CalculateExport.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/CalculateExport.java
new file mode 100644
index 0000000..bd6aca7
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/CalculateExport.java
@@ -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;
+
+}
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java b/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
index f6049ca..7c23eea 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
+++ b/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);
+    }
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java
index b8d17a4..8b5e223 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java
+++ b/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);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java b/ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java
index 2281a39..96d9dd8 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java
+++ b/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);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
index 8943806..cd1fed3 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
+++ b/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));
+    }
 }
diff --git a/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
index 21c56ba..a5e761d 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
+++ b/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>

--
Gitblit v1.8.0