Administrator
2024-07-05 0230c8b9866083341749d51393046053ab978a7e
2024-07-05 朱宝民 1.多数据源配置,2.注销、挂失、冲正、解锁优化返回值
17个文件已修改
6个文件已添加
693 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd84Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseValveHistory.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/Org.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-database-pj.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-database-sp.yml 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-database.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Alarm.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/CommandDeal.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Domain.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/DrivenWell.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/WaterConsumption.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/result/RemoteResultCode.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuCtrl.java 396 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd84Vo.java
@@ -42,7 +42,7 @@
        sb.append(orderNo == null?"未知":orderNo) ;
        sb.append("\n") ;
        sb.append("      开泵/阀时间 : ") ;
        sb.append(openDt == null?"未知": openDt) ;
        sb.append(openDt == null?"未知":openDt) ;
        sb.append("\n") ;
        sb.append("      水表累计水量 : ") ;
        sb.append(waterTotalAmount == null?"未知":waterTotalAmount) ;
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseValveHistory.java
@@ -1,18 +1,17 @@
package com.dy.pipIrrGlobal.pojoRm;
import com.dy.common.mw.protocol.p206V1_0_0.DataV1_0_1;
import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCd83OpenVo;
import com.dy.common.mw.protocol.p206V202404.DataV202404;
import com.dy.common.mw.protocol.p206V202404.upVos.DataCd84Vo;
import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo;
import com.dy.common.util.DateTime;
import java.util.Date;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dy.common.mw.protocol.p206V1_0_0.DataV1_0_1;
import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCd83OpenVo;
import com.dy.common.mw.protocol.p206V202404.DataV202404;
import com.dy.common.mw.protocol.p206V202404.upVos.DataCd84Vo;
import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo;
import com.dy.common.po.BaseEntity;
import com.dy.common.util.DateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
@@ -31,7 +30,8 @@
 * @LastEditTime 2024/2/23 15:42
 * @Description 控制器开关阀上报数据
 */
@TableName(value="rm_open_close_valve_report", autoResultMap = true)
//@TableName(value="rm_open_close_valve_report", autoResultMap = true)
@TableName(value="rm_open_close_valve_history", autoResultMap = true)
@Data
@Builder
@ToString
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/Org.java
@@ -14,6 +14,7 @@
//    Ym("ym", "元谋"),
//    Pj("pj", "片角镇"),
    Sp("sp", "沙盘"),
    Jyg("ym", "嘉峪关");
    @EnumValue
@@ -50,8 +51,10 @@
//        }else if(tag.equals(Pj.tag)){
//            return Pj ;
//        }
        if( tag.equals(Jyg.tag)){
        if(tag.equals(Jyg.tag)){
            return Jyg ;
        }else if(tag.equals(Sp.tag)) {
            return Sp;
        }
        return null ;
    }
pipIrr-platform/pipIrr-global/src/main/resources/application-database-pj.yml
@@ -5,8 +5,8 @@
            #name: pj
            type: com.alibaba.druid.pool.DruidDataSource
            driverClassName: com.mysql.cj.jdbc.Driver
#            url: jdbc:mysql://192.168.91.73:3306/pipIrr_pj?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
            url: jdbc:mysql://192.168.40.166:3306/pipIrr_pj?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
#            url: jdbc:mysql://192.168.40.166:3306/pipIrr_pj?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
            url: jdbc:mysql://8.140.179.55:3306/pipIrr_pj?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
            username: root
            password: dysql,;.abc!@#
            druid:
