From 0d243e7f5dc593cdc6e0608bb52cd635f8fc6982 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期五, 19 九月 2025 11:59:44 +0800
Subject: [PATCH] 新需求
---
ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java | 143 ++++++++++++++++++++++++++++++++---------------
1 files changed, 97 insertions(+), 46 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 cd1fed3..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
@@ -1,22 +1,33 @@
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;
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;
@@ -27,8 +38,10 @@
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;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -43,7 +56,7 @@
@RequiredArgsConstructor
public class CalculateReportServiceImpl extends ServiceImpl<CalculateReportMapper, CalculateReport> implements CalculateReportService {
- private final CalculateReportMapper calculateReportMapper;
+ private final ICalculateRuleService calculateRuleService;
private final CalculateRecordMapper calculateRecordMapper;
/**
@@ -54,6 +67,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("娣诲姞鎴愬姛");
}
@@ -69,10 +85,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("淇敼鎴愬姛");
}
@@ -113,6 +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)) {
@@ -126,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
@@ -159,52 +186,76 @@
@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(whichYear,whichMonth,whichDay,contractId);
+ CalculateExport calculateExport = new CalculateExport();
+ calculateExport.setRuleName("鍚堣");
+ calculateExport.setNum(list.stream().mapToInt(CalculateExport::getNum).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));
+ // 杈撳嚭鏂囦欢
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));
+ // 澧炲姞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