• 若依前后端不分离-表单中某一列是其他几列计算的结果


    1.示例

    在这里插入图片描述

    2.实现:

    (1)首先在.xml文件中新建查询:
    记住这个selectForSum

    
        <!--    自定义查询-为了计算列表中的合计-->
        <select id="selectForSum" parameterType="ConditionDeploymentUnit" resultMap="ConditionDeploymentUnitResult">
            <include refid="selectConditionDeploymentUnitVo"/>
            <where>
                <if test="rounds != null "> and rounds = #{rounds}</if>
                ...
                <if test="isDelete != null "> and is_delete = #{isDelete}</if>
            </where>
        </select>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (2)在service接口中配置这个方法:

    public void selectForSum();
    
    • 1

    在service中写入方法实现:

    @Override
        public void selectForSum(){
            List<ConditionDeploymentUnit> forSum = conditionDeploymentUnitMapper.selectForSum();
            for (int i = 0; i < forSum.size(); i++) {
    //            计算合计数量
                Long SummaryClueNum = forSum.get(i).getNumChujiClue()+forSum.get(i).getNumKejiClue()+forSum.get(i).getNumKejiyixiaClue();
                forSum.get(i).setSumClue(SummaryClueNum);
                //将数据更新到数据库
                conditionDeploymentUnitMapper.updateConditionDeploymentUnit(forSum.get(i));
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (3)在controller的list方法中写入这个方法,即可在列表更新的时候调用,计算,存入数据库,然后从数据库中查询出来
    在这里插入图片描述
    (4)在编辑或者插入数据时,因为是插入一行的数据,所以如果重新计算整个列表的话,会浪费资源延迟时间,所以可以只计算增加或者编辑的那一列
    将实现类中的方法更改为如下所示,通过传入id查到需要更改的对象,同时接口的方法和在controller中调用也需要更改。

    public void selectForSumbyid(int i) {
            ConditionDeploymentUnit forSum = conditionDeploymentUnitMapper.selectConditionDeploymentUnitById(i);
    //            计算合计数量
            Long SummaryClueNum = forSum.getNumChujiClue()+forSum.getNumKejiClue()+forSum.getNumKejiyixiaClue();
            forSum.setSumClue(SummaryClueNum);
            conditionDeploymentUnitMapper.updateConditionDeploymentUnit(forSum);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    接口的方法:

    public void selectForSumbyid(int i);
    
    • 1

    调用之前,需要先查到id

    				int i=conditionDeploymentUnit.getId();
             conditionDeploymentUnitService.selectForSumbyid(i);
    
    • 1
    • 2

    3.特殊情况,如果计算出来需要用百分比的形式展示的话,需要进行处理:

    (1)在实现类中计算的时候需要考虑被除数为0的情况,
    例:整改落实率=已经整改的个数getNumAlreadyUnit / 计划整改的个数SummaryFourLuoshi
    如果计划整改数为0的话,直接让整改率赋值为1
    **注意:**需要用浮点数,因为用int格式的话计算不会出现小数点
    (2)如果需要保存小数点后两位小数的话,比如99.99%,需要利用Math.round(rateCover * 10000) * 0.0001d;保留小数点后4位小数。

    //            计算问题整改落实率
                double rateCover2 = 0;
                if(SummaryFourLuoshi!=0){
                    double rateCover = (double)forSum.get(i).getNumAlreadyUnit()/(double)SummaryFourLuoshi;
                    rateCover2 = Math.round(rateCover * 10000) * 0.0001d;
                }else{
                    rateCover2=1;
                }
                forSum.get(i).setRateWholeCover(rateCover2);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    (3)在计算数据保存至数据库后,在前端读取到的是小数点后4位的小数,比如0.9999,此时要转换成99.99%
    需要在前端页面*100,并且加上’%',只需要在字段下面加上如下function
    在这里插入图片描述

  • 相关阅读:
    2023CRM排行:深度对比16款CRM
    Json Schema高性能.net实现库 LateApexEarlySpeed.Json.Schema - 直接从code生成json schema validator
    SpringBoot实现自定义environment中的value加密
    游戏出海欧洲有哪些可以接入的支付渠道
    雷电模拟器谷歌套件安装的时候总是卡着转圈圈
    Spring学习篇(四)
    【Spring】Spring AOP入门及实现原理剖析
    Linxu学习——上
    进度条实现源代码
    ubuntu 20.04 LTS 安装 GitLab
  • 原文地址:https://blog.csdn.net/weixin_43899452/article/details/125993096