pipIrr-platform/pipIrr-global/src/main/resources/application-database-sp.yml
New file
@@ -0,0 +1,64 @@
# 数据源配置
spring:
  datasource: #配置数据源
    sp:
      #name: sp
      type: com.alibaba.druid.pool.DruidDataSource
      driverClassName: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://8.140.179.55:3306/pipIrr_sp?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
      username: root
      password: dysql,;.abc!@#
      druid:
        # 数据源名称:当存在多个数据源时,设置名字可以很方便的来进行区分,默认自动生成名称,格式是:"DataSource-" + System.identityHashCode(this)
        name: druid-mysql-sp
        #配置初始化大小、最小、最大
        initialSize: 10
        minIdle: 10
        maxActive: 200
        # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁
        maxWait: 60000
        #配置间隔多久进行一次检测,检测需要关闭的空闲连接,单位毫秒。 默认是60s,太长可能会导致无法及时检测到连接中断
        timeBetweenEvictionRunsMillis: 60000
        #配置一个连接在连接池中的最小生存时间、最大生存时间,超过最大生存时间会被移除,单位毫秒。
        minEvictableIdleTimeMillis: 300000
        maxEvictableIdleTimeMillis: 900000
        #探活、验证链接有效性的查询,新版本默认使用mysqlPing代替
        #validation-query: select 1 #注释掉,采用默认的mysqlPing
        #配置从连接池获取连接时,当连接空闲时间大于timeBetweenEvictionRunsMillis时是否检查连接有效性,true每次都检查;false不检查。
        testWhileIdle: true
        #配置从连接池获取连接时和向连接池归还连接时,是否检查连接有效性
        #每次获取或归还连接都检测太频繁,除非特别重要或网络特别不可靠等情况,建议用testWhileIdle + timeBetweenEvictionRunsMillis代替。-->
        testOnBorrow: false
        testOnReturn: false
        #配置是否定期探活、探活间隔, 默认120s
        keepAlive: true
        #keepAliveBetweenTimeMillis must be greater than timeBetweenEvictionRunsMillis
        keepAliveBetweenTimeMillis: 1200000
        #配置一个连接最大使用次数,避免长时间使用相同连接造成服务器端负载不均衡。
        phyMaxUseCount: 1000
        #是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
        poolPreparedStatements: false
        #要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
        maxOpenPreparedStatements: -1
        #指定每个连接上PSCache的大小
        maxPoolPreparedStatementPerConnectionSize: 20
        #属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
        #监控统计用的filter:stat,日志用的filter:log4j,防御sql注入的filter:wall
        filters: stat,wall,config
        webStatFilter:
          # 添加过滤规则
          urlPattern: /*
          # 忽略过滤格式
          exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
          statViewServlet:
            # 设置ip白名单
            # allow: 127.0.0.1
            # 设置ip黑名单,优先级高于白名单
            deny:
            # 设置控制台管理用户
            #  loginUsername: root
            #  loginPassword: root
            # 是否可以重置数据
            resetEnable: false
            # 开启druid监控页面
            enabled: true
pipIrr-platform/pipIrr-global/src/main/resources/application-database.yml
@@ -5,4 +5,4 @@
        allow-bean-definition-overriding: true #设置为true时,后定义的bean会覆盖之前定义的相同名称的bean
    datasource: #配置数据源
        #多个数据源名称在此配置,要求与spring。datasource。[ym][pj]中的一致
        names: ym, pj
        names: ym, pj, sp
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
@@ -3,9 +3,7 @@
    datasource: #配置数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
#        url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
#        url: jdbc:mysql://8.140.179.55:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
        url: jdbc:mysql://8.140.179.55:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
        username: root
        password: dysql,;.abc!@#
        druid:
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
    profiles:
        include: global, database, database-ym, database-pj
        include: global, database, database-ym, database-pj, database-sp
#actutor的web端口
management:
pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
    profiles:
        include: global, database, database-ym, database-pj
        include: global, database, database-ym, database-pj, database-sp
user:
    defaultTrueRandomFalsePassword: true #true:采用默认密码,false:系统产生随机密码
    defaultPassword: "ABC123"
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    include: global, database, database-ym, database-pj
    include: global, database, database-ym, database-pj, database-sp
#actutor的web端口
management:
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    include: global, database, database-ym, database-pj
    include: global, database, database-ym, database-pj, database-sp
#actutor的web端口
management:
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Alarm.java
New file
@@ -0,0 +1,25 @@
package com.dy.pipIrrRemote.common.dto;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2024-07-04 11:44
 * @LastEditTime 2024-07-04 11:44
 * @Description 报警值子类
 */
