pipIrr-web-temp模块中实现功能:修改一些取水口日取水量统计---因RTU一天内整点报中累计流量间歇出现0值,两次上报累计流量差值会产生大值
2个文件已修改
4个文件已添加
228 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/DateTime.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoTmp/ChangeMapper.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/Temp4ChangeMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/changeSome/ChSomeCtrl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/changeSome/ChSomeIntakeAmountSv.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-temp/说明.txt 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/DateTime.java
@@ -484,6 +484,12 @@
    /**
     * ä¸¤ä¸ªæ—¥æœŸç›¸å·®å¤©æ•°
     */
    public static long daysBetweenyyyy_MM_dd(Date yyyy_MM_dd_1 , Date yyyy_MM_dd_2)throws Exception{
        return ((((yyyy_MM_dd_1.getTime() - yyyy_MM_dd_2.getTime())/1000)/60)/60)/24 ;
    }
    /**
     * ä¸¤ä¸ªæ—¥æœŸç›¸å·®å¤©æ•°
     */
    public static long daysBetweenyyyyMMdd(String yyyyMMdd_1 , String yyyyMMdd_2)throws Exception{
        return ((((dateFrom_yyyy_MM_dd(yyyyMMdd_1).getTime()-dateFrom_yyyy_MM_dd(yyyyMMdd_2).getTime())/1000)/60)/60)/24 ;
    }
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoTmp/ChangeMapper.java
New file
@@ -0,0 +1,40 @@
package com.dy.pipIrrGlobal.daoTmp;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDay;
import com.dy.pipIrrGlobal.voSt.VoIntake;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * @Author: liurunyu
 * @Date: 2024/12/14 09:27
 * @Description
 */
@Mapper
public interface ChangeMapper extends BaseMapper<Object> {
    /**
     * æŸ¥è¯¢å…¨éƒ¨å–水口
     *
     * @return å®žä½“集合
     */
    List<VoIntake> selectAllPrIntakes();
    /**
     * æŸ¥è¯¢ä¸€ä¸ªå–水口的日用水量统计记录
     *
     * @return å®žä½“集合
     */
    List<RmIntakeAmountDay> selectOneIntakeAllAmountDay(@Param("intakeId")Long intakeId);
    /**
     * æ›´æ–°ä¸€ä¸ªå–水口的日用水量统计
     *
     * @return å½±å“å®žä½“æ•°
     */
    int updateOneIntakeAmountDay(@Param("id")Long id, @Param("amount")Double amount);
}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/Temp4ChangeMapper.xml
New file
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dy.pipIrrGlobal.daoTmp.ChangeMapper">
    <!-- æŸ¥è¯¢å‡ºæ‰€æœ‰å–水口 -->
    <select id="selectAllPrIntakes" resultType="com.dy.pipIrrGlobal.voSt.VoIntake">
        select id as intakeId,
               name as intakeNum
        from  pr_intake
        order by id ASC
    </select>
    <!-- å–水口取水量日统计相关, æ­¤SQL中的 â€order by id ASC â€œä¸å¯ä¿®æ”¹ -->
    <select id="selectOneIntakeAllAmountDay" resultType="com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDay">
        select id as id,
               intake_id as intakeId ,
               dt as dt,
               amount as amount,
               total_amount_last as totalAmountLast
        from  rm_intake_amount_day
        where intake_id = #{intakeId}
        order by id ASC
    </select>
    <!-- ä¿®æ”¹å–水口取水量日统计 -->
    <update id="updateOneIntakeAmountDay" >
        update rm_intake_amount_day
        set amount = #{amount, jdbcType=FLOAT}
        where id = #{id, jdbcType=BIGINT}
    </update>
</mapper>
pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/changeSome/ChSomeCtrl.java
New file
@@ -0,0 +1,40 @@
package com.dy.pipIrrTemp.changeSome;
import com.dy.common.aop.SsoAop;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @Author: liurunyu
 * @Date: 2024/12/14 9:22
 * @Description
 */
