From 7a93f4097430703dc60c4aee0240ed348a0ab1df Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期一, 06 一月 2025 18:12:00 +0800
Subject: [PATCH] 核算重构

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java |   86 +++++++++++++++++++++++++------------------
 1 files changed, 50 insertions(+), 36 deletions(-)

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 8020953..839dde9 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,10 +1,15 @@
 package com.ycl.platform.service.impl;
 
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.entity.CalculateRule;
 import com.ycl.platform.domain.excel.CalculateExport;
 import com.ycl.platform.domain.form.CalculateReportBackfillForm;
 import com.ycl.platform.domain.form.CalculateReportForm;
@@ -14,8 +19,10 @@
 import com.ycl.platform.mapper.CalculateRecordMapper;
 import com.ycl.platform.mapper.CalculateReportMapper;
 import com.ycl.platform.service.CalculateReportService;
+import com.ycl.platform.service.ICalculateRuleService;
 import com.ycl.system.Result;
 import com.ycl.system.page.PageUtil;
+import com.ycl.utils.SecurityUtils;
 import enumeration.general.CalculateReportStatusEnum;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
@@ -44,7 +51,7 @@
 @RequiredArgsConstructor
 public class CalculateReportServiceImpl extends ServiceImpl<CalculateReportMapper, CalculateReport> implements CalculateReportService {
 
-    private final CalculateReportMapper calculateReportMapper;
+    private final ICalculateRuleService calculateRuleService;
     private final CalculateRecordMapper calculateRecordMapper;
 
     /**
@@ -118,6 +125,7 @@
     @Override
     public Result page(CalculateReportQuery query) {
         IPage<CalculateReportVO> page = PageUtil.getPage(query, CalculateReportVO.class);
+        query.setUnitId(SecurityUtils.getUnitId());
         baseMapper.page(query, page);
         page.getRecords().stream().forEach(item -> {
             if (Objects.isNull(item)) {
@@ -135,9 +143,9 @@
      * @return
      */
     @Override
-    public Result detail(Long id) {
+    public Result detail(CalculateReportQuery query) {
         // 鏄庣粏鍒楄〃
-        CalculateReportDetailVO detail = baseMapper.getById(id);
+        CalculateReportDetailVO detail = baseMapper.getById(query);
         if (Objects.nonNull(detail) && ! CollectionUtils.isEmpty(detail.getRecordList())) {
             if (CalculateReportStatusEnum.NOT_PUBLISH.equals(detail.getStatus())) {
                 detail.getRecordList().get(0).setLatest(Boolean.TRUE);
@@ -164,40 +172,40 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result backfill(CalculateReportBackfillForm form) {
-        CalculateReport report = baseMapper.selectById(form.getId());
-        if (Objects.isNull(report)) {
-            throw new RuntimeException("璇ユ牳绠楁姤鍛婁笉瀛樺湪");
-        }
-        if (CalculateReportStatusEnum.PUBLISHED.equals(report.getStatus())) {
-            throw new RuntimeException("鏈�鏂颁竴娆℃牳绠楁姤鍛婂凡缁忓彂甯冿紝鏃犳硶淇敼");
-        }
-        CalculateReportBackfillForm.RecordForm latestRecord = form.getRecordList().get(0);
-        CalculateRecord beforeRecord = calculateRecordMapper.selectById(latestRecord.getId());
-        if (Objects.isNull(beforeRecord)) {
-            throw new RuntimeException("鏈�杩戜竴娆℃牳绠楄褰曚笉瀛樺湪");
-        }
-        // 璁$畻寰楀埌鎵f鎬婚锛堝彧绠楁渶杩戜竴鏉★級
-        BigDecimal totalDeduct = report.getDeductMoney().subtract(latestRecord.getDeductMoney()).add(latestRecord.getDeductMoney());
-        report.setDeductMoney(totalDeduct);
-        baseMapper.updateById(report);
-
-        beforeRecord.setDeductMoney(latestRecord.getDeductMoney());
-        calculateRecordMapper.updateById(beforeRecord);
+//        CalculateReport report = baseMapper.selectById(form.getId());
+//        if (Objects.isNull(report)) {
+//            throw new RuntimeException("璇ユ牳绠楁姤鍛婁笉瀛樺湪");
+//        }
+//        if (CalculateReportStatusEnum.PUBLISHED.equals(report.getStatus())) {
+//            throw new RuntimeException("鏈�鏂颁竴娆℃牳绠楁姤鍛婂凡缁忓彂甯冿紝鏃犳硶淇敼");
+//        }
+//        CalculateReportBackfillForm.RecordForm latestRecord = form.getRecordList().get(0);
+//        CalculateRecord beforeRecord = calculateRecordMapper.selectById(latestRecord.getId());
+//        if (Objects.isNull(beforeRecord)) {
+//            throw new RuntimeException("鏈�杩戜竴娆℃牳绠楄褰曚笉瀛樺湪");
+//        }
+//        // 璁$畻寰楀埌鎵f鎬婚锛堝彧绠楁渶杩戜竴鏉★級
+//        BigDecimal totalDeduct = report.getDeductMoney().subtract(latestRecord.getDeductMoney()).add(latestRecord.getDeductMoney());
+//        report.setDeductMoney(totalDeduct);
+//        baseMapper.updateById(report);
+//
+//        beforeRecord.setDeductMoney(latestRecord.getDeductMoney());
+//        calculateRecordMapper.updateById(beforeRecord);
+        List<CalculateReportBackfillForm.RecordForm> recordList = form.getRecordList();
+        if(!CollectionUtils.isEmpty(recordList)) calculateRecordMapper.updateBatch(recordList);
         return Result.ok("鎿嶄綔鎴愬姛");
     }
 
     @Override
-    public Result updatePublishStatus(Long reportId) {
-        CalculateReport report = baseMapper.selectById(reportId);
-        if (Objects.isNull(report)) {
-            throw new RuntimeException("璇ユ牳绠楁姤鍛婁笉瀛樺湪");
-        }
-        if (CalculateReportStatusEnum.NOT_PUBLISH.equals(report.getStatus())) {
-            report.setStatus(CalculateReportStatusEnum.PUBLISHED);
-        } else if (CalculateReportStatusEnum.PUBLISHED.equals(report.getStatus())) {
-            report.setStatus(CalculateReportStatusEnum.NOT_PUBLISH);
-        }
-        baseMapper.updateById(report);
+    public Result updatePublishStatus(Integer contractId,Integer whichYear) {
+
+        calculateRecordMapper.batchPublish(contractId,whichYear);
+        return Result.ok("鎿嶄綔鎴愬姛");
+    }
+
+    @Override
+    public Result updatePublishStatusById(Integer id, String status) {
+        calculateRecordMapper.updatePublishById(id,status);
         return Result.ok("鎿嶄綔鎴愬姛");
     }
 
@@ -211,13 +219,19 @@
         calculateExport.setNum(list.stream().mapToInt(CalculateExport::getNum).sum());
         calculateExport.setScore(100 + list.stream().mapToInt(CalculateExport::getScore).sum());
         list.add(calculateExport);
+        // 鑾峰彇瑙勫垯
+        List<CalculateRule> ruleList = calculateRuleService.list(new LambdaQueryWrapper<CalculateRule>().eq(CalculateRule::getContractId, contractId));
         // 杈撳嚭鏂囦欢
         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(list);
+        // 澧炲姞sheet
+        try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build()){
+            WriteSheet sheet = EasyExcel.writerSheet(0, "鏍哥畻鎶ュ憡").head(CalculateExport.class).build();
+            excelWriter.write(list, sheet);
+            WriteSheet sheet2 = EasyExcel.writerSheet(1, "鏍哥畻瑙勫垯").head(CalculateRule.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+            excelWriter.write(ruleList, sheet2);
+        }
     }
 }

--
Gitblit v1.8.0