wuzeyu
2025-01-06 efa933befa09b05560538bb8cab46d11b36f8e1e
Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV
8个文件已修改
5个文件已添加
1316 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountMonthMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountYearMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountMonth.java 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYear.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecord.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecords.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global(166web文件花生壳).yml 413 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountDayMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountMonthMapper.xml 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountYearMapper.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/PipIrrOperationApplication.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientCtrl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientSv.java 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountMonthMapper.java
@@ -2,10 +2,12 @@
import com.dy.pipIrrGlobal.pojoSt.StClientAmountMonth;
import com.dy.pipIrrGlobal.voSt.VoClientAmountStatistics;
import com.dy.pipIrrGlobal.voSt.VoStClientAmountMonth;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * @Author: liurunyu
@@ -63,6 +65,22 @@
    int updateByPrimaryKey(StClientAmountMonth record);
    //////////////////////////////////////
    //查询统计结果
    /**
     * æŸ¥è¯¢æ€»æ•°é‡
     * @param params
     * @return
     */
    Long selectCountMonthStatistics(Map<?, ?> params) ;
    /**
     * æŸ¥è¯¢åˆ†é¡µæ•°æ®
     * @param params
     * @return
     */
    List<VoStClientAmountMonth> selectMonthStatistics(Map<?, ?> params) ;
    //////////////////////////////////////
    //统计相关
    /**
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSt/StClientAmountYearMapper.java
@@ -1,10 +1,12 @@
package com.dy.pipIrrGlobal.daoSt;
import com.dy.pipIrrGlobal.pojoSt.StClientAmountYear;
import com.dy.pipIrrGlobal.voSt.VoStClientAmountYearRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * @Author: liurunyu
@@ -61,6 +63,25 @@
     */
    int updateByPrimaryKey(StClientAmountYear record);
    //////////////////////////////////////
    //查询统计结果
    /**
     * æŸ¥è¯¢æ€»æ•°é‡
     * @param params
     * @return
     */
    Long selectCountYearStatistics(Map<?, ?> params) ;
    /**
     * æŸ¥è¯¢åˆ†é¡µæ•°æ®
     * @param params
     * @return
     */
    List<VoStClientAmountYearRecord> selectYearStatistics(Map<?, ?> params) ;
    //////////////////////////////////////
    //统计相关
    /**
     * æŸ¥è¯¢æŸå¹´ æŸé‡å€¼
     *
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountMonth.java
New file
@@ -0,0 +1,243 @@
package com.dy.pipIrrGlobal.voSt;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
/**
 * @Author: liurunyu
 * @Date: 2025/1/4 10:15
 * @Description
 */