@Slf4j
@RestController
@RequestMapping(path = "chSome")
@SuppressWarnings("unchecked")//java版本越高,对泛型约束越严,所以配置SuppressWarnings("unchecked")
public class ChSomeCtrl {
    private ChSomeIntakeAmountSv intakeAmountSv;
    @Autowired
    private void setSv(ChSomeIntakeAmountSv sv) {
        this.intakeAmountSv = sv;
    }
    /**
     * ä¿®æ”¹ä¸€äº›å–水口取水量日统计
     * @return
     */
    @GetMapping(path = "changeSomeIntakeDayAmount")
    @SsoAop()
    public BaseResponse<Boolean> changeSomeIntakeDayAmount() throws Exception{
        this.intakeAmountSv.chIntakeAmountDay();
        return BaseResponseUtils.buildSuccess(true);
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/changeSome/ChSomeIntakeAmountSv.java
New file
@@ -0,0 +1,98 @@
package com.dy.pipIrrTemp.changeSome;
import com.dy.common.util.DateTime;
import com.dy.pipIrrGlobal.daoTmp.ChangeMapper;
import com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDay;
import com.dy.pipIrrGlobal.voSt.VoIntake;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @Author: liurunyu
 * @Date: 2024/12/14 9:25
 * @Description
 */
@Slf4j
@Service
public class ChSomeIntakeAmountSv {
    private ChangeMapper dao;
    private static final int IntakeAmountDayFlag = 800 ;//2024-12-14统计元谋数据库实时数据,发现大于800的正确的数据不存在,而小于800的基本为正确数据
    @Autowired
    private void setDao(ChangeMapper dao){
        this.dao = dao;
    }
    public void chIntakeAmountDay() throws Exception{
        RmIntakeAmountDay lastAd = null ;
        List<VoIntake> list = dao.selectAllPrIntakes() ;
        if(list != null && list.size() > 0){
            for(VoIntake vo : list){
                lastAd = null ;
                List<RmIntakeAmountDay> adList = dao.selectOneIntakeAllAmountDay(vo.getIntakeId()) ;
                if(adList != null && adList.size() > 0){
                    //adList中数据以id升序排列
                    for(RmIntakeAmountDay ad : adList){
                        if(lastAd == null){
                            lastAd = ad ;
                            if(lastAd.amount != null && lastAd.amount > IntakeAmountDayFlag){
                                dao.updateOneIntakeAmountDay(lastAd.id, 0.0);
                            }
                        }else{
                            if(ad.amount != null && ad.amount > IntakeAmountDayFlag){
                                if(ad.totalAmountLast != null && lastAd.totalAmountLast != null){
                                    ad.amount = ad.totalAmountLast - lastAd.totalAmountLast;
                                    if(ad.amount < 0){//存这种情况
                                        ad.amount = 0.0 ;
                                    }
                                    if(ad.amount > IntakeAmountDayFlag){
                                        log.info("出现调整后的日取水量仍大于"
                                                + IntakeAmountDayFlag
                                                + "的情况,数据id=" + ad.id
                                                + ",取水口id=" + ad.intakeId
                                                + ",日期=" + ad.dt
                                                + ad.amount
                                        );
                                        if(ad.dt != null && lastAd.dt != null){
                                            if(DateTime.daysBetweenyyyy_MM_dd(ad.dt, lastAd.dt) == 1){
                                                //只相差一天
                                                ad.amount = 0.0 ;
                                                log.info("出现相差一天但日取水量大于"
                                                        + IntakeAmountDayFlag
                                                        + "的情况,数据id=" + ad.id
                                                        + ",取水口id=" + ad.intakeId
                                                        + ",日期=" + ad.dt
                                                        + ",水量=" + ad.amount
                                                );
                                            }else{
                                                //已经修改后的数值仍然大于IntakeAmountDayFlag,说明是大日未上报数据而积累下来,可以大于IntakeAmountDayFlag
                                                //ad.amount = ad.amount ;
                                                log.info("出现相差多天日取水量大于"
                                                        + IntakeAmountDayFlag
                                                        + "的情况,数据id=" + ad.id
                                                        + ",取水口id=" + ad.intakeId
                                                        + ",日期=" + ad.dt
                                                        + ",水量=" + ad.amount
                                                );
                                            }
                                        }
                                    }
                                }else{
                                    ad.amount = 0.0 ;
                                }
                                dao.updateOneIntakeAmountDay(ad.id, 0.0);
                            }
                        }
                    }
                }
            }
        }
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-temp/˵Ã÷.txt
@@ -1,2 +1,13 @@
这个temp模块执行临时任务,例如删除数据库中一些错误数据等
系统正式运行不需要这个模块
系统正式运行不需要这个模块
执行功能:
1、删除一些漏损统计---重复数据
/temp/delSome/deleteSomeStatisticLossAmount
2、删除一些取水口统计---重复数据
/temp/delSome/deleteSomeStatisticIntakeAmount
3、删除一些农户统计---重复数据
/temp/delSome/deleteSomeStatisticClientAmount
4、修改一些取水口日取水量统计---因RTU一天内整点报中累计流量间歇出现0值,两次上报累计流量差值会产生大值
/temp/chSome/changeSomeIntakeDayAmount