@Data
public class Alarm extends DtoBase {
    public static final long serialVersionUID = 202407041337001L;
    /**
     * 剩余水量报警值
     */
    private Integer waterAlarm;
    /**
     * 剩余金额报警值
     */
    private Integer moneyAlarm;
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/CommandDeal.java
New file
@@ -0,0 +1,22 @@
package com.dy.pipIrrRemote.common.dto;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2024-07-04 14:01
 * @LastEditTime 2024-07-04 14:01
 * @Description 通用处理子类,用于通用处理接口
 */
@Data
public class CommandDeal extends DtoBase {
    public static final long serialVersionUID = 202407041401001L;
    /**
     * 功能码
     */
    @NotBlank(message = "功能码不能为空")
    private String commandCode;
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Domain.java
New file
@@ -0,0 +1,35 @@
package com.dy.pipIrrRemote.common.dto;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2024-07-05 8:55
 * @LastEditTime 2024-07-05 8:55
 * @Description 域名对象,包含通道号、域名、IP、端口号
 */
@Data
public class Domain extends DtoBase {
    public static final long serialVersionUID = 202407050857001L;
    /**
     * IP通道号,取值范围:1,2
     */
    private Integer channel;
    /**
     * 域名
     */
    private String domain;
    /**
     * IP地址
     */
    private String ip;
    /**
     * 端口号
     */
    private Integer port;
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/DrivenWell.java
New file
@@ -0,0 +1,25 @@
package com.dy.pipIrrRemote.common.dto;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2024-07-04 16:43
 * @LastEditTime 2024-07-04 16:43
 * @Description 机井子类
 */
@Data
public class DrivenWell extends DtoBase {
    public static final long serialVersionUID = 202407041644001L;
    /**
     * 机井年最大用水量
     */
    private Integer maxAmountYear;
    /**
     * 水位下限
     */
    private Double limitLevel;
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/WaterConsumption.java
New file
@@ -0,0 +1,20 @@
package com.dy.pipIrrRemote.common.dto;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2024-07-05 8:35
 * @LastEditTime 2024-07-05 8:35
 * @Description 终端年拥水量对象
 */
@Data
public class WaterConsumption extends DtoBase {
    public static final long serialVersionUID = 202407050835001L;
    /**
     * 设备终端年用水量
     */
    private Integer maxAmountYear;
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/result/RemoteResultCode.java
@@ -26,7 +26,7 @@
     * RTU
     */
    RTU_NOT_EXIST(20001, "阀控器不存在"),
    //RTU_ADDR_CANNOT_BE_NULL(20002, "阀控器地址不能为空");
    CLIENT_CARD_NOT_EXIST(30001, "水卡不存在");
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuCtrl.java
@@ -5,20 +5,19 @@
import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com97Vo;
import com.dy.common.mw.protocol.p206V202404.CodeV202404;
import com.dy.common.mw.protocol.p206V202404.downVos.ComCd10Vo;
import com.dy.common.mw.protocol.p206V202404.downVos.ComCdXyVo;
import com.dy.common.mw.protocol.p206V202404.downVos.*;
import com.dy.common.util.IDLongGenerator;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.pipIrrGlobal.command.ComSupport;
import com.dy.pipIrrGlobal.command.dto.Param;
import com.dy.pipIrrRemote.common.CommandSv;
import com.dy.pipIrrRemote.common.dto.Addr;
import com.dy.pipIrrRemote.common.dto.DtoBase;
import com.dy.pipIrrRemote.common.dto.*;
import com.dy.pipIrrRemote.result.RemoteResultCode;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
@@ -28,6 +27,7 @@
import org.springframework.web.bind.annotation.RestController;
import java.util.Objects;
import java.util.Optional;
/**
 * @author ZhuBaoMin
@@ -42,10 +42,79 @@
@RequiredArgsConstructor
public class RtuCtrl extends ComSupport {
    private final CommandSv commandSv;
    protected static String controllerType = "57";
    private final IDLongGenerator idLongGenerator;
    private String rtuResultSendWebUrl = "http://127.0.0.1:8081/remote/comRes/receive" ;
    @Value("${mw.rtuCallbackUrl_rm}")
    private String rtuCallbackUrl_rm;
    /**
     * 通用处理接口
     * 97   清除用水记录
     * 98   清除充值记录
     * 99   清除日记录
     * 9A   清除年用水量
     * 50   查询终端地址
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "common_deal", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> commonDeal(@RequestBody @Valid CommandDeal po, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        Long intakeId = po.getIntakeId();
        Long operator = po.getOperator();
        Long comId = idLongGenerator.generate();
        // 获取系统参数
        if(!setuped) {
            setUp();
        }
        // 取水口ID换阀控器地址及通讯协议
        JSONObject job_rtu = getRtu(intakeId, null);
        if(job_rtu == null) {
            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage());
        }
        String rtuAddr = job_rtu.getString("rtuAddr");
        String protocol = job_rtu.getString("protocol");
        // 获取功能码
        String commandCode = po.getCommandCode();
        if(protocol.equals("p206V202404")) {
            // 创建视图
            ComCdXyVo param = new ComCdXyVo();
            param.controllerType = controllerType;
            param.projectNo = projectNo;
            /**
             * 构造命令、发送命令并处理请求结果及执行结果
             * 1 准备参数
             * 2 调用公共方法
             */
            Param myParam = new Param();
            myParam.setComId(comId);
            myParam.setCommandCode(commandCode);
            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
            myParam.setIntakeId(intakeId);
            myParam.setRtuAddr(rtuAddr);
            myParam.setProtocol(protocol);
            myParam.setParam(param);
            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm);
            myParam.setOperator(operator);
            return dealWithCommandResult(myParam);
        } else if(protocol.equals("p206V1_0_1")) {
            // 创建视图
            Com97Vo param = new Com97Vo() ;
            return BaseResponseUtils.buildSuccess("");
        } else {
            return BaseResponseUtils.buildFail("系统暂不支持该协议");
        }
    }
    /**
     * 设置设备终端地址
@@ -103,7 +172,7 @@
            myParam.setRtuAddr(rtuAddr);
            myParam.setProtocol(protocol);
            myParam.setParam(param);
            myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl);
            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm);
            myParam.setOperator(operator);
            return dealWithCommandResult(myParam);
        } else if(protocol.equals("p206V1_0_1")) {
@@ -119,21 +188,22 @@
    }
    /**
     * 清除设备终端用水记录
     * 设置设备终端剩余水量和剩余金额报警值
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "clear_usage_record", consumes = MediaType.APPLICATION_JSON_VALUE)
    @PostMapping(path = "set_alarm", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> clearUsageRecord(@RequestBody @Valid DtoBase po, BindingResult bindingResult) {
    public BaseResponse<Boolean> setAlarm(@RequestBody @Valid Alarm po, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        //String commandCode = CodeV202404.cd_97;
        Long intakeId = po.getIntakeId();
        Integer waterAlarm = Optional.ofNullable(po.getWaterAlarm()).orElse(0);
        Integer moneyAlarm = Optional.ofNullable(po.getMoneyAlarm()).orElse(0);
        Long operator = po.getOperator();
        Long comId = idLongGenerator.generate();
@@ -153,12 +223,14 @@
        String commandCode = null;
        if(protocol.equals("p206V202404")) {
            // 获取功能码
            commandCode = CodeV202404.cd_97;
            commandCode = CodeV202404.cd_16;
            // 创建视图
            ComCdXyVo param = new ComCdXyVo();
            ComCd16Vo param = new ComCd16Vo();
            param.controllerType = controllerType;
            param.projectNo = projectNo;
            param.waterAlarm = waterAlarm;
            param.moneyAlarm = moneyAlarm;
            /**
             * 构造命令、发送命令并处理请求结果及执行结果
@@ -173,7 +245,301 @@
            myParam.setRtuAddr(rtuAddr);
            myParam.setProtocol(protocol);
            myParam.setParam(param);
            myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl);
            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm);
            myParam.setOperator(operator);
            return dealWithCommandResult(myParam);
        } else if(protocol.equals("p206V1_0_1")) {
            // 获取功能码
            commandCode = CodeV1_0_1.cd_10;
            // 创建视图
            Com97Vo param = new Com97Vo() ;
            return BaseResponseUtils.buildSuccess("");
        } else {
            return BaseResponseUtils.buildFail("系统暂不支持该协议");
        }
    }
    /**
     * 设置机井年最大开采量和水位下限
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "set_well", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> setWell(@RequestBody @Valid DrivenWell po, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        Long intakeId = po.getIntakeId();
        Integer maxAmountYear = Optional.ofNullable(po.getMaxAmountYear()).orElse(0);
        Double limitLevel = Optional.ofNullable(po.getLimitLevel()).orElse(0.0);
        Long operator = po.getOperator();
        Long comId = idLongGenerator.generate();
        // 获取系统参数
        if(!setuped) {
            setUp();
        }
        // 取水口ID换阀控器地址及通讯协议
        JSONObject job_rtu = getRtu(intakeId, null);
        if(job_rtu == null) {
            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage());
        }
        String rtuAddr = job_rtu.getString("rtuAddr");
        String protocol = job_rtu.getString("protocol");
        String commandCode = null;
        if(protocol.equals("p206V202404")) {
            // 获取功能码
            commandCode = CodeV202404.cd_22;
            // 创建视图
            ComCd22Vo param = new ComCd22Vo();
            param.controllerType = controllerType;
            param.projectNo = projectNo;
            param.maxAmountYear = maxAmountYear;
            param.limitLevel = limitLevel;
            /**
             * 构造命令、发送命令并处理请求结果及执行结果
             * 1 准备参数
             * 2 调用公共方法
             */
            Param myParam = new Param();
            myParam.setComId(comId);
            myParam.setCommandCode(commandCode);
            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
            myParam.setIntakeId(intakeId);
            myParam.setRtuAddr(rtuAddr);
            myParam.setProtocol(protocol);
            myParam.setParam(param);
            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm);
            myParam.setOperator(operator);
            return dealWithCommandResult(myParam);
        } else if(protocol.equals("p206V1_0_1")) {
            // 获取功能码
            commandCode = CodeV1_0_1.cd_10;
            // 创建视图
            Com97Vo param = new Com97Vo() ;
            return BaseResponseUtils.buildSuccess("");
        } else {
            return BaseResponseUtils.buildFail("系统暂不支持该协议");
        }
    }
    /**
     * 设置设备终端年用水量
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "set_max_amount", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> setMaxAmount(@RequestBody @Valid WaterConsumption po, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        Long intakeId = po.getIntakeId();
        Integer maxAmountYear = Optional.ofNullable(po.getMaxAmountYear()).orElse(0);
        Long operator = po.getOperator();
        Long comId = idLongGenerator.generate();
        // 获取系统参数
        if(!setuped) {
            setUp();
        }
        // 取水口ID换阀控器地址及通讯协议
        JSONObject job_rtu = getRtu(intakeId, null);
        if(job_rtu == null) {
            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage());
        }
        String rtuAddr = job_rtu.getString("rtuAddr");
        String protocol = job_rtu.getString("protocol");
        String commandCode = null;
        if(protocol.equals("p206V202404")) {
            // 获取功能码
            commandCode = CodeV202404.cd_26;
            // 创建视图
            ComCd26Vo param = new ComCd26Vo();
            param.controllerType = controllerType;
            param.projectNo = projectNo;
            param.maxAmountYear = maxAmountYear;
            /**
             * 构造命令、发送命令并处理请求结果及执行结果
             * 1 准备参数
             * 2 调用公共方法
             */
            Param myParam = new Param();
            myParam.setComId(comId);
            myParam.setCommandCode(commandCode);
            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
            myParam.setIntakeId(intakeId);
            myParam.setRtuAddr(rtuAddr);
            myParam.setProtocol(protocol);
            myParam.setParam(param);
            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm);
            myParam.setOperator(operator);
            return dealWithCommandResult(myParam);
        } else if(protocol.equals("p206V1_0_1")) {
            // 获取功能码
            commandCode = CodeV1_0_1.cd_10;
            // 创建视图
            Com97Vo param = new Com97Vo() ;
            return BaseResponseUtils.buildSuccess("");
        } else {
            return BaseResponseUtils.buildFail("系统暂不支持该协议");
        }
    }
    /**
     * 设置设备终端IP地址
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "set_ip", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> setIp(@RequestBody @Valid Domain po, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        Long intakeId = po.getIntakeId();
        Integer channel = po.getChannel();
        String ip = po.getIp();
        Integer port = po.getPort();
        Long operator = po.getOperator();
        Long comId = idLongGenerator.generate();
        // 获取系统参数
        if(!setuped) {
            setUp();
        }
        // 取水口ID换阀控器地址及通讯协议
        JSONObject job_rtu = getRtu(intakeId, null);
        if(job_rtu == null) {
            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage());
        }
        String rtuAddr = job_rtu.getString("rtuAddr");
        String protocol = job_rtu.getString("protocol");
        String commandCode = null;
        if(protocol.equals("p206V202404")) {
            // 获取功能码
            commandCode = CodeV202404.cd_21;
            // 创建视图
            ComCd21Vo param = new ComCd21Vo();
            param.controllerType = controllerType;
            param.projectNo = projectNo;
            param.channel = channel;
            param.ip = ip;
            param.port = port;
            /**
             * 构造命令、发送命令并处理请求结果及执行结果
             * 1 准备参数
             * 2 调用公共方法
             */
            Param myParam = new Param();
            myParam.setComId(comId);
            myParam.setCommandCode(commandCode);
            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
            myParam.setIntakeId(intakeId);
            myParam.setRtuAddr(rtuAddr);
            myParam.setProtocol(protocol);
            myParam.setParam(param);
            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm);
            myParam.setOperator(operator);
            return dealWithCommandResult(myParam);
        } else if(protocol.equals("p206V1_0_1")) {
            // 获取功能码
            commandCode = CodeV1_0_1.cd_10;
            // 创建视图
            Com97Vo param = new Com97Vo() ;
            return BaseResponseUtils.buildSuccess("");
        } else {
            return BaseResponseUtils.buildFail("系统暂不支持该协议");
        }
    }
    /**
     * 设置设备终端域名
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "set_domain", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> setDomain(@RequestBody @Valid Domain po, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        Long intakeId = po.getIntakeId();
        Integer channel = po.getChannel();
        String domain = po.getDomain();
        Integer port = po.getPort();
        Long operator = po.getOperator();
        Long comId = idLongGenerator.generate();
        // 获取系统参数
        if(!setuped) {
            setUp();
        }
        // 取水口ID换阀控器地址及通讯协议
        JSONObject job_rtu = getRtu(intakeId, null);
        if(job_rtu == null) {
            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage());
        }
        String rtuAddr = job_rtu.getString("rtuAddr");
        String protocol = job_rtu.getString("protocol");
        String commandCode = null;
        if(protocol.equals("p206V202404")) {
            // 获取功能码
            commandCode = CodeV202404.cd_23;
            // 创建视图
            ComCd23Vo param = new ComCd23Vo();
            param.controllerType = controllerType;
            param.projectNo = projectNo;
            param.channel = channel;
            param.domain = domain;
            param.port = port;
            /**
             * 构造命令、发送命令并处理请求结果及执行结果
             * 1 准备参数
             * 2 调用公共方法
             */
            Param myParam = new Param();
            myParam.setComId(comId);
            myParam.setCommandCode(commandCode);
            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
            myParam.setIntakeId(intakeId);
            myParam.setRtuAddr(rtuAddr);
            myParam.setProtocol(protocol);
            myParam.setParam(param);
            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm);
            myParam.setOperator(operator);
            return dealWithCommandResult(myParam);
        } else if(protocol.equals("p206V1_0_1")) {
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
    profiles:
        include: global, database, database-ym, database-pj
        include: global, database, database-ym, database-pj, database-sp
#actutor的web端口
management:
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
@@ -411,7 +411,19 @@
            return BaseResponseUtils.buildErrorMsg(SellResultCode.CANCEL_FAIL_WRITE_CANCELL_ERROR.getMessage());
        }
        return BaseResponseUtils.buildSuccess(true) ;
        //return BaseResponseUtils.buildSuccess(true) ;
        cardNumS = String.valueOf(cardNum).trim();
        if(cardNumS.substring(0,2).equals("10")) {
            cardNumS = cardNumS.substring(6, 12) + cardNumS.substring(13);
        }
        cardNum = Long.valueOf(cardNumS);
        Map map_response = new HashMap();
        map_response.put("projectNo", String.format("%02x", Integer.parseInt(cardOperateSv.getProjectNo())));
        map_response.put("orderNumber", rec);
        map_response.put("cardNum", cardNum);
        return BaseResponseUtils.buildSuccess(map_response) ;
    }
    /**
@@ -507,7 +519,18 @@
            return BaseResponseUtils.buildErrorMsg(SellResultCode.LOSS_FAIL_WRITE_LOSS_ERROR.getMessage());
        }
        return BaseResponseUtils.buildSuccess(true) ;
        //return BaseResponseUtils.buildSuccess(true) ;
        cardNumS = String.valueOf(cardNum).trim();
        if(cardNumS.substring(0,2).equals("10")) {
            cardNumS = cardNumS.substring(6, 12) + cardNumS.substring(13);
        }
        cardNum = Long.valueOf(cardNumS);
        Map map_response = new HashMap();
        map_response.put("projectNo", String.format("%02x", Integer.parseInt(cardOperateSv.getProjectNo())));
        map_response.put("orderNumber", rec);
        map_response.put("cardNum", cardNum);
        return BaseResponseUtils.buildSuccess(map_response) ;
    }
    /**
@@ -598,7 +621,19 @@
            return BaseResponseUtils.buildErrorMsg(SellResultCode.REVERSAL_FAIL_WRITE_REVERSAL_ERROR.getMessage());
        }
        return BaseResponseUtils.buildSuccess(true) ;
        //return BaseResponseUtils.buildSuccess(true) ;
        cardNumS = String.valueOf(cardNum).trim();
        if(cardNumS.substring(0,2).equals("10")) {
            cardNumS = cardNumS.substring(6, 12) + cardNumS.substring(13);
        }
        cardNum = Long.valueOf(cardNumS);
        Map map_response = new HashMap();
        map_response.put("projectNo", String.format("%02x", Integer.parseInt(cardOperateSv.getProjectNo())));
        map_response.put("orderNumber", rec);
        map_response.put("cardNum", cardNum);
        return BaseResponseUtils.buildSuccess(map_response) ;
    }
    /**
@@ -778,7 +813,19 @@
            return BaseResponseUtils.buildErrorMsg(SellResultCode.UNLOCK_FAIL_WRITE_UNLOCK_ERROR.getMessage());
        }
        return BaseResponseUtils.buildSuccess(true) ;
        //return BaseResponseUtils.buildSuccess(true) ;
        cardNumS = String.valueOf(cardNum).trim();
        if(cardNumS.substring(0,2).equals("10")) {
            cardNumS = cardNumS.substring(6, 12) + cardNumS.substring(13);
        }
        cardNum = Long.valueOf(cardNumS);
        Map map_response = new HashMap();
        map_response.put("projectNo", String.format("%02x", Integer.parseInt(cardOperateSv.getProjectNo())));
        map_response.put("orderNumber", rec);
        map_response.put("cardNum", cardNum);
        return BaseResponseUtils.buildSuccess(map_response) ;
    }
    /**
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    include: global, database, database-ym, database-pj
    include: global, database, database-ym, database-pj, database-sp
#actutor的web端口
management:
pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
    profiles:
        include: global, database, database-ym, database-pj
        include: global, database, database-ym, database-pj, database-sp
#actutor的web端口
management:
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
    profiles:
        include: global, database, database-ym, database-pj
        include: global, database, database-ym, database-pj, database-sp
#actutor的web端口
management: