Administrator
2024-01-17 9a1ea7a666a5c9acb189ddad066bd43312291251
2024-01-16 朱宝民 取水口与控制器的绑定与解绑
9个文件已修改
200 ■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerTrampMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerTrampMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/DtoIntakeController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerCtrl.java 93 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerSv.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java
@@ -72,4 +72,18 @@
     * @return
     */
    Integer getRecordCountOfController(@Param("controllerId") Long controllerId);
    /**
     * 根据控制器编号获取已绑定记录数
     * @param controllerId
     * @return
     */
    Integer getBindedCount(@Param("controllerId") Long controllerId);
    /**
     * 根据控制器编号删除取水口编号
     * @param controllerId
     * @return
     */
    Integer deleteIntakeId(@Param("controllerId") Long controllerId);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerTrampMapper.java
@@ -63,4 +63,18 @@
     * @return update count
     */
    int updateByPrimaryKey(PrControllerTramp record);
    /**
     * 根据控制器编号获取流浪控制器地址
     * @param controllerId 流浪控制器编号
     * @return 记录数量
     */
    //String getTrampRtuAddr(@Param("controllerId") Long controllerId);
    /**
     * 根据控制器编号获取流浪控制器信息
     * @param controllerId
     * @return
     */
    PrControllerTramp getTrampControllerInfo(@Param("controllerId") Long controllerId);
}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
@@ -158,6 +158,11 @@
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!--根据控制器编号删除取水口编号-->
  <update id="deleteIntakeId">
    UPDATE pr_controller SET intakeId = null WHERE id = ${controllerId}
  </update>
  <!--根据指定条件获取控制器记录数-->
  <select id="getRecordCount" resultType="java.lang.Long">
    SELECT
@@ -237,4 +242,9 @@
  <select id="getRecordCountOfController" resultType="java.lang.Integer">
    SELECT COUNT(*) AS recordCount FROM pr_controller WHERE deleted = 0 AND id = ${controllerId}
  </select>
  <!--根据控制器编号获取已绑定记录数-->
  <select id="getBindedCount" resultType="java.lang.Integer">
    SELECT COUNT(*) AS recordCount FROM pr_controller WHERE rtuAddr = (SELECT rtuAddr FROM pr_controller_tramp WHERE id = ${controllerId}) AND intakeId IS NOT NULL
  </select>
</mapper>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerTrampMapper.xml
@@ -97,4 +97,14 @@
      findDt = #{findDt,jdbcType=TIMESTAMP}
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!--根据控制器编号获取流浪控制器地址-->
<!--  <select id="getTrampRtuAddr" resultType="java.lang.String">-->
<!--    SELECT rtuAddr FROM pr_controller_tramp WHERE id = ${controllerId}-->
<!--  </select>-->
  <!--根据控制器编号获取流浪控制器信息-->
  <select id="getTrampControllerInfo" resultMap="BaseResultMap">
    SELECT rtuAddr, protocol, findDt FROM pr_controller_tramp WHERE id = ${controllerId}
  </select>
</mapper>
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java
@@ -94,7 +94,29 @@
        return rsVo ;
    }
    /**
     * 根据控制器编号获取未删除的控制器数量
     * @param controllerId
     * @return
     */
    public Integer getRecordCountOfController(Long controllerId) {
        return prControllerMapper.getRecordCountOfController(controllerId);
    }
    /**
     * 根据控制器编号获取已绑定记录数
     * @param controllerId
     * @return
     */
    public Integer getBindedCount(Long controllerId) {
        return prControllerMapper.getBindedCount(controllerId);
    }
    /**
     * 根据主键删除外键
     * @param controllerId
     * @return
     */
    public Integer deleteIntakeId(Long controllerId) {
        return prControllerMapper.deleteIntakeId(controllerId);
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/DtoIntakeController.java
@@ -19,14 +19,14 @@
    public static final long serialVersionUID = 1L;
    /**
     * 取水口编号
     * 取水口ID
     */
    @Schema(description = "取水口ID", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "取水口ID不能为空")
    private Long intakeId;
    /**
     * 控制器编号
     * 控制器ID
     */
    @Schema(description = "控制器ID", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "控制器ID不能为空")
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerCtrl.java
@@ -6,6 +6,8 @@
import com.dy.common.webUtil.QueryResultVo;
import com.dy.common.webUtil.ResultCodeMsg;
import com.dy.pipIrrGlobal.pojoBa.BaClient;
import com.dy.pipIrrGlobal.pojoPr.PrController;
import com.dy.pipIrrGlobal.pojoPr.PrControllerTramp;
import com.dy.pipIrrGlobal.pojoPr.PrIntakeController;
import com.dy.pipIrrProject.controller.ControllerSv;
import com.dy.pipIrrProject.intake.IntakeSv;
@@ -24,6 +26,8 @@
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -44,9 +48,15 @@
    private final ControllerSv controllerSv;
    /**
     * 添加取水口/控制器捆绑记录
     *      若取水口或控制器不存在需提示用户
     *      若取水口已经与控制器绑定需提示用户
     * 取水口绑定控制器
     * 1. 接收取水口ID及流浪控制器ID,并验证取水口和控制器是否存在
     * 2. 判断该控制器是否存在未解绑记录,如果存在提示用户该控制器存在未解绑记录
     * 3. 组装控制器对象插入控制器表中
     * 4. 添加绑定记录
     * 5. 删除流浪控制器(物理删除)
     * @param po
     * @param bindingResult
     * @return
     */
    @Operation(summary = "添加绑定记录", description = "添加绑定记录")
    @ApiResponses(value = {
@@ -60,39 +70,70 @@
    @PostMapping(path = "bind", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> bind(@RequestBody @Valid DtoIntakeController po, BindingResult bindingResult){
    public BaseResponse<Boolean> bind(@RequestBody @Valid DtoIntakeController po, BindingResult bindingResult) throws ParseException {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        // 根据编号分别获取取水口、控制器未删除记录数
        Integer recIntke = Optional.ofNullable(intakeSv.getRecordCountOfIntake(po.getIntakeId())).orElse(0);
        Integer recController = Optional.ofNullable(controllerSv.getRecordCountOfController(po.getControllerId())).orElse(0);
        if(recIntke == 0 || recController == 0) {
        // 接收参数
        Long intakeId = po.getIntakeId();
        Long controllerId = po.getControllerId();
        String remarks = po.getRemarks();
        Long operator = po.getOperator();
        // 根据编号分别获取取水口记录数、流浪控制器信息,判断取水口及控制器是否存在
        Integer recIntke = Optional.ofNullable(intakeSv.getRecordCountOfIntake(intakeId)).orElse(0);
        PrControllerTramp prControllerTramp = intakeControllerSv.getTrampControllerInfo(controllerId);
        //Map map_TrampController = Optional.ofNullable(intakeControllerSv.getTrampControllerInfo(controllerId)).orElse(new HashMap());
        if(recIntke == 0 || prControllerTramp == null) {
            return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_OR_CONTROLLER_NO_EXIST.getMessage());
        }
        Integer recordCount = Optional.ofNullable(intakeControllerSv.getBindRecordCount(po.getIntakeId(), po.getControllerId(), (byte)1)).orElse(0);
        if(recordCount > 0) {
            return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_HAS_BINDED_CONTROLLER.getMessage());
        // 根据控制器编号判断该控制器是否存在未解绑记录
        Integer recBinded = Optional.ofNullable(controllerSv.getBindedCount(controllerId)).orElse(0);
        if(recBinded > 0) {
            return BaseResponseUtils.buildFail(ProjectResultCode.CONTROLLER_BINDED.getMessage());
        }
        PrIntakeController prIntakeController = DtoToPojo.INSTANCT.po2vo(po);
        // 添加控制器记录
        PrController prController = new PrController();
        prController.setIntakeId(intakeId);
        prController.setRtuAddr(prControllerTramp.getRtuAddr());
        prController.setProtocol(prControllerTramp.getProtocol());
        prController.setFindDt(prControllerTramp.getFindDt());
        prController.setAddWays((byte)1);
        prController.setOperator(operator);
        Date operateTime = new Date();
        prController.setOperateDt(operateTime);
        prController.setDeleted((byte)0);
        Integer rec_addController = Optional.ofNullable(controllerSv.addController(prController)).orElse(0);
        if(rec_addController == 0) {
            return BaseResponseUtils.buildFail(ProjectResultCode.BIND_FAIL.getMessage());
        }
        // 添加绑定记录
        PrIntakeController prIntakeController = DtoToPojo.INSTANCT.po2vo(po);
        prIntakeController.setOperatedt(operateTime);
        prIntakeController.setOperatetype((byte)1);
        Integer rec = Optional.ofNullable(intakeControllerSv.addRecord(prIntakeController)).orElse(0);
        if(rec == 0) {
            return BaseResponseUtils.buildFail(ProjectResultCode.BIND_FAIL.getMessage());
        }
        // 根据流浪控制器编号删除流浪控制器记录
        intakeControllerSv.deleteTrampController(controllerId);
        return BaseResponseUtils.buildSuccess(true) ;
    }
    /**
     * 添加取水口/控制器解绑记录
     * 1. 判断取水口是否存在
     * 2. 判断控制器是否存在
     * 3. 判断取水口、控制器解绑关系是否已存在
     * 取水口解绑控制器
     * 1. 接收取水口ID及流浪控制器ID,并验证取水口和控制器是否存在
     * 2. 添加解绑记录
     * 3. 删除控制器外键
     * @param po
     * @param bindingResult
     * @return
     */
    @Operation(summary = "添加解绑记录", description = "添加解绑记录")
    @ApiResponses(value = {
@@ -118,20 +159,28 @@
            return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_OR_CONTROLLER_NO_EXIST.getMessage());
        }
        Integer recordCount = Optional.ofNullable(intakeControllerSv.getBindRecordCount(po.getIntakeId(), po.getControllerId(), (byte)2)).orElse(0);
        if(recordCount > 0) {
            return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_CONTROLLER_HAS_UNBOUND.getMessage());
        }
        // 判断最后操作记录是否为解绑记录
        //Integer recordCount = Optional.ofNullable(intakeControllerSv.getBindRecordCount(po.getIntakeId(), po.getControllerId(), (byte)2)).orElse(0);
        //if(recordCount > 0) {
        //    return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_CONTROLLER_HAS_UNBOUND.getMessage());
        //}
        // 添加解绑记录
        PrIntakeController prIntakeController = DtoToPojo.INSTANCT.po2vo(po);
        Date operateTime = new Date();
        prIntakeController.setOperatedt(operateTime);
        prIntakeController.setOperatetype((byte)2);
        Integer rec = Optional.ofNullable(intakeControllerSv.addRecord(prIntakeController)).orElse(0);
        if(rec == 0) {
            return BaseResponseUtils.buildFail(ProjectResultCode.BIND_FAIL.getMessage());
        }
        // 删除控制器外键
        Integer rec_deleteIntakeId = Optional.ofNullable(controllerSv.deleteIntakeId(po.getControllerId())).orElse(0);
        if(rec_deleteIntakeId == 0) {
            return BaseResponseUtils.buildFail(ProjectResultCode.BIND_FAIL.getMessage());
        }
        return BaseResponseUtils.buildSuccess(true) ;
    }
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerSv.java
@@ -1,6 +1,8 @@
package com.dy.pipIrrProject.intakeController;
import com.dy.pipIrrGlobal.daoPr.PrControllerTrampMapper;
import com.dy.pipIrrGlobal.daoPr.PrIntakeControllerMapper;
import com.dy.pipIrrGlobal.pojoPr.PrControllerTramp;
import com.dy.pipIrrGlobal.pojoPr.PrIntakeController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +23,9 @@
public class IntakeControllerSv {
    @Autowired
    private PrIntakeControllerMapper prIntakeControllerMapper;
    @Autowired
    private PrControllerTrampMapper prControllerTrampMapper;
    /**
     * 根据取水口编号、控制器编号、操作类别获取记录数量
@@ -59,4 +64,31 @@
    List<Map<String, Object>> getBindsByControllerId(Long controllerId) {
        return prIntakeControllerMapper.getBindsByControllerId(controllerId);
    }
    /**
     * 根据控制器编号获取流浪控制器地址
     * @param controllerId 流浪控制器编号
     * @return 流浪控制器地址
     */
    //public String getTrampRtuAddr(Long controllerId) {
    //    return prControllerTrampMapper.getTrampRtuAddr(controllerId);
    //}
    /**
     * 根据控制器编号获取流浪控制器信息
     * @param controllerId
     * @return
     */
    public PrControllerTramp getTrampControllerInfo(Long controllerId) {
        return prControllerTrampMapper.getTrampControllerInfo(controllerId);
    }
    /**
     * 根据流浪控制器编号删除流浪控制器记录
     * @param controllerId
     * @return
     */
    public Integer deleteTrampController(Long controllerId) {
        return prControllerTrampMapper.deleteByPrimaryKey(controllerId);
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java
@@ -46,6 +46,7 @@
    INTAKE_NO_RECORDS(40004, "该取水口无绑定记录"),
    CONTROLLER_NO_RECORDS(40005, "该控制器无绑定记录"),
    INTAKE_OR_CONTROLLER_NO_EXIST(40006, "取水口或控制器不存在"),
    CONTROLLER_BINDED(40007, "该控制器尚未解绑"),
    /**
     * 流量监测站