@Data
@JsonPropertyOrder({ "id", "clientId", "clientNum", "clientName", "clientAddress" , "year"
        ,"amount1" , "money1" , "times1"
        ,"amount2" , "money2" , "times2"
        ,"amount3" , "money3" , "times3"
        ,"amount4" , "money4" , "times4"
        ,"amount5" , "money5" , "times5"
        ,"amount6" , "money6" , "times6"
        ,"amount7" , "money7" , "times7"
        ,"amount8" , "money8" , "times8"
        ,"amount9" , "money9" , "times9"
        ,"amount10" , "money10" , "times10"
        ,"amount11" , "money11" , "times11"
        ,"amount12" , "money12" , "times12"
})
public class VoStClientAmountMonth {
    public static final long serialVersionUID = 202501041014001L;
    /**
     * ä¸»é”®
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    public Long id;
    /**
     * å¤–键,指向农户
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    public Long clientId;
    /**
     * å†œæˆ·ç¼–月
     */
    public String clientNum ;
    /**
     * å†œæˆ·åç§°
     */
    public String clientName ;
    /**
     * å†œæˆ·åœ°å€
     */
    public String clientAddress ;
    /**
     * å¹´åº¦
     */
    public Integer year;
    /**
     * 1月用水量统计
     */
    public Double amount1;
    /**
     * 1月花费金额
     */
    public Double money1;
    /**
     * 1月用水次数
     */
    public Integer times1;
    /**
     * 2月用水量统计
     */
    public Double amount2;
    /**
     * 2月花费金额
     */
    public Double money2;
    /**
     * 2月用水次数
     */
    public Integer times2;
    /**
     * 3月用水量统计
     */
    public Double amount3;
    /**
     * 3月花费金额
     */
    public Double money3;
    /**
     * 3月用水次数
     */
    public Integer times3;
    /**
     * 4月用水量统计
     */
    public Double amount4;
    /**
     * 4月花费金额
     */
    public Double money4;
    /**
     * 4月用水次数
     */
    public Integer times4;
    /**
     * 5月用水量统计
     */
    public Double amount5;
    /**
     * 5月花费金额
     */
    public Double money5;
    /**
     * 5月用水次数
     */
    public Integer times5;
    /**
     * 6月用水量统计
     */
    public Double amount6;
    /**
     * 6月花费金额
     */
    public Double money6;
    /**
     * 6月用水次数
     */
    public Integer times6;
    /**
     * 7月用水量统计
     */
    public Double amount7;
    /**
     * 7月花费金额
     */
    public Double money7;
    /**
     * 7月用水次数
     */
    public Integer times7;
    /**
     * 8月用水量统计
     */
    public Double amount8;
    /**
     * 8月花费金额
     */
    public Double money8;
    /**
     * 8月用水次数
     */
    public Integer times8;
    /**
     * 9月用水量统计
     */
    public Double amount9;
    /**
     * 9月花费金额
     */
    public Double money9;
    /**
     * 9月用水次数
     */
    public Integer times9;
    /**
     * 10月用水量统计
     */
    public Double amount10;
    /**
     * 10月花费金额
     */
    public Double money10;
    /**
     * 10月用水次数
     */
    public Integer times10;
    /**
     * 11月用水量统计
     */
    public Double amount11;
    /**
     * 11月花费金额
     */
    public Double money11;
    /**
     * 11月用水次数
     */
    public Integer times11;
    /**
     * 12月用水量统计
     */
    public Double amount12;
    /**
     * 12月花费金额
     */
    public Double money12;
    /**
     * 12月用水次数
     */
    public Integer times12;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYear.java
New file
@@ -0,0 +1,20 @@
package com.dy.pipIrrGlobal.voSt;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
import java.util.List;
/**
 * @Author: liurunyu
 * @Date: 2025/1/4 11:13
 * @Description
 */
@Data
@JsonPropertyOrder({ "yearGrp", "records" })
public class VoStClientAmountYear {
    public List<Integer> yearGrp;
    public List<VoStClientAmountYearRecords> records;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecord.java
New file
@@ -0,0 +1,49 @@
package com.dy.pipIrrGlobal.voSt;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import lombok.Data;
/**
 * @Author: liurunyu
 * @Date: 2025/1/6 9:38
 * @Description
 */
@Data
public class VoStClientAmountYearRecord {
    /**
     * å¤–键,指向农户
     */
    public Long clientId;
    /**
     * å†œæˆ·ç¼–å¹´
     */
    public String clientNum ;
    /**
     * å†œæˆ·åç§°
     */
    public String clientName ;
    /**
     * å†œæˆ·åœ°å€
     */
    public String clientAddress ;
    /**
     * 1年用水量统计
     */
    public Double amount;
    /**
     * 1年花费金额
     */
    public Double money;
    /**
     * 1年用水次数
     */
    public Integer times;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoStClientAmountYearRecords.java
New file
@@ -0,0 +1,201 @@
package com.dy.pipIrrGlobal.voSt;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
/**
 * @Author: liurunyu
 * @Date: 2025/1/4 10:15
 * @Description
 */
@Data
@JsonPropertyOrder({ "id", "clientId", "clientNum", "clientName", "clientAddress"
        ,"amount1" , "money1" , "times1"
        ,"amount2" , "money2" , "times2"
        ,"amount3" , "money3" , "times3"
        ,"amount4" , "money4" , "times4"
        ,"amount5" , "money5" , "times5"
        ,"amount6" , "money6" , "times6"
        ,"amount7" , "money7" , "times7"
        ,"amount8" , "money8" , "times8"
        ,"amount9" , "money9" , "times9"
        ,"amount10" , "money10" , "times10"
})
public class VoStClientAmountYearRecords {
    public static final long serialVersionUID = 202501041106001L;
    /**
     * å¤–键,指向农户
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    public Long clientId;
    /**
     * å†œæˆ·ç¼–å¹´
     */
    public String clientNum ;
    /**
     * å†œæˆ·åç§°
     */
    public String clientName ;
    /**
     * å†œæˆ·åœ°å€
     */
    public String clientAddress ;
    /**
     * 1年用水量统计
     */
    public Double amount1;
    /**
     * 1年花费金额
     */
    public Double money1;
    /**
     * 1年用水次数
     */
    public Integer times1;
    /**
     * 2年用水量统计
     */
    public Double amount2;
    /**
     * 2年花费金额
     */
    public Double money2;
    /**
     * 2年用水次数
     */
    public Integer times2;
    /**
     * 3年用水量统计
     */
    public Double amount3;
    /**
     * 3年花费金额
     */
    public Double money3;
    /**
     * 3年用水次数
     */
    public Integer times3;
    /**
     * 4年用水量统计
     */
    public Double amount4;
    /**
     * 4年花费金额
     */
    public Double money4;
    /**
     * 4年用水次数
     */
    public Integer times4;
    /**
     * 5年用水量统计
     */
    public Double amount5;
    /**
     * 5年花费金额
     */
    public Double money5;
    /**
     * 5年用水次数
     */
    public Integer times5;
    /**
     * 6年用水量统计
     */
    public Double amount6;
    /**
     * 6年花费金额
     */
    public Double money6;
    /**
     * 6年用水次数
     */
    public Integer times6;
    /**
     * 7年用水量统计
     */
    public Double amount7;
    /**
     * 7年花费金额
     */
    public Double money7;
    /**
     * 7年用水次数
     */
    public Integer times7;
    /**
     * 8年用水量统计
     */
    public Double amount8;
    /**
     * 8年花费金额
     */
    public Double money8;
    /**
     * 8年用水次数
     */
    public Integer times8;
    /**
     * 9年用水量统计
     */
    public Double amount9;
    /**
     * 9年花费金额
     */
    public Double money9;
    /**
     * 9年用水次数
     */
    public Integer times9;
    /**
     * 10年用水量统计
     */
    public Double amount10;
    /**
     * 10年花费金额
     */
    public Double money10;
    /**
     * 10年用水次数
     */
    public Integer times10;
}
pipIrr-platform/pipIrr-global/src/main/resources/application-global(166webÎļþ»¨Éú¿Ç).yml
New file
@@ -0,0 +1,413 @@
spring:
    servlet:
        multipart:
            # å‰ç«¯ä¸Šä¼ æ–‡ä»¶ï¼Œé™åˆ¶å•个文件的大小和限制所有文件的大小
            max-file-size: 500MB
            max-request-size: 5000MB
logging:
    charset:
        console: UTF-8
    config:
        classpath: log4j2.yml
#禁用白标错误页面
server:
    error:
        whitelabel:
            enabled: false
    #servlet配置
    servlet:
        encoding:
            #取消默认的字符集编码
            enabled: true
            #设置强制使用指定字符编码集
            force: true
            #使用的字符编码
            charset: utf-8
# actuator配置,先include了全部,然后再exclude指定的endpoint
management:
    endpoints:
        web:
            exposure:
                include: '*'
                #exclude: beans
        .shutdown:
            enabled: true #是否开启/actuator/shutdown
# SpringDoc-OpenApi é…ç½®
springdoc:
    swagger-ui:
        #应用actuator时,访问: http://[IP]:[port]/actuator/swagger-ui/index.html ä¾‹å¦‚http://127.0.0.1:9080/actuator/swagger-ui/index.html
        #未用actuator时,访问: http://[IP]:[port]/[context]/swagger-ui/index.html ä¾‹å¦‚http://127.0.0.1:8080/[子系统上下文(base)]/swagger-ui/index.html
        path: /swagger-ui
        operationsSorter: method # HTTP æ–¹æ³•排序
        tagsSorter: alpha # API æŽ’序
    api-docs:
        path: /v3/apiDocs
        groups:
            enabled: true
    show-actuator: true #在actuator配置的端口及上下文中访问 SpringDoc-OpenApi
    use-management-port: true #应用actuator配置的端口,但上面的swagger-ui:path只会采用默认值swagger-ui
    packages-to-scan: com.dy
    #paths-to-match: /sys/**, /demo/**, /**
    paths-to-match:  /**
    web:
        title: å¤§ç¦¹èŠ‚æ°´ç®¡çŒç›‘æŽ§ç³»ç»ŸAPI
        description: å¤§ç¦¹èŠ‚æ°´ç®¡çŒç›‘æŽ§ç³»ç»ŸæœåŠ¡ç«¯ Restfull API
        version: v1.0.0
        license-name: å¤§ç¦¹èŠ‚æ°´ç ”ç©¶é™¢
#MybatisPlus é…ç½®æ—¥å¿—显示执行SQL
mybatis-plus:
    #匹配sql语句的映射文件的位置,classpath代表在resources下
    mapper-locations: classpath:mapper/*.xml
    #以下两个配置可以省略,在mapper映射文件中配置“@Mapper”也是可以的。
    #使用type-aliases-package中指定entity扫描包路径,让mybatis自动扫描自定义的entity
    #type-aliases-package: com.dy.pipIrrGlobal.daoBa
    configuration:
        #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #时而输出日志,时而不输出日志
        #log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl ä¸å†åº”用,改为PrintSqlInterceptor拦截器输出sql日志,下面print-sql项配置
        print-sql: false # è¾“出sql日志开关,控制PrintSqlInterceptor拦截器是否加载
        #开启驼峰uName自动映射到u_name
        #2023-10-24经实验,下面配置true或false,都能从u_name映射到uName
        #map-underscore-to-camel-case: true
        lazyLoadingEnabled: true # å¼€å¯å»¶æ—¶åŠ è½½å¼€å…³
        aggressiveLazyLoading: false # å°†ç§¯æžåŠ è½½æ”¹ä¸ºæ¶ˆæžåŠ è½½ï¼ˆå³æŒ‰éœ€åŠ è½½ï¼‰ï¼Œé»˜è®¤å€¼æ˜¯false
        lazy-load-trigger-methods: ""  # é˜»æŒ¡ä¸ç›¸å¹²çš„æ“ä½œè§¦å‘,实现懒加载
        cache-enabled: true  #打开全局缓存开关(二级环境),默认值是true
        default-enum-type-handler: com.dy.common.mybatis.envm.EnumCodeTypeHandler
pipIrr:
    global:
        dev: false  #是否开发阶段,true或false
        dsName: ym  #开发阶段,设置临时的数据库名称
    nginx:
        webPort: 19913
    mw:
        webPort: 8070 #通信中间件中应用,不能在web模块系统中应用
        actutorPort: 9070 #通信中间件中应用,不能在web模块系统中应用
        idSuffix: 0
    sso:
        cacheMaximumSize: 10000 #登录用户缓存可缓存用户的最大值
        cacheDuration: 720  #缓存登录用户发呆最大时长(分钟)
        checkUrl: http://127.0.0.1:8079/sso/sso/ssoCheck
        webPort: 8079
        actutorPort: 9079
        idSuffix: 1
    base:
        webPort: 8080
        actutorPort: 9080
        idSuffix: 2
    remote:
        webPort: 8081
        actutorPort: 9081
        idSuffix: 3
    statistics:
        webPort: 8082
        actutorPort: 9082
        idSuffix: 4
    gis:
        webPort: 8083
        actutorPort: 9083
        idSuffix: 5
    demo:
        webPort: 8000
        actutorPort: 9000
        idSuffix: 99
    sell:
        webPort: 8084
        actutorPort: 9084
        idSuffix: 6
    project:
        webPort: 8085
        actutorPort: 9085
        idSuffix: 7
    irrigate:
        webPort: 8086
        actutorPort: 9086
        idSuffix: 8
    wechat:
        webPort: 8087
        actutorPort: 9087
        idSuffix: 9
    app:
        webPort: 8088
        actutorPort: 9088
        idSuffix: 10
    operation:
        webPort: 8089
        actutorPort: 9089
        idSuffix: 11
    # 2023-10-24新增,用于执行临时任务,例如删除数据库中上些出错的数据
    temp:
        webPort: 8099
        actutorPort: 9099
        idSuffix: 98
    # åˆ†å¸ƒå¼web文件系统
    file:
        idSuffix: 99
    file1:
        webPort: 8180
        actutorPort: 9180
    file2:
        webPort: 8180
        actutorPort: 9180
    file3:
        webPort: 8180
        actutorPort: 9180
    file4:
        webPort: 8180
        actutorPort: 9180
    file5:
        webPort: 8180
        actutorPort: 9180
    file6:
        webPort: 8180
        actutorPort: 9180
    file7:
        webPort: 8180
        actutorPort: 9180
    file8:
        webPort: 8180
        actutorPort: 9180
    file9:
        webPort: 8180
        actutorPort: 9180
    file10:
        webPort: 8180
        actutorPort: 9180
    file11:
        webPort: 8180
        actutorPort: 9180
    file12:
        webPort: 8180
        actutorPort: 9180
#web分布式文件系统
dy:
    photoZipWidth: 400 #缩略图尺寸
    webFile:
        fmUrl: http://127.0.0.1:${pipIrr.file1.webPort}/file # fm的web上下文 URL
        supportedFileTypes: docx,xlsx,doc,xls,pdf #支持的文档(非媒体文件,如照片、录音、录像)文件类型
        sv1:
            id: dyFile1
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile1
            hashStart: 0
            hashEnd: 5461
            restUrl: http://127.0.0.1:${pipIrr.file1.webPort}/file #file是上下文,ip为局域网ip或本地IP
            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/ #nginx服务路径,安装部署时IP改成外网IP或域名
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file1.webPort}/file/download/down?id=  #安装部署时IP改成外网IP或域名
        sv2:
            id: dyFile2
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile2
            hashStart: 5462
            hashEnd: 10923
            restUrl: http://127.0.0.1:${pipIrr.file2.webPort}/file
            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file2.webPort}/file/download/down?id=
        sv3:
            id: dyFile3
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile3
            hashStart: 10924
            hashEnd: 16385
            restUrl: http://127.0.0.1:${pipIrr.file3.webPort}/file
            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file3.webPort}/file/download/down?id=
        sv4:
            id: dyFile4
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile4
            hashStart: 16386
            hashEnd: 21847
            restUrl: http://127.0.0.1:${pipIrr.file4.webPort}/file
            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file4.webPort}/file/download/down?id=
        sv5:
            id: dyFile5
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile5
            hashStart: 21848
            hashEnd: 27309
            restUrl: http://127.0.0.1:${pipIrr.file5.webPort}/file
            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file5.webPort}/file/download/down?id=
        sv6:
            id: dyFile6
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile6
            hashStart: 27310
            hashEnd: 32767
            restUrl: http://127.0.0.1:${pipIrr.file6.webPort}/file
            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file6.webPort}/file/download/down?id=
        sv7:
            id: dyFile7
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile7
            hashStart: 32768
            hashEnd: 38229
            restUrl: http://127.0.0.1:${pipIrr.file7.webPort}/file
            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file7.webPort}/file/download/down?id=
        sv8:
            id: dyFile8
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile8
            hashStart: 38230
            hashEnd: 43691
            restUrl: http://127.0.0.1:${pipIrr.file8.webPort}/file
            webUrl: http://no253541tf71.vicp.fun${pipIrr.nginx.webPort}/webfiles/
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file8.webPort}/file/download/down?id=
        sv9:
            id: dyFile9
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile9
            hashStart: 43692
            hashEnd: 49153
            restUrl: http://127.0.0.1:${pipIrr.file9.webPort}/file
            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file9.webPort}/file/download/down?id=
        sv10:
            id: dyFile10
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile10
            hashStart: 49154
            hashEnd: 54615
            restUrl: http://127.0.0.1:${pipIrr.file10.webPort}/file
            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file10.webPort}/file/download/down?id=
        sv11:
            id: dyFile11
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile11
            hashStart: 54616
            hashEnd: 60077
            restUrl: http://127.0.0.1:${pipIrr.file11.webPort}/file
            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file11.webPort}/file/download/down?id=
        sv12:
            id: dyFile12
            absolutePath: E:/apps/pipIrr/nginx-1.27.0/html/webfiles/
            relativePath: webFile12
            hashStart: 60078
            hashEnd: 65535
            restUrl: http://127.0.0.1:${pipIrr.file12.webPort}/file
            webUrl: http://no253541tf71.vicp.fun:${pipIrr.nginx.webPort}/webfiles/
            webDownloadPath: http://no253541tf71.vicp.fun:${pipIrr.file12.webPort}/file/download/down?id=
#项目编号
#projectCode:
#    ym: 100
#    sp: 101
#项目配置
project:
    #项目编码
    projectNo: 10
    #控制器类型
    controllerType: 57
    #默认行政区划编码(天津-天津市-武清区-京滨工业园-大禹节水)
    divisionCode: 120114403100
#通讯中间件相关配置
#protocol: DYJS_2023,DYJS_2024
mw:
    #命令发送通信中间件地址
    ym:
        url: "http://127.0.0.1:8070"
        comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
    mj:
        url: "http://127.0.0.1:8071"
        comSendUrl: "http://127.0.0.1:8071/rtuMw/com/send"
    mq:
        url: "http://127.0.0.1:8100"
        comSendUrl: "http://127.0.0.1:8100/rtuMw/com/send"
    sp:
        url: "http://127.0.0.1:8073"
        comSendUrl: "http://127.0.0.1:8073/rtuMw/com/send"
    test:
        url: "http://127.0.0.1:8072"
        comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
    #监测控制模块回调地址
    rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
    #rtu远程升级模块回调地址
    ugCallbackUrl_rm: "http://127.0.0.1:8081/remote/rtuUpgradeStateReceiver/receive"
    #微信小程序回调地址
    rtuCallbackUrl_wx: "http://127.0.0.1:8087/wx/comRes/receive"
#不进行userToken过滤的URL,@ConfigurationProperties要求tokennofilter中所有字母都小写
tokennofilter:
    urls:
        - /sso/sso
        - /remote/comRes/receive
        - /remote/rtuUpgradeStateReceiver/receive
        - /wx/comRes/receive
        - /app/captcha/get
        - /file/file #web分布式文件系统
        - /file/fm #web分布式文件系统
#自动统计配置,自动统计定时任务会每天定时进行
auto-statistics:
    startHour: 0 #开始小时,必须是0点或之后,取值范围是0~5,否StatisticsListener中自动设置成0
    startMinute: 5 #开始分钟 5
#钉钉消息推送
dingtalk:
    ym:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    mj:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    mq:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    sp:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    test:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
#阀控器参数
rtu:
    batteryVolt: 17
    signalIntensity:
        weak: 10
        ordinary: 20
#        strong: 20
#虚拟卡配置参数
vc:
    #虚拟卡最低余额报警值
    alarmValue: 10
pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountDayMapper.xml
@@ -117,7 +117,6 @@
    times30, amount31, money31, times31
  </sql>
  <sql id="Base_Column_List_with_alias">
    <!--@mbg.generated-->
    ${alias}.id, ${alias}.client_id, ${alias}.`year`, ${alias}.`month`, ${alias}.amount1, ${alias}.money1, ${alias}.times1, ${alias}.amount2, ${alias}.money2, ${alias}.times2,
    ${alias}.amount3, ${alias}.money3, ${alias}.times3, ${alias}.amount4, ${alias}.money4, ${alias}.times4, ${alias}.amount5, ${alias}.money5, ${alias}.times5, ${alias}.amount6,
    ${alias}.money6, ${alias}.times6, ${alias}.amount7, ${alias}.money7, ${alias}.times7, ${alias}.amount8, ${alias}.money8, ${alias}.times8, ${alias}.amount9, ${alias}.money9,
@@ -1207,24 +1206,27 @@
    select
    count(*)
    from se_client mtb
    <where>
    where mtb.deleted != 1
    <trim prefix="and" suffixOverrides="and">
      <if test="name != null and name != ''">
        mtb.name like concat('%', #{name}, '%')
      </if>
    </where>
    </trim>
  </select>
  <select id="selectDayStatistics" resultType="com.dy.pipIrrGlobal.voSt.VoStClientAmountDay">
    select
    mtb.id as clientId,
    mtb.clientNum as clientNum,
    mtb.phone as clientPhone,
    mtb.name as clientName,
    mtb.address as clientAddress,
    <include refid="Base_Column_List_with_alias" >
      <property name="alias" value="stTb"/>
    </include>
    from se_client mtb
    LEFT JOIN st_client_amount_day stTb on stTb.client_id = mtb.id
    <where>
    where mtb.deleted != 1
    <trim prefix="and" suffixOverrides="and">
      <if test = "year != null">
        stTb.year = #{year, jdbcType=INTEGER}
      </if>
@@ -1234,8 +1236,8 @@
      <if test="name != null and name != ''">
        AND mtb.name like concat('%', #{name}, '%')
      </if>
    </where>
    order by mtb.id ASC
    </trim>
    order by mtb.id DESC
    <trim prefix="limit " >
      <if test="start != null and count != null">
        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountMonthMapper.xml
@@ -51,6 +51,18 @@
    times6, amount7, money7, times7, amount8, money8, times8, amount9, money9, times9, 
    amount10, money10, times10, amount11, money11, times11, amount12, money12, times12
  </sql>
  <sql id="Base_Column_List_with_alias">
    <!--@mbg.generated-->
    ${alias}.id, ${alias}.client_id, ${alias}.`year`,
    ${alias}.amount1, ${alias}.money1, ${alias}.times1, ${alias}.amount2, ${alias}.money2, ${alias}.times2,
    ${alias}.amount3, ${alias}.money3, ${alias}.times3, ${alias}.amount4, ${alias}.money4, ${alias}.times4,
    ${alias}.amount5, ${alias}.money5, ${alias}.times5, ${alias}.amount6, ${alias}.money6, ${alias}.times6,
    ${alias}.amount7, ${alias}.money7, ${alias}.times7, ${alias}.amount8, ${alias}.money8, ${alias}.times8,
    ${alias}.amount9, ${alias}.money9, ${alias}.times9, ${alias}.amount10, ${alias}.money10, ${alias}.times10,
    ${alias}.amount11, ${alias}.money11, ${alias}.times11, ${alias}.amount12, ${alias}.money12, ${alias}.times12
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    <!--@mbg.generated-->
    select 
@@ -501,6 +513,52 @@
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!-- ////////////////////////////////// -->
  <!-- æŸ¥è¯¢ç»Ÿè®¡ç»“æžœ                         -->
  <!-- ////////////////////////////////// -->
  <select id="selectCountMonthStatistics" resultType="java.lang.Long">
    select
    count(*)
    from se_client mtb
    where mtb.deleted != 1
    <trim prefix="and" suffixOverrides="and">
      <if test="name != null and name != ''">
        mtb.name like concat('%', #{name}, '%')
      </if>
    </trim>
  </select>
  <select id="selectMonthStatistics" resultType="com.dy.pipIrrGlobal.voSt.VoStClientAmountMonth">
    select
    mtb.clientNum as clientNum,
    mtb.phone as clientPhone,
    mtb.address as clientAddress,
    <include refid="Base_Column_List_with_alias" >
      <property name="alias" value="stTb"/>
    </include>
    from se_client mtb
    LEFT JOIN st_client_amount_month stTb on stTb.client_id = mtb.id
    where mtb.deleted != 1
    <trim prefix="and" suffixOverrides="and">
      <if test = "year != null">
        stTb.year = #{year, jdbcType=INTEGER}
      </if>
      <if test="name != null and name != ''">
        AND mtb.name like concat('%', #{name}, '%')
      </if>
    </trim>
    order by mtb.id DESC
    <trim prefix="limit " >
      <if test="start != null and count != null">
        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
      </if>
    </trim>
  </select>
  <!-- ////////////////////////////////// -->
  <!-- ç»Ÿè®¡ç›¸å…³                         -->
  <!-- ////////////////////////////////// -->
  <select id="selectByYear" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
pipIrr-platform/pipIrr-global/src/main/resources/mapper/StClientAmountYearMapper.xml
@@ -111,6 +111,48 @@
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!-- ////////////////////////////////// -->
  <!-- æŸ¥è¯¢ç»Ÿè®¡ç»“æžœ                         -->
  <!-- ////////////////////////////////// -->
  <select id="selectCountYearStatistics" resultType="java.lang.Long">
    select
    count(*)
    from se_client mtb
    where mtb.deleted != 1
    <trim prefix="and" suffixOverrides="and">
      <if test="name != null and name != ''">
        mtb.name like concat('%', #{name}, '%')
      </if>
    </trim>
  </select>
  <select id="selectYearStatistics" resultType="com.dy.pipIrrGlobal.voSt.VoStClientAmountYearRecord">
    select
    ctb.id as clientId,
    ctb.clientNum as clientNum,
    ctb.name as clientName,
    ctb.address as clientAddress,
    cayTb.amount as amount,
    cayTb.money as money,
    cayTb.times as times
    from se_client ctb
    LEFT JOIN st_client_amount_year cayTb on cayTb.client_id = ctb.id
    where ctb.deleted != 1
    <trim prefix="and" suffixOverrides="and">
      <if test="year != null">
        cayTb.`year` = #{year,jdbcType=INTEGER}
      </if>
      <if test="name != null and name != ''">
        and ctb.name like concat('%', #{name}, '%')
      </if>
    </trim>
    order by ctb.id DESC
    <trim prefix="limit " >
      <if test="start != null and count != null">
        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
      </if>
    </trim>
  </select>
  <!-- ////////////////////////////////// -->
  <!-- ç»Ÿè®¡ç›¸å…³                         -->
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/PipIrrOperationApplication.java
@@ -18,7 +18,12 @@
                })
        }
)
@MapperScan(basePackages={"com.dy.pipIrrGlobal.daoRm", "com.dy.pipIrrGlobal.daoPr", "com.dy.pipIrrGlobal.daoSe", "com.dy.pipIrrGlobal.daoBa","com.dy.pipIrrGlobal.daoOp"})
@MapperScan(basePackages={"com.dy.pipIrrGlobal.daoRm",
        "com.dy.pipIrrGlobal.daoPr",
        "com.dy.pipIrrGlobal.daoSe",
        "com.dy.pipIrrGlobal.daoBa",
        "com.dy.pipIrrGlobal.daoOp",
        "com.dy.pipIrrGlobal.daoFi"})
public class PipIrrOperationApplication {
    public static void main(String[] args) {
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientCtrl.java
@@ -6,6 +6,8 @@
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.voSt.VoStClientAmountDay;
import com.dy.pipIrrGlobal.voSt.VoStClientAmountMonth;
import com.dy.pipIrrGlobal.voSt.VoStClientAmountYear;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +15,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
@@ -25,6 +28,8 @@
@RequestMapping(path="stClient")
@RequiredArgsConstructor
public class StClientCtrl {
    private static final int startYear4YearStatistics = 2024 ;
    private StClientSv sv ;
@@ -50,4 +55,47 @@
        qo.month = ymd[1] ;
        return BaseResponseUtils.buildSuccess(this.sv.selectStClientAmountDay(qo));
    }
    /**
     * æŸ¥è¯¢æŒ‡å®šå¹´å†œæˆ·å„月用水量
     * @param qo
     * @return
     */
    @GetMapping(path = "/amountOfMonth")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoStClientAmountMonth>>> amountOfMonth(StClientQo qo) throws Exception {
        if(qo.year == null) {
            return BaseResponseUtils.buildErrorMsg("查询条件年度不能为空");
        }
        return BaseResponseUtils.buildSuccess(this.sv.selectStClientAmountMonth(qo));
    }
    /**
     * æŸ¥è¯¢æŒ‡å®šå¹´å†œæˆ·å„年用水量
     * @param qo
     * @return
     */
    @GetMapping(path = "/amountOfYear")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoStClientAmountYear>>> amountOfYear(StClientQo qo) throws Exception {
        List<Integer> yearGrp = new ArrayList<Integer>();
        int nowYear = Integer.parseInt(DateTime.yyyy()) ;
        if(qo.year == null) {
            for(int i = startYear4YearStatistics; i <= nowYear; i++) {
                yearGrp.add(i) ;
            }
        }else{
            if(qo.year > nowYear){
                qo.year = nowYear;
            }
            if(qo.year < startYear4YearStatistics){
                qo.year = startYear4YearStatistics;
            }
            yearGrp.add(qo.year) ;
        }
        return BaseResponseUtils.buildSuccess(this.sv.selectStClientAmountYear(qo, yearGrp));
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/stClient/StClientSv.java
@@ -4,13 +4,14 @@
import com.dy.pipIrrGlobal.daoSt.StClientAmountDayMapper ;
import com.dy.pipIrrGlobal.daoSt.StClientAmountMonthMapper ;
import com.dy.pipIrrGlobal.daoSt.StClientAmountYearMapper ;
import com.dy.pipIrrGlobal.voSt.VoStClientAmountDay;
import com.dy.pipIrrGlobal.voSt.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.PojoUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -41,7 +42,12 @@
    }
    public QueryResultVo<List<VoStClientAmountDay>> selectStClientAmountDay(StClientQo qo) throws ParseException {
    /**
     * æŸ¥è¯¢å†œæˆ·ç”¨æ°´æ—¥ç»Ÿè®¡
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoStClientAmountDay>> selectStClientAmountDay(StClientQo qo) {
        QueryResultVo<List<VoStClientAmountDay>> rsVo = new QueryResultVo<>() ;
        // ç”ŸæˆæŸ¥è¯¢å‚æ•°
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
@@ -57,4 +63,174 @@
        }
        return rsVo ;
    }
    /**
     * æŸ¥è¯¢å†œæˆ·ç”¨æ°´æœˆç»Ÿè®¡
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoStClientAmountMonth>> selectStClientAmountMonth(StClientQo qo)  {
        QueryResultVo<List<VoStClientAmountMonth>> rsVo = new QueryResultVo<>() ;
        // ç”ŸæˆæŸ¥è¯¢å‚æ•°
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        // èŽ·å–ç¬¦åˆæ¡ä»¶çš„è®°å½•æ•°
        Long itemTotal = stClientAmountMonthDao.selectCountMonthStatistics(params) ;
        if(itemTotal != null && itemTotal > 0) {
            rsVo.pageSize = qo.pageSize;
            rsVo.pageCurr = qo.pageCurr;
            rsVo.calculateAndSet(itemTotal, params);
            rsVo.obj = stClientAmountMonthDao.selectMonthStatistics(params);
        }
        return rsVo ;
    }
    /**
     * æŸ¥è¯¢å†œæˆ·ç”¨æ°´å¹´ç»Ÿè®¡
     * @param qo
     * @return
     */
    public QueryResultVo<VoStClientAmountYear> selectStClientAmountYear(StClientQo qo, List<Integer> yearGrp) throws ParseException {
        QueryResultVo<VoStClientAmountYear> rsQrVo = new QueryResultVo<>() ;
        VoStClientAmountYear rsVo = new VoStClientAmountYear();
        rsVo.yearGrp = yearGrp ;
        rsQrVo.obj = rsVo ;
        // ç”ŸæˆæŸ¥è¯¢å‚æ•°
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        // èŽ·å–ç¬¦åˆæ¡ä»¶çš„è®°å½•æ•°
        Long itemTotal = stClientAmountYearDao.selectCountYearStatistics(params) ;
        if(itemTotal != null && itemTotal > 0) {
            rsQrVo.pageSize = qo.pageSize;
            rsQrVo.pageCurr = qo.pageCurr;
            rsQrVo.calculateAndSet(itemTotal, params);
            List<VoStClientAmountYearRecords> group = new ArrayList<>();
            int count = 1 ;
            for(int year: yearGrp){
                params.put("year", year);
                List<VoStClientAmountYearRecord> list = stClientAmountYearDao.selectYearStatistics(params);
                if(group.isEmpty()){
                    this.completion(group, list);
                }
                this.merge(count, group, list) ;
                count += 1 ;
            }
            rsVo.records = group ;
        }
        return rsQrVo ;
    }
    /**
     * è¡¥å…¨ï¼Œ é›†åˆä¸­æ²¡æœ‰å°±ç”Ÿæˆä¸€ä¸ª
     * @param group
     * @param list
     */
    private void completion(List<VoStClientAmountYearRecords> group, List<VoStClientAmountYearRecord> list){
        boolean found ;
        for (VoStClientAmountYearRecord voInList : list) {
            found = false ;
            for(VoStClientAmountYearRecords voInGrp : group) {
                if(voInList.clientId.longValue() == voInGrp.clientId.longValue()) {
                    found = true ;
                }
            }
            if(!found) {
                VoStClientAmountYearRecords vo4s = new VoStClientAmountYearRecords();
                vo4s.clientId = voInList.clientId;
                vo4s.clientNum = voInList.clientNum;
                vo4s.clientName = voInList.clientName;
                vo4s.clientAddress = voInList.clientAddress;
                group.add(vo4s) ;
            }
        }
    }
    /**
     * åˆå¹¶ï¼Œ é›†åˆä¸­æœ‰å°±åˆå¹¶
     * @param count
     * @param group
     * @param list
     */
    private void merge(int count, List<VoStClientAmountYearRecords> group, List<VoStClientAmountYearRecord> list){
        for (VoStClientAmountYearRecord voInList : list) {
            VoStClientAmountYearRecords voInGrp_ = null ;
            for(VoStClientAmountYearRecords voInGrp : group) {
                if(voInList.clientId.longValue() == voInGrp.clientId.longValue()) {
                    voInGrp_ = voInGrp ;
                    break ;
                }
            }
            if(voInGrp_ != null){
                this.merge(count, voInGrp_, voInList);
            }
        }
    }
    /**
     * åˆå¹¶å€¼
     * @param count
     * @param vo4s
     * @param vo
     */
    private void merge(int count, VoStClientAmountYearRecords vo4s, VoStClientAmountYearRecord vo){
        switch (count){
            case 1:
                vo4s.amount1 = vo.amount;
                vo4s.money1 = vo.money;
                vo4s.times1 = vo.times;
                break;
            case 2:
                vo4s.amount2 = vo.amount;
                vo4s.money2 = vo.money;
                vo4s.times2 = vo.times;
                break;
            case 3:
                vo4s.amount3 = vo.amount;
                vo4s.money3 = vo.money;
                vo4s.times3 = vo.times;
                break;
            case 4:
                vo4s.amount4 = vo.amount;
                vo4s.money4 = vo.money;
                vo4s.times4 = vo.times;
                break;
            case 5:
                vo4s.amount5 = vo.amount;
                vo4s.money5 = vo.money;
                vo4s.times5 = vo.times;
                break;
            case 6:
                vo4s.amount6 = vo.amount;
                vo4s.money6 = vo.money;
                vo4s.times6 = vo.times;
                break;
            case 7:
                vo4s.amount7 = vo.amount;
                vo4s.money7 = vo.money;
                vo4s.times7 = vo.times;
                break;
            case 8:
                vo4s.amount8 = vo.amount;
                vo4s.money8 = vo.money;
                vo4s.times8 = vo.times;
                break;
            case 9:
                vo4s.amount9 = vo.amount;
                vo4s.money9 = vo.money;
                vo4s.times9 = vo.times;
                break;
            case 10:
                vo4s.amount10 = vo.amount;
                vo4s.money10 = vo.money;
                vo4s.times10 = vo.times;
                break;
        }
    }
}