From d68c61517a3a6d4ec4d47844c21bdc143f99cbab Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期三, 17 四月 2024 22:58:05 +0800 Subject: [PATCH] 大屏接口 --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java | 178 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 177 insertions(+), 1 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java index 87624d8..485f241 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java @@ -1,10 +1,31 @@ package com.ruoyi.system.service.impl; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.enums.DataScreenConfigEnum; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.BeanUtils; +import com.ruoyi.common.utils.CalculateUtil; +import com.ruoyi.common.utils.Checker; +import com.ruoyi.common.utils.CollUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.TbDataScreenConfig; +import com.ruoyi.system.dto.CalculateItemDTO; +import com.ruoyi.system.dto.update.DataIndicatorsUpdDTO; +import com.ruoyi.system.dto.update.FormalIndicatorsUpdDTO; +import com.ruoyi.system.dto.update.RiskLevelUpdDTO; import com.ruoyi.system.mapper.TbDataScreenConfigMapper; import com.ruoyi.system.service.TbDataScreenConfigService; +import com.ruoyi.system.vo.DataScreenConfigVO; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import javax.validation.constraints.NotNull; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * <p> @@ -15,6 +36,161 @@ * @since 2024-03-13 */ @Service -public class TbDataScreenConfigServiceImpl extends ServiceImpl<TbDataScreenConfigMapper, TbDataScreenConfig> implements TbDataScreenConfigService { +public class TbDataScreenConfigServiceImpl extends + ServiceImpl<TbDataScreenConfigMapper, TbDataScreenConfig> implements + TbDataScreenConfigService { + @Override + public DataScreenConfigVO getRiskLevel() { + TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery() + .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.RISK_LEVEL) + .one(); + if (Objects.isNull(tbDataScreenConfig)) { + return new DataScreenConfigVO(); + } + DataScreenConfigVO vo = BeanUtils.copyBean(tbDataScreenConfig, + DataScreenConfigVO.class); + List<CalculateItemDTO> scoreCalculateList = JSONArray.parseArray( + tbDataScreenConfig.getCalculateFormula(), + CalculateItemDTO.class); + vo.setScoreCalculateList(scoreCalculateList); + return vo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public DataScreenConfigVO editRiskLevel(RiskLevelUpdDTO dto) { + /* if (dto.areRiskLevelsDistinct()) { + throw new ServiceException("得分范围不能重叠"); + }*/ + //查询是否有该指标配置 + TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery() + .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.RISK_LEVEL) + .oneOpt().orElseGet(() -> BeanUtils.copyBean(dto, + TbDataScreenConfig.class)); + List<CalculateItemDTO> calculateItemList = dto.getCalculateItemList(); + validateCalculateItemList(calculateItemList); + String numberCalculateFormulaJsonStr = JSON.toJSONString(calculateItemList); + tbDataScreenConfig.setCalculateFormula(numberCalculateFormulaJsonStr); + tbDataScreenConfig.setType(DataScreenConfigEnum.RISK_LEVEL); + this.saveOrUpdate(tbDataScreenConfig); + DataScreenConfigVO dataScreenConfigVO = BeanUtils.copyBean(tbDataScreenConfig, + DataScreenConfigVO.class); + dataScreenConfigVO.setRateCalculateList(calculateItemList); + return dataScreenConfigVO; + } + + private void validateCalculateItemList(List<CalculateItemDTO> calculateItemList) { + if (CollUtils.isEmpty(calculateItemList)) { + throw new ServiceException("计算公式不能为空"); + } + CollUtils.check(calculateItemList, new Checker<CalculateItemDTO>() { + @Override + public void check(CalculateItemDTO data) { + if (Objects.isNull(data.getValueType())) { + throw new ServiceException("基础数据配置计算规则值类型不能为空"); + } + if (StringUtils.isBlank(data.getContent())) { + throw new ServiceException("基础数据配置计算规则值内容不能为空"); + } + } + }); + boolean result = hasConsecutiveDuplicates(calculateItemList); + if (result) { + throw new ServiceException("计算表达式有误,请修改"); + } + //参数校验 + String numberCalculateFormulaStr = calculateItemList.stream() + .map(CalculateItemDTO::getContent) + .collect(Collectors.joining()); + //校验表达式是否正确 + try { + CalculateUtil.calculate(numberCalculateFormulaStr); + } catch (Exception e) { + throw new ServiceException("计算表达式有误,请修改"); + } + } + + //表达式校验 + public boolean hasConsecutiveDuplicates(List<CalculateItemDTO> calculateItemList) { + return IntStream.range(1, calculateItemList.size()) + .anyMatch(i -> calculateItemList.get(i - 1).getValueType() + .equals(calculateItemList.get(i).getValueType())); + } + + @Override + public List<DataScreenConfigVO> getIndicatorsConfig(@NotNull DataScreenConfigEnum type) { + List<TbDataScreenConfig> list = this.lambdaQuery() + .eq(TbDataScreenConfig::getType, type).list(); + return list.stream().map(item -> { + DataScreenConfigVO vo = BeanUtils.copyBean(item, + DataScreenConfigVO.class); + List<CalculateItemDTO> scoreCalculateList = JSONArray.parseArray( + item.getCalculateFormula(), + CalculateItemDTO.class); + vo.setScoreCalculateList(scoreCalculateList); + List<CalculateItemDTO> rateCalculateList = JSONArray.parseArray( + item.getCalculateRateFormula(), + CalculateItemDTO.class); + vo.setRateCalculateList(rateCalculateList); + return vo; + }).collect(Collectors.toList()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public List<DataScreenConfigVO> editDataIndicatorsConfig(List<DataIndicatorsUpdDTO> dtoList) { + List<DataScreenConfigVO> vosList = new ArrayList<>(); + for (DataIndicatorsUpdDTO dto : dtoList) { + //查询是否有该指标配置 + TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery() + .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.DATA_INDICATORS) + .eq(TbDataScreenConfig::getSubType, + dto.getSubType()).oneOpt().orElseGet(() -> BeanUtils.copyBean(dto, + TbDataScreenConfig.class)); + List<CalculateItemDTO> scoreCalculateList = dto.getScoreCalculateList(); + List<CalculateItemDTO> rateCalculateList = dto.getRateCalculateList(); + validateCalculateItemList(scoreCalculateList); + validateCalculateItemList(rateCalculateList); + String scoreCalculateFormulaJsonStr = JSON.toJSONString(scoreCalculateList); + tbDataScreenConfig.setCalculateFormula(scoreCalculateFormulaJsonStr); + String rateCalculateFormulaJsonStr = JSON.toJSONString(rateCalculateList); + tbDataScreenConfig.setCalculateRateFormula(rateCalculateFormulaJsonStr); + tbDataScreenConfig.setType(DataScreenConfigEnum.DATA_INDICATORS); + this.saveOrUpdate(tbDataScreenConfig); + DataScreenConfigVO dataScreenConfigVO = BeanUtils.copyBean(tbDataScreenConfig, + DataScreenConfigVO.class); + dataScreenConfigVO.setScoreCalculateList(scoreCalculateList); + dataScreenConfigVO.setRateCalculateList(rateCalculateList); + vosList.add(dataScreenConfigVO); + } + return vosList; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public List<DataScreenConfigVO> editFormalIndicatorsConfig( + List<FormalIndicatorsUpdDTO> dtoList) { + List<DataScreenConfigVO> vosList = new ArrayList<>(); + for (FormalIndicatorsUpdDTO dto : dtoList) { + //查询是否有该指标配置 + TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery() + .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.FORMAL_INDICATORS) + .eq(TbDataScreenConfig::getSubType, + dto.getSubType()).oneOpt().orElseGet(() -> BeanUtils.copyBean(dto, + TbDataScreenConfig.class)); + tbDataScreenConfig.setType(DataScreenConfigEnum.FORMAL_INDICATORS); + tbDataScreenConfig.setMaxScore(dto.getMaxScore()); + List<CalculateItemDTO> calculateItemList = dto.getCalculateItemList(); + validateCalculateItemList(calculateItemList); + String calculateFormulaJsonStr = JSON.toJSONString(calculateItemList); + tbDataScreenConfig.setCalculateFormula(calculateFormulaJsonStr); + this.saveOrUpdate(tbDataScreenConfig); + DataScreenConfigVO dataScreenConfigVO = BeanUtils.copyBean(tbDataScreenConfig, + DataScreenConfigVO.class); + dataScreenConfigVO.setScoreCalculateList(calculateItemList); + vosList.add(dataScreenConfigVO); + } + return vosList; + } } -- Gitblit v1.7.1