zxl
昨天 3b0516a2959e25576e4f3fda697a3b025d06c8c9
ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java
@@ -4,6 +4,7 @@
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.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -33,14 +34,13 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -85,9 +85,9 @@
        setTemplateRule(list,null,"设备平均在线率","90%≤设备平均在线率<95%",94D,90D,RuleDeductCategoryEnum.DEDUCT_POINTS,10.00);
        setTemplateRule(list,null,"设备平均在线率","<90%",89D,null,RuleDeductCategoryEnum.DEDUCT_POINTS,20.00);
        setTemplateRule(list,2,"前端感知源治理工作","时钟同步",24D,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
        setTemplateRule(list,null,"前端感知源治理工作","OSD标识",24D,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
        setTemplateRule(list,null,"前端感知源治理工作","一机一档",24D,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
        setTemplateRule(list,2,"前端感知源治理工作","时钟同步",null,25D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
        setTemplateRule(list,null,"前端感知源治理工作","OSD标识",null,25D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
        setTemplateRule(list,null,"前端感知源治理工作","一机一档",null,25D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
        setTemplateRule(list,3,"对于前端点位异常情况的处理","镜头故障或污染或树枝遮挡或枪机视角偏移正常角度或补光灯应亮未亮,24小时后未修复的",48D,25D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.5);
        setTemplateRule(list,null,"对于前端点位异常情况的处理","镜头故障或污染或树枝遮挡或枪机视角偏移正常角度或补光灯应亮未亮,48小时后未修复的",null,49D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,1.0);
@@ -155,6 +155,59 @@
        calculateMoneyRuleService.saveBatch(JSON.parseArray(tContract.getRuleList(), CalculateMoneyRule.class).stream().peek(
                calculateMoneyRule -> calculateMoneyRule.setContractId(tContract.getId().intValue())
        ).collect(Collectors.toList()));
        return AjaxResult.success("操作成功");
    }
    @Override
    public AjaxResult importRule(MultipartFile file, TContract tContract) throws IOException {
        // 获取合同Excel规则
        List<CalculateRule> list = new ArrayList<>();
        if(file!=null) {
            EasyExcel.read(file.getInputStream(), CalculateRule.class, new PageReadListener<CalculateRule>(list::addAll)).sheet().doRead();
            // 遍历父子关系
            List<CalculateRule> calculateRulesToSave = new ArrayList<>();
            for (CalculateRule calculateRule : list) {
                // 判断数据完整性
                if (ObjectUtils.isEmpty(calculateRule.getDeductCategory())) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return AjaxResult.warn("请选择" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "扣分方式");
                }
                if (RuleDeductCategoryEnum.MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY.equals(calculateRule.getDeductCategory()) && ObjectUtils.isEmpty(calculateRule.getCalcUnit())) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return AjaxResult.warn("请填写" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "除以数量");
                }
                if (ObjectUtils.isEmpty(calculateRule.getCalcFraction())) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return AjaxResult.warn("请填写" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "扣分数值");
                }
                // 保存规则
                if (StringUtils.isNotBlank(calculateRule.getRuleName())) {
                    calculateRule.setContractId(tContract.getId().intValue());
                    calculateRule.setCreateTime(DateUtils.getNowDate());
                    calculateRule.setUpdateTime(DateUtils.getNowDate());
                    calculateRulesToSave.add(calculateRule);
                }
            }
            if (!CollectionUtils.isEmpty(calculateRulesToSave)) {
                //删除原规则
                calculateRuleService.remove(new QueryWrapper<CalculateRule>().eq("contract_id", tContract.getId()));
                // 批量保存规则
                calculateRuleService.saveBatch(calculateRulesToSave);
            }
        }
        List<CalculateMoneyRule> moneyRule = JSON.parseArray(tContract.getRuleList(), CalculateMoneyRule.class).stream().peek(
                calculateMoneyRule -> calculateMoneyRule.setContractId(tContract.getId().intValue())
        ).collect(Collectors.toList());
        if (!CollectionUtils.isEmpty(moneyRule)) {
            //删除原规则
            calculateMoneyRuleService.remove(new QueryWrapper<CalculateMoneyRule>().eq("contract_id",tContract.getId()));
            //批量保存考核结果应用规则
            calculateMoneyRuleService.saveBatch(moneyRule);
        }
        return AjaxResult.success("操作成功");
    }