龚焕茏
2024-07-26 b20931da45368031ec19e37816b6879bdcba528e
feat:合同导入
5个文件已修改
125 ■■■■ 已修改文件
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRule.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/handler/CustomCellWriteHandler.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/ICalculateRuleService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateRuleServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRule.java
@@ -7,12 +7,10 @@
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ycl.system.domain.TreeNode;
import enumeration.converter.RuleDeductCategoryConverter;
import enumeration.general.RuleDeductCategoryEnum;
import lombok.Data;
import java.io.Serial;
import java.util.Date;
/**
@@ -25,10 +23,12 @@
@ExcelIgnoreUnannotated
@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
@TableName("t_calculate_rule")
public class CalculateRule extends TreeNode {
public class CalculateRule {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    private Integer id;
    /**
     * 合同id
@@ -40,11 +40,6 @@
     */
    @ExcelProperty("考核内容")
    private String ruleName;
    /**
     * 关联上级id
     */
    private Long parentId;
    /**
     * 规则条件
ycl-server/src/main/java/com/ycl/handler/CustomCellWriteHandler.java
@@ -197,7 +197,7 @@
    private static List<CalculateRule> getExcelData() {
        ArrayList<CalculateRule> list = new ArrayList<>();
        CalculateRule calculateRule1 = new CalculateRule();
        calculateRule1.setId(1L);
        calculateRule1.setId(1);
        calculateRule1.setRuleName("视频平均在线率");
        calculateRule1.setRuleCondition("≥98%");
        calculateRule1.setMax(98D);
@@ -228,7 +228,7 @@
        calculateRule33.setCalcFraction(10.00);
        list.add(calculateRule33);
        CalculateRule calculateRule4 = new CalculateRule();
        calculateRule4.setId(2L);
        calculateRule4.setId(2);
        calculateRule4.setRuleName("前端感知源治理工作");
        calculateRule4.setRuleCondition("时钟同步(超过±3秒为不合格)");
        calculateRule4.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY);
@@ -243,7 +243,7 @@
        calculateRule6.setRuleCondition("一机一档");
        list.add(calculateRule6);
        CalculateRule calculateRule5 = new CalculateRule();
        calculateRule5.setId(3L);
        calculateRule5.setId(3);
        calculateRule5.setRuleName("后台系统的保障");
        calculateRule5.setRuleCondition("单次故障时长若超出72小时不足144小时的,每超出12小时(不足12小时按12小时计)");
        calculateRule5.setMax(144D);
ycl-server/src/main/java/com/ycl/platform/service/ICalculateRuleService.java
@@ -2,9 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ycl.platform.domain.entity.CalculateRule;
import com.ycl.platform.domain.entity.TContract;
import com.ycl.platform.domain.vo.CalculateRuleCascaderVO;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@@ -62,13 +60,6 @@
     * @return 结果
     */
    public int deleteDefaultRuleById(Long id);
    /**
     * 读取Excel数据
     *
     * @param file      文件
     */
    List<CalculateRule> readExcel(MultipartFile file);
    /**
     * 根据合同id查询规则
ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateRuleServiceImpl.java
@@ -1,12 +1,8 @@
package com.ycl.platform.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.platform.domain.entity.CalculateRule;
import com.ycl.platform.domain.entity.TContract;
import com.ycl.platform.domain.vo.CalculateRuleCascaderVO;
import com.ycl.platform.mapper.CalculateRuleMapper;
import com.ycl.platform.mapper.TContractMapper;
@@ -14,11 +10,8 @@
import com.ycl.system.domain.TreeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import utils.DateUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
@@ -102,44 +95,11 @@
        return calculateRuleMapper.deleteDefaultRuleById(id);
    }
    /**
     * 获取合同Excel规则
     *
     * @param file 合同Excel文件
     * @return 规则
     */
    @Override
    public List<CalculateRule> readExcel(MultipartFile file) {
        List<CalculateRule> calculateRuleList = new ArrayList<>();
        try {
            EasyExcel.read(file.getInputStream(), CalculateRule.class, new ReadListener<CalculateRule>() {
                        @Override
                        public void invoke(CalculateRule calculateRule, AnalysisContext analysisContext) {
                            calculateRule.setId(null);
                            calculateRuleList.add(calculateRule);
                        }
                        @Override
                        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                        }
                    })
                    .head(CalculateRule.class)
                    .sheet()
                    .doRead();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return calculateRuleList;
    }
    @Override
    public List<CalculateRule> getRuleListByContractId(Integer contractId) {
        List<CalculateRule> list = new LambdaQueryChainWrapper<>(calculateRuleMapper)
        return new LambdaQueryChainWrapper<>(calculateRuleMapper)
                .eq(CalculateRule::getContractId, contractId)
                .list();
        return TreeUtils.build(list, 0L);
    }
    @Override
ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java
@@ -1,6 +1,7 @@
package com.ycl.platform.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -26,6 +27,7 @@
import enumeration.general.RuleDeductCategoryEnum;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -78,7 +80,7 @@
    private List<CalculateRule> getExcelData() {
        ArrayList<CalculateRule> list = new ArrayList<>();
        CalculateRule calculateRule1 = new CalculateRule();
        calculateRule1.setId(1L);
        calculateRule1.setId(1);
        calculateRule1.setRuleName("视频平均在线率");
        calculateRule1.setRuleCondition("≥98%");
        calculateRule1.setMax(98D);
@@ -109,7 +111,7 @@
        calculateRule33.setCalcFraction(10.00);
        list.add(calculateRule33);
        CalculateRule calculateRule4 = new CalculateRule();
        calculateRule4.setId(2L);
        calculateRule4.setId(2);
        calculateRule4.setRuleName("前端感知源治理工作");
        calculateRule4.setRuleCondition("时钟同步(超过±3秒为不合格)");
        calculateRule4.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY);
