From d6703fa80d908abd36c235ca471e3d54f9acd006 Mon Sep 17 00:00:00 2001 From: gjh <1421wake> Date: Tue, 22 Apr 2025 17:25:30 +0800 Subject: [PATCH] =?UTF-8?q?1.=E7=BC=96=E8=BE=91=E8=80=83=E6=A0=B8=202?= =?UTF-8?q?=E6=88=90=E7=BB=A9=E6=9F=A5=E8=AF=A2=203.=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E8=80=83=E6=A0=B8=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/EvaluationInfoController.java | 17 +++ .../EvaluationTemplateController.java | 9 ++ .../platform/domain/bo/EvaluationInfoBo.java | 2 + .../platform/domain/dto/EvaluationDto.java | 11 ++ .../domain/dto/EvaluationTreeDto.java | 10 ++ .../service/IEvaluationInfoService.java | 5 + .../service/IEvaluationTemplateService.java | 7 ++ .../impl/EvaluationInfoServiceImpl.java | 47 ++++++++ .../impl/EvaluationTemplateServiceImpl.java | 100 +++++++++++++++++- 9 files changed, 204 insertions(+), 4 deletions(-) create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/EvaluationDto.java create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/EvaluationTreeDto.java diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/EvaluationInfoController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/EvaluationInfoController.java index a32057a..eff00bd 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/EvaluationInfoController.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/EvaluationInfoController.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.platform.domain.dto.EvaluationDto; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -45,6 +46,13 @@ public class EvaluationInfoController extends BaseController { return evaluationInfoService.queryPageList(bo, pageQuery); } + @SaCheckPermission("platform:evaluationInfo:listForScore") + @GetMapping("/listForScore") + public TableDataInfo listForScore(EvaluationInfoBo bo, PageQuery pageQuery) { + return evaluationInfoService.queryPageListForScore(bo, pageQuery); + } + + /** * 导出考核评分信息列表 */ @@ -102,4 +110,13 @@ public class EvaluationInfoController extends BaseController { @PathVariable String[] ids) { return toAjax(evaluationInfoService.deleteWithValidByIds(List.of(ids), true)); } + + + @SaCheckPermission("platform:evaluationInfo:addBySelect") + @RepeatSubmit() + @PostMapping("/addBySelect") + public R addBySelect(@Validated(AddGroup.class) @RequestBody EvaluationDto dto) { + evaluationInfoService.addBySelect(dto); + return R.ok("创建成功!"); + } } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/EvaluationTemplateController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/EvaluationTemplateController.java index 9d0706e..6f33fb5 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/EvaluationTemplateController.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/EvaluationTemplateController.java @@ -1,6 +1,7 @@ package org.dromara.platform.controller; import java.util.List; +import java.util.Map; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; @@ -126,4 +127,12 @@ public class EvaluationTemplateController extends BaseController { public R batchEdit(@Validated(EditGroup.class) @RequestBody List updateList) { return toAjax(evaluationTemplateService.batchEdit(updateList)); } + + + @SaCheckPermission("platform:evaluationTemplate:getTree") + @GetMapping("/getTree") + public R> getTree() { + Map rs = evaluationTemplateService.getTree(); + return R.ok(rs); + } } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/EvaluationInfoBo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/EvaluationInfoBo.java index ce7726d..1a0f207 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/EvaluationInfoBo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/EvaluationInfoBo.java @@ -9,6 +9,7 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; @@ -52,6 +53,7 @@ public class EvaluationInfoBo extends BaseEntity { */ //@NotBlank(message = "考核时间不能为空", groups = { AddGroup.class, EditGroup.class }) @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM") private Date checkTime; /** diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/EvaluationDto.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/EvaluationDto.java new file mode 100644 index 0000000..2a92e6c --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/EvaluationDto.java @@ -0,0 +1,11 @@ +package org.dromara.platform.domain.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class EvaluationDto { + private String flag; + private List checkList; +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/EvaluationTreeDto.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/EvaluationTreeDto.java new file mode 100644 index 0000000..5b5c9d6 --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/EvaluationTreeDto.java @@ -0,0 +1,10 @@ +package org.dromara.platform.domain.dto; + +import lombok.Data; + +@Data +public class EvaluationTreeDto { + private String id; + private String largeRating; + private String smallRating; +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IEvaluationInfoService.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IEvaluationInfoService.java index dcc71d2..fed5ca3 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IEvaluationInfoService.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IEvaluationInfoService.java @@ -1,5 +1,6 @@ package org.dromara.platform.service; +import org.dromara.platform.domain.dto.EvaluationDto; import org.dromara.platform.domain.vo.EvaluationInfoVo; import org.dromara.platform.domain.bo.EvaluationInfoBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -65,4 +66,8 @@ public interface IEvaluationInfoService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + void addBySelect(EvaluationDto dto); + + TableDataInfo queryPageListForScore(EvaluationInfoBo bo, PageQuery pageQuery); } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IEvaluationTemplateService.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IEvaluationTemplateService.java index 689d832..c46c7d9 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IEvaluationTemplateService.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IEvaluationTemplateService.java @@ -8,6 +8,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 考核评分信息-模板Service接口 @@ -76,4 +77,10 @@ public interface IEvaluationTemplateService { List queryByFlag(String flag); int batchEdit(List updateList); + + /** + * 获取树结构用于配置 + * @return + */ + Map getTree(); } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/EvaluationInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/EvaluationInfoServiceImpl.java index 04d5ed7..ce03b53 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/EvaluationInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/EvaluationInfoServiceImpl.java @@ -2,6 +2,7 @@ package org.dromara.platform.service.impl; import cn.hutool.core.bean.BeanUtil; import jakarta.annotation.Resource; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -11,6 +12,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.platform.domain.EvaluationTemplate; +import org.dromara.platform.domain.dto.EvaluationDto; +import org.dromara.platform.domain.vo.EvaluationTemplateVo; import org.dromara.platform.mapper.EvaluationTemplateMapper; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -21,6 +24,7 @@ import org.dromara.platform.mapper.EvaluationInfoMapper; import org.dromara.platform.service.IEvaluationInfoService; import java.util.*; +import java.util.stream.Collectors; /** * 考核评分信息Service业务层处理 @@ -162,4 +166,47 @@ public class EvaluationInfoServiceImpl implements IEvaluationInfoService { } return baseMapper.deleteByIds(ids) > 0; } + + @Override + public void addBySelect(EvaluationDto dto) { + String flag = dto.getFlag(); + List checkList = dto.getCheckList(); + checkList = checkList.stream() + .map(Long::parseLong) + .filter(id -> id <= 1000) + .map(String::valueOf) + .collect(Collectors.toList()); + List addList = new ArrayList<>(); + for (String id : checkList) { + EvaluationTemplate template = new EvaluationTemplate(); + EvaluationTemplateVo fromDb = evaluationTemplateMapper.selectVoById(id); + BeanUtils.copyProperties(fromDb, template,"id"); + template.setFlag(flag); + addList.add(template); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(EvaluationTemplate::getFlag, flag); + evaluationTemplateMapper.delete(queryWrapper); + evaluationTemplateMapper.insertBatch(addList); + } + + @Override + public TableDataInfo queryPageListForScore(EvaluationInfoBo bo, PageQuery pageQuery) { + if (bo.getCheckTime() == null || StringUtils.isBlank(bo.getCheckProject())){ + throw new ServiceException("请同时选中项目名称和考核时间!"); + //return TableDataInfo.build(new Page<>()); + } + LambdaQueryWrapper lqw = buildQueryWrapperForScore(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + + private LambdaQueryWrapper buildQueryWrapperForScore(EvaluationInfoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getCheckProject()), EvaluationInfo::getCheckProject, bo.getCheckProject()); + lqw.eq(bo.getCheckTime() != null, EvaluationInfo::getCheckTime, bo.getCheckTime()); + return lqw; + } } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/EvaluationTemplateServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/EvaluationTemplateServiceImpl.java index 2a05c22..450ee2d 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/EvaluationTemplateServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/EvaluationTemplateServiceImpl.java @@ -1,5 +1,9 @@ package org.dromara.platform.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.BatchResult; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -9,6 +13,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.platform.domain.EvaluationInfo; +import org.dromara.platform.domain.dto.EvaluationTreeDto; +import org.dromara.platform.mapper.EvaluationInfoMapper; +import org.dromara.platform.service.IEvaluationInfoService; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.dromara.platform.domain.bo.EvaluationTemplateBo; import org.dromara.platform.domain.vo.EvaluationTemplateVo; @@ -16,10 +25,7 @@ import org.dromara.platform.domain.EvaluationTemplate; import org.dromara.platform.mapper.EvaluationTemplateMapper; import org.dromara.platform.service.IEvaluationTemplateService; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; import java.util.stream.Collectors; /** @@ -30,9 +36,14 @@ import java.util.stream.Collectors; */ @RequiredArgsConstructor @Service +@Slf4j public class EvaluationTemplateServiceImpl implements IEvaluationTemplateService { private final EvaluationTemplateMapper baseMapper; + @Resource + private IEvaluationInfoService evaluationInfoService; + @Resource + private EvaluationInfoMapper evaluationInfoMapper; /** * 查询考核评分信息-模板 @@ -149,6 +160,7 @@ public class EvaluationTemplateServiceImpl implements IEvaluationTemplateService if (StringUtils.isNotBlank(flag)) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(EvaluationTemplate::getFlag, flag); + List evaluationTemplates = baseMapper.selectList(lqw); List sortedRecords = evaluationTemplates.stream() @@ -164,6 +176,86 @@ public class EvaluationTemplateServiceImpl implements IEvaluationTemplateService public int batchEdit(List updateList) { List batchResults = baseMapper.updateById(updateList); int size = batchResults.size(); + if (size>0) { + String flag = updateList.get(0).getFlag(); + // 定义变量用于累加总分和扣分 + double totalSumRating = 0; + double totalSubRating = 0; + for (EvaluationTemplate item : updateList) { + // 累加总分 + if (item.getSumRating() != null) { + totalSumRating += item.getSumRating(); + } + + // 累加扣分 + if (item.getSubRating() != null) { + totalSubRating += item.getSubRating(); + } + } + Double finalScore = totalSumRating - totalSubRating; + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(EvaluationInfo::getId, flag); + updateWrapper.set(EvaluationInfo::getCheckRating, finalScore); + int update = evaluationInfoMapper.update(null, updateWrapper); + if (update>0){ + log.info("批量修改成功,考核分数为{}",finalScore); + } + + } return size; } + + @Override + public Map getTree() { + // 1.封装数据 + List dtoList = new ArrayList<>(); + LambdaUpdateWrapper queryWrapper = new LambdaUpdateWrapper<>(); + queryWrapper.eq(EvaluationTemplate::getFlag, "模板1"); + List evaluationTemplates = baseMapper.selectList(queryWrapper); + for (EvaluationTemplate template : evaluationTemplates) { + EvaluationTreeDto evaluationTreeDto = new EvaluationTreeDto(); + BeanUtils.copyProperties(template, evaluationTreeDto); + dtoList.add(evaluationTreeDto); + } + if (CollectionUtil.isNotEmpty(dtoList)){ + return buildTreeWithUniqueId(dtoList); + } + return null; + } + + + private Map buildTreeWithUniqueId(List list) { + // 构建树状结构 + Map> treeMap = list.stream() + .collect(Collectors.groupingBy(EvaluationTreeDto::getLargeRating)); + + // 将树状结构转换为适合JSON传输的格式,并为每个 largeRating 分配唯一ID + List> result = new ArrayList<>(); + for (Map.Entry> entry : treeMap.entrySet()) { + Map node = new HashMap<>(); + String uniqueId = generateUniqueId();// 生成唯一ID + node.put("id", uniqueId); // 添加唯一ID + node.put("name", entry.getKey()); // largeRating 名称 + List> children = entry.getValue().stream() + .map(dto -> { + Map child = new HashMap<>(); + child.put("id", dto.getId()); + child.put("name", dto.getSmallRating()); + return child; + }).collect(Collectors.toList()); + node.put("children", children); + result.add(node); + } + + return Collections.singletonMap("tree", result); // 包装为单个根节点 + } + + private static final Random random = new Random(); + private String generateUniqueId() { + // 生成一个0到999之间的随机整数,并加上1000,确保结果在1000到1999之间 + + int uniqueIdInt = 1000 + random.nextInt(1000); + String uniqueId = Integer.toString(uniqueIdInt); + return uniqueId; + } }