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 | 187 ++++++++++++++++++++++++++++++++++------------ 1 files changed, 139 insertions(+), 48 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..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,35 +1,50 @@ 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.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.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.entity.SysRole; +import com.ycl.system.entity.SysUser; 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 enumeration.general.PublishType; +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.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; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; -import lombok.RequiredArgsConstructor; /** * 鏍哥畻鎶ュ憡 鏈嶅姟瀹炵幇绫� @@ -41,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; /** @@ -52,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("娣诲姞鎴愬姛"); } @@ -67,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("淇敼鎴愬姛"); } @@ -83,7 +102,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 +115,7 @@ * @return */ @Override - public Result removeById(String id) { + public Result removeById(Long id) { if(baseMapper.deleteById(id) > 0) { return Result.ok("鍒犻櫎鎴愬姛"); } @@ -111,26 +130,46 @@ @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)) { + item.setCanPublish(Boolean.FALSE); + } else { + item.setCanPublish(Boolean.TRUE); + } + }); return Result.ok().data(page.getRecords()).total(page.getTotal()); } /** * 鏍规嵁id鏌ユ壘 - * @param id + * @param * @return */ @Override - public Result detail(String id) { - CalculateReport entity = baseMapper.selectById(id); - Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); - CalculateReportVO vo = CalculateReportVO.getVoByEntity(entity, null); + public Result detail(CalculateReportQuery query) { + roleControl(query); // 鏄庣粏鍒楄〃 - List<CalculateRecordVO> recordList = calculateRecordMapper.getByContractId(entity.getContractId()); - vo.setRecordList(recordList); - return Result.ok().data(vo); + 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 @@ -139,9 +178,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); } @@ -149,22 +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("璇ユ牳绠楁姤鍛婁笉瀛樺湪"); - } - // 绱姞寰楀埌鎵f鎬婚 - BigDecimal totalDeduct = form.getRecordList().stream() - .map(CalculateReportBackfillForm.RecordForm::getDeductMoney) - .reduce(BigDecimal.ZERO, BigDecimal::add); - 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(); - }); +// 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(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 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"); + // 澧炲姞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