@@ -118,13 +120,17 @@
        CalculateRule calculateRule7 = new CalculateRule();
        calculateRule7.setRuleName("前端感知源治理工作");
        calculateRule7.setRuleCondition("OSD标识");
        calculateRule7.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY);
        calculateRule7.setCalcFraction(0.1);
        list.add(calculateRule7);
        CalculateRule calculateRule6 = new CalculateRule();
        calculateRule6.setRuleName("前端感知源治理工作");
        calculateRule6.setRuleCondition("一机一档");
        calculateRule6.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY);
        calculateRule6.setCalcFraction(0.1);
        list.add(calculateRule6);
        CalculateRule calculateRule5 = new CalculateRule();
        calculateRule5.setId(3L);
        calculateRule5.setId(3);
        calculateRule5.setRuleName("后台系统的保障");
        calculateRule5.setRuleCondition("单次故障时长若超出72小时不足144小时的,每超出12小时(不足12小时按12小时计)");
        calculateRule5.setMax(144D);
@@ -138,17 +144,18 @@
    @Override
    @Transactional
    @SneakyThrows
    public AjaxResult importData(MultipartFile file, TContract tContract) {
        // 保存合同
        tContract.setCreateTime(DateUtils.getNowDate());
        save(tContract);
        List<CalculateRule> list = calculateRuleService.readExcel(file);
        // 获取合同Excel规则
        List<CalculateRule> list = new ArrayList<>();
        EasyExcel.read(file.getInputStream(), CalculateRule.class, new PageReadListener<CalculateRule>(list::addAll)).sheet().doRead();
        // 遍历父子关系
        List<CalculateRule> calculateRulesToSave = new ArrayList<>();
        CalculateRule fu1 = new CalculateRule();
        CalculateRule fu2 = new CalculateRule();
        boolean fuNew = true;
        for (CalculateRule calculateRule : list) {
            // 判断数据完整性
            if (ObjectUtils.isEmpty(calculateRule.getDeductCategory())) {
@@ -163,35 +170,13 @@
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return AjaxResult.warn("请填写" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "扣分数值");
            }
            // 保存父规则获取父id
            // 保存规则
            if (StringUtils.isNotBlank(calculateRule.getRuleName())) {
                CalculateRule one = new CalculateRule();
                one.setParentId(0L);
                one.setContractId(tContract.getId().intValue());
                one.setRuleName(calculateRule.getRuleName());
                one.setCreateTime(DateUtils.getNowDate());
                one.setDeleted(0);
                calculateRuleService.save(one);
                fu1 = one;
                fuNew = true;
                calculateRule.setContractId(tContract.getId().intValue());
                calculateRule.setCreateTime(DateUtils.getNowDate());
                calculateRule.setUpdateTime(DateUtils.getNowDate());
                calculateRulesToSave.add(calculateRule);
            }
            // 保存第二层父规则获取第二层父id
            // if (StringUtils.isNotBlank(calculateRule.getRuleDesc())) {
            //     CalculateRule two = new CalculateRule();
            //     two.setContractId(tContract.getId().intValue());
            //     two.setParentId(fu1.getId());
            //     two.setRuleDesc(calculateRule.getRuleDesc());
            //     two.setCreateTime(DateUtils.getNowDate());
            //     two.setDeleted(0);
            //     calculateRuleService.save(two);
            //     fu2 = two;
            //     fuNew = false;
            // }
            calculateRule.setContractId(tContract.getId().intValue());
            calculateRule.setCreateTime(DateUtils.getNowDate());
            calculateRule.setDeleted(0);
            calculateRule.setParentId(fuNew ? fu1.getId() : fu2.getId());
            calculateRulesToSave.add(calculateRule);
        }
        // 批量保存规则
        calculateRuleService.saveBatch(calculateRulesToSave);