From f77a9d8f16bae6b4cf809891f037c038070e81ed Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 19 六月 2025 17:12:50 +0800
Subject: [PATCH] 工单,数据中心用户查看数据的权限,合同考核每日,以及导出每日和按月

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java |  110 +++++++++++++++++++++++++++++++++---------------------
 1 files changed, 67 insertions(+), 43 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 10c8a12..9202248 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
@@ -16,14 +16,18 @@
 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.domain.vo.ContractResultVO;
 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.entity.SysRole;
+import com.ycl.system.entity.SysUser;
 import com.ycl.system.page.PageUtil;
 import com.ycl.utils.SecurityUtils;
 import enumeration.general.CalculateReportStatusEnum;
+import enumeration.general.PublishType;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
@@ -34,6 +38,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.Date;
@@ -125,7 +130,10 @@
     @Override
     public Result page(CalculateReportQuery query) {
         IPage<CalculateReportVO> page = PageUtil.getPage(query, CalculateReportVO.class);
+        //鍙兘鐪嬭嚜宸卞崟浣�
         query.setUnitId(SecurityUtils.getUnitId());
+        //鍙兘鐪嬪凡鍙戝竷
+        roleControl(query);
         baseMapper.page(query, page);
         page.getRecords().stream().forEach(item -> {
             if (Objects.isNull(item)) {
@@ -139,23 +147,29 @@
 
     /**
      * 鏍规嵁id鏌ユ壘
-     * @param id
+     * @param
      * @return
      */
     @Override
-    public Result detail(Long id) {
+    public Result detail(CalculateReportQuery query) {
+        roleControl(query);
         // 鏄庣粏鍒楄〃
-        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);
-            }
-        }
+        CalculateReportDetailVO detail = baseMapper.getById(query);
         return Result.ok().data(detail);
     }
 
+    private void roleControl(CalculateReportQuery query) {
+        List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles();
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        if (!user.isAdmin()) {
+            for (SysRole role : roles) {
+                //鑿滃崟鐨勫湴鏂瑰鍔犱簡涓�涓寜閽紝瑙掕壊鏉冮檺缂栬緫濡傛灉鍕句笂浜嗚鏄庡彧鑳芥煡鐪嬪凡鍙戝竷
+                if (role.getPermissions().contains("check:contract:role:publish")) {
+                    query.setStatus(PublishType.PUBLISHED.getCode());
+                }
+            }
+        }
+    }
     /**
      * 鍒楄〃
      * @return
@@ -172,53 +186,63 @@
     @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("鎿嶄綔鎴愬姛");
     }
 
     @Override
     @SneakyThrows
-    public void export(Integer contractId, HttpServletResponse response) {
+    public void export(Integer whichYear,Integer whichMonth,Integer whichDay,Integer contractId, HttpServletResponse response) {
         // 鑾峰彇鏁版嵁
-        List<CalculateExport> list = baseMapper.exportData(contractId);
+        List<CalculateExport> list = baseMapper.exportData(whichYear,whichMonth,whichDay,contractId);
         CalculateExport calculateExport = new CalculateExport();
         calculateExport.setRuleName("鍚堣");
         calculateExport.setNum(list.stream().mapToInt(CalculateExport::getNum).sum());
-        calculateExport.setScore(100 + list.stream().mapToInt(CalculateExport::getScore).sum());
+
+        calculateExport.setScore(list.stream()
+                .map(CalculateExport::getScore)
+                .reduce(BigDecimal.ZERO, BigDecimal::add) // 璁$畻鎬诲拰
+                .add(BigDecimal.valueOf(100)) // 鍔犱笂100
+                .setScale(1, RoundingMode.HALF_UP));
         list.add(calculateExport);
+        list.forEach(item->{
+            if("纭繚褰曞儚瀹屾暣涓嶅畾鏈熷鎵�鏈夌偣浣嶅綍鍍忓畬鏁存�ф娊鏌�".equals(item.getRuleName())){
+                item.setNum(item.getScore().abs().divide(item.getCalcFraction(),0,RoundingMode.HALF_UP).intValue());
+            }
+        });
         // 鑾峰彇瑙勫垯
         List<CalculateRule> ruleList = calculateRuleService.list(new LambdaQueryWrapper<CalculateRule>().eq(CalculateRule::getContractId, contractId));
         // 杈撳嚭鏂囦欢

--
Gitblit v1.8.0