From b14531e3b850fe6d2fa916ba7b88b3e2bd2ff30a Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期三, 11 九月 2024 16:47:48 +0800
Subject: [PATCH] OSD加标签

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java |  149 ++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 108 insertions(+), 41 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 99edde0..10c8a12 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,35 +1,45 @@
 package com.ycl.platform.service.impl;
 
-import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+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.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.platform.service.ICalculateRuleService;
 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 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 com.ycl.utils.SecurityUtils;
+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.Date;
+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;
 
 /**
  * 鏍哥畻鎶ュ憡 鏈嶅姟瀹炵幇绫�
@@ -41,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;
 
     /**
@@ -52,6 +62,9 @@
     @Override
     public Result add(CalculateReportForm form) {
         CalculateReport entity = CalculateReportForm.getEntityByForm(form, null);
+        Date now = new Date();
+        entity.setCreateTime(now);
+        entity.setUpdateTime(now);
         if(baseMapper.insert(entity) > 0) {
             return Result.ok("娣诲姞鎴愬姛");
         }
@@ -67,10 +80,11 @@
     public Result update(CalculateReportForm form) {
 
         CalculateReport entity = baseMapper.selectById(form.getId());
-
         // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
         Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
         BeanUtils.copyProperties(form, entity);
+        Date now = new Date();
+        entity.setUpdateTime(now);
         if (baseMapper.updateById(entity) > 0) {
             return Result.ok("淇敼鎴愬姛");
         }
@@ -83,7 +97,7 @@
      * @return
      */
     @Override
-    public Result remove(List<String> ids) {
+    public Result remove(List<Long> ids) {
         if(baseMapper.deleteBatchIds(ids) > 0) {
             return Result.ok("鍒犻櫎鎴愬姛");
         }
@@ -96,7 +110,7 @@
      * @return
      */
     @Override
-    public Result removeById(String id) {
+    public Result removeById(Long id) {
         if(baseMapper.deleteById(id) > 0) {
             return Result.ok("鍒犻櫎鎴愬姛");
         }
@@ -111,7 +125,15 @@
     @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)) {
+                item.setCanPublish(Boolean.FALSE);
+            } else {
+                item.setCanPublish(Boolean.TRUE);
+            }
+        });
         return Result.ok().data(page.getRecords()).total(page.getTotal());
     }
 
@@ -121,14 +143,17 @@
      * @return
      */
     @Override
-    public Result detail(String id) {
-        CalculateReport entity = baseMapper.selectById(id);
-        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
-        CalculateReportVO vo = CalculateReportVO.getVoByEntity(entity, null);
+    public Result detail(Long id) {
         // 鏄庣粏鍒楄〃
-        List<CalculateRecordVO> recordList = calculateRecordMapper.getByContractId(entity.getContractId());
-        vo.setRecordList(recordList);
-        return Result.ok().data(vo);
+        CalculateReportDetailVO detail = baseMapper.getById(id);
+        if (Objects.nonNull(detail) && ! CollectionUtils.isEmpty(detail.getRecordList())) {
+            if (CalculateReportStatusEnum.NOT_PUBLISH.equals(detail.getStatus())) {
+                detail.getRecordList().get(0).setLatest(Boolean.TRUE);
+            } else {
+                detail.getRecordList().get(0).setLatest(Boolean.FALSE);
+            }
+        }
+        return Result.ok().data(detail);
     }
 
     /**
@@ -139,9 +164,7 @@
     public Result all() {
         List<CalculateReport> entities = baseMapper.selectList(null);
         List<CalculateReportVO> vos = entities.stream()
-                .map(
-                        entity -> CalculateReportVO.getVoByEntity(entity, null)
-                )
+                .map(entity -> CalculateReportVO.getVoByEntity(entity, null))
                 .collect(Collectors.toList());
         return Result.ok().data(vos);
     }
@@ -153,18 +176,62 @@
         if (Objects.isNull(report)) {
             throw new RuntimeException("璇ユ牳绠楁姤鍛婁笉瀛樺湪");
         }
-        // 绱姞寰楀埌鎵f鎬婚
-        BigDecimal totalDeduct = form.getRecordList().stream()
-                .map(CalculateReportBackfillForm.RecordForm::getDeductMoney)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        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);
-        form.getRecordList().stream().forEach(item -> {
-            new LambdaUpdateChainWrapper<>(calculateRecordMapper)
-                    .eq(CalculateRecord::getId, item.getId())
-                    .set(CalculateRecord::getDeductMoney, item.getDeductMoney())
-                    .update();
-        });
+
+        beforeRecord.setDeductMoney(latestRecord.getDeductMoney());
+        calculateRecordMapper.updateById(beforeRecord);
         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);
+        return Result.ok("鎿嶄綔鎴愬姛");
+    }
+
+    @Override
+    @SneakyThrows
+    public void export(Integer contractId, HttpServletResponse response) {
+        // 鑾峰彇鏁版嵁
+        List<CalculateExport> list = baseMapper.exportData(contractId);
+        CalculateExport calculateExport = new CalculateExport();
+        calculateExport.setRuleName("鍚堣");
+        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");
+        // 澧炲姞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