pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerTrampMapper.java
@@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; /** * @Author liurunyu @@ -77,4 +78,17 @@ * @return */ PrControllerTramp getTrampControllerInfo(@Param("controllerId") Long controllerId); /** * 条件查询流浪控制器信息 * @param * @return */ List<PrControllerTramp> getTrampControllers(Map<?, ?> params); /** * 条件查询流浪控制器数量 * @param * @return recordCount */ Long getTrampControllersCount(Map<?, ?> params); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeControllerMapper.java
@@ -52,4 +52,11 @@ * @return 取水口与控制器绑定列表 */ List<Map<String, Object>> getBindsByControllerId(@Param("controllerId") Long controllerId); /** * 修改绑定记录通过取水口 * @param record * @return */ int updateByIntakeSelective(PrIntakeController record); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrControllerTramp.java
@@ -61,7 +61,7 @@ * 发现时间 */ @Schema(description = "发现时间", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "发现时间不能为空") // @NotNull(message = "发现时间不能为空") public Date findDt;//发现时间( yyyy-mm-dd HH:MM:SS) } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoIntake.java
@@ -88,4 +88,14 @@ @ExcelProperty("备注") @ColumnWidth(250) private String remarks; @Schema(title = "控制器ID") @ExcelProperty("控制器ID") @ColumnWidth(15) private String controllerId; @Schema(title = "控制器地址") @ExcelProperty("控制器地址") @ColumnWidth(15) private String rtuAddr; } pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
@@ -247,7 +247,7 @@ 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> pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerTrampMapper.xml
@@ -15,7 +15,7 @@ </sql> <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> <!--@mbg.generated--> select select <include refid="Base_Column_List" /> from pr_controller_tramp where id = #{id,jdbcType=BIGINT} @@ -36,7 +36,7 @@ </delete> <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrControllerTramp"> <!--@mbg.generated--> insert into pr_controller_tramp (id, rtuAddr, protocol, insert into pr_controller_tramp (id, rtuAddr, protocol, findDt) values (#{id,jdbcType=BIGINT}, #{rtuAddr,jdbcType=VARCHAR}, #{protocol,jdbcType=VARCHAR}, #{findDt,jdbcType=TIMESTAMP}) @@ -107,4 +107,43 @@ <select id="getTrampControllerInfo" resultMap="BaseResultMap"> SELECT rtuAddr, protocol, findDt FROM pr_controller_tramp WHERE id = ${controllerId} </select> <!-- 根据条件获取流浪控制器信息--> <select id="getTrampControllers" resultMap="BaseResultMap"> select CAST(id AS char)AS id, rtuAddr, protocol, findDt FROM pr_controller_tramp <where> <if test="id != null and id !=''"> id = #{id,jdbcType=VARCHAR} </if> <if test="rtuAddr != null and rtuAddr != ''"> AND rtuAddr = #{rtuAddr,jdbcType=VARCHAR} </if> <if test="protocol != null and protocol != ''"> AND protocol = #{protocol,jdbcType=VARCHAR} </if> </where> </select> <!-- 根据条件获取流浪控制器数量--> <select id="getTrampControllersCount" resultType="java.lang.Long"> select COUNT(*) AS recordCount FROM pr_controller_tramp <where> <if test="id != null and id !=''"> id = #{id,jdbcType=VARCHAR} </if> <if test="rtuAddr != null and rtuAddr != ''"> AND rtuAddr = #{rtuAddr,jdbcType=VARCHAR} </if> <if test="protocol != null and protocol != ''"> AND protocol = #{protocol,jdbcType=VARCHAR} </if> </where> </select> </mapper> pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeControllerMapper.xml
@@ -186,4 +186,26 @@ </if> ORDER BY ic.operateDt DESC </select> <!--根据取水口编号修改绑定记录列表--> <update id="updateByIntakeSelective"> update pr_intake_controller <set> <if test="controllerid != null"> controllerId = #{controllerid,jdbcType=BIGINT}, </if> <if test="operatetype != null"> operateType = #{operatetype,jdbcType=TINYINT}, </if> <if test="remarks != null"> remarks = #{remarks,jdbcType=VARCHAR}, </if> <if test="operator != null"> `operator` = #{operator,jdbcType=BIGINT}, </if> <if test="operatedt != null"> operateDt = #{operatedt,jdbcType=TIMESTAMP}, </if> </set> where intakeId = #{intakeid,jdbcType=BIGINT} </update> </mapper> pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
@@ -219,6 +219,7 @@ LEFT JOIN ba_district country ON ge.countyId = country.id LEFT JOIN ba_district town ON ge.townId = town.id LEFT JOIN ba_district village ON ge.villageId = village.id LEFT JOIN pr_controller cont ON ge.id = cont.intakeId <where> ge.deleted = 0 AND divi.deleted = 0 @@ -259,6 +260,8 @@ divi.`name` AS divideName, CAST(blo.id AS char) AS blockId, blo.`name` AS blockName, CAST(cont.id AS char) AS controllerId, cont.rtuAddr AS rtuAddr, ge.lng, ge.lat, ge.remarks, @@ -275,6 +278,7 @@ LEFT JOIN ba_district country ON ge.countyId = country.id LEFT JOIN ba_district town ON ge.townId = town.id LEFT JOIN ba_district village ON ge.villageId = village.id LEFT JOIN pr_controller cont ON ge.id = cont.intakeId <where> ge.deleted = 0 AND divi.deleted = 0 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java
@@ -4,6 +4,8 @@ import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.dy.common.mw.protocol.Command; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrGlobal.daoPr.PrControllerMapper; import com.dy.pipIrrGlobal.daoPr.PrIntakeControllerMapper; @@ -11,6 +13,7 @@ import com.dy.pipIrrGlobal.pojoPr.PrController; import com.dy.pipIrrGlobal.pojoPr.PrIntakeController; import com.dy.pipIrrGlobal.voPr.VoController; import com.dy.pipIrrProject.result.ProjectResultCode; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.utils.PojoUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -80,7 +83,10 @@ * @return */ public Integer addController(PrController po) { prControllerMapper.insert(po); int rows = prControllerMapper.insert(po); if(rows == 0) { return 0; } PrIntakeController addPrIntakeController = new PrIntakeController(); addPrIntakeController.setIntakeid(po.getIntakeId()); addPrIntakeController.setControllerid(po.getId()); @@ -88,8 +94,11 @@ addPrIntakeController.setOperator(po.getOperator()); addPrIntakeController.setOperatedt(po.getOperateDt()); addPrIntakeController.setRemarks("绑定"); prIntakeControllerMapper.insert(addPrIntakeController); return 1; int rec = prIntakeControllerMapper.insert(addPrIntakeController); if(rec == 0) { return 0; } return 1 ; } /** pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/DtoIntakeController.java
@@ -26,10 +26,10 @@ private Long intakeId; /** * 控制器ID * (流浪)控制器ID */ @Schema(description = "控制器ID", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "控制器ID不能为空") @Schema(description = "绑定时为流浪控制器ID/解绑时为控制器ID", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "(流浪)控制器ID不能为空") private Long controllerId; /** pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerCtrl.java
@@ -1,5 +1,7 @@ package com.dy.pipIrrProject.intakeController; import cn.hutool.core.date.DateTime; import com.dy.common.aop.SsoAop; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; @@ -40,7 +42,7 @@ @Slf4j @Tag(name = "取水口/控制器关联管理", description = "取水口/控制器关联操作") @RestController @RequestMapping(path="intake_controller") @RequestMapping(path = "intake_controller") @RequiredArgsConstructor public class IntakeControllerCtrl { private final IntakeControllerSv intakeControllerSv; @@ -51,9 +53,10 @@ * 取水口绑定控制器 * 1. 接收取水口ID及流浪控制器ID,并验证取水口和控制器是否存在 * 2. 判断该控制器是否存在未解绑记录,如果存在提示用户该控制器存在未解绑记录 * 3. 组装控制器对象插入控制器表中 * 4. 添加绑定记录 * 3. 组装控制器对象插入控制器表中(及添加绑定记录) * 4. 修改绑定记录设置备注 * 5. 删除流浪控制器(物理删除) * * @param po * @param bindingResult * @return @@ -72,26 +75,26 @@ @SsoAop() 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()){ if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } // 接收参数 Long intakeId = po.getIntakeId(); Long controllerId = po.getControllerId(); Long trampControllerId = po.getControllerId(); String remarks = po.getRemarks(); Long operator = po.getOperator(); // 根据编号分别获取取水口记录数、流浪控制器信息,判断取水口及控制器是否存在 Integer recIntke = Optional.ofNullable(intakeSv.getRecordCountOfIntake(intakeId)).orElse(0); PrControllerTramp prControllerTramp = intakeControllerSv.getTrampControllerInfo(controllerId); PrControllerTramp prControllerTramp = intakeControllerSv.getTrampControllerInfo(trampControllerId); //Map map_TrampController = Optional.ofNullable(intakeControllerSv.getTrampControllerInfo(controllerId)).orElse(new HashMap()); if(recIntke == 0 || prControllerTramp == null) { if (recIntke == 0 || prControllerTramp == null) { return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_OR_CONTROLLER_NO_EXIST.getMessage()); } // 根据控制器编号判断该控制器是否存在未解绑记录 Integer recBinded = Optional.ofNullable(controllerSv.getBindedCount(controllerId)).orElse(0); if(recBinded > 0) { Integer recBinded = Optional.ofNullable(controllerSv.getBindedCount(trampControllerId)).orElse(0); if (recBinded > 0) { return BaseResponseUtils.buildFail(ProjectResultCode.CONTROLLER_BINDED.getMessage()); } @@ -101,29 +104,31 @@ prController.setRtuAddr(prControllerTramp.getRtuAddr()); prController.setProtocol(prControllerTramp.getProtocol()); prController.setFindDt(prControllerTramp.getFindDt()); prController.setAddWays((byte)1); prController.setAddWays((byte) 1); prController.setOperator(operator); Date operateTime = new Date(); prController.setOperateDt(operateTime); prController.setDeleted((byte)0); prController.setDeleted((byte) 0); Integer rec_addController = Optional.ofNullable(controllerSv.addController(prController)).orElse(0); if(rec_addController == 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) { // 修改绑定记录 PrIntakeController prIntakeController = new PrIntakeController(); prIntakeController.setRemarks(remarks); prIntakeController.setIntakeid(intakeId); Integer rec = Optional.ofNullable(intakeControllerSv.updateBindRecord(prIntakeController)).orElse(0); if (rec == 0) { return BaseResponseUtils.buildFail(ProjectResultCode.BIND_FAIL.getMessage()); } // 根据流浪控制器编号删除流浪控制器记录 intakeControllerSv.deleteTrampController(controllerId); intakeControllerSv.deleteTrampController(trampControllerId); return BaseResponseUtils.buildSuccess(true) ; return BaseResponseUtils.buildSuccess(true); } /** @@ -131,6 +136,7 @@ * 1. 接收取水口ID及流浪控制器ID,并验证取水口和控制器是否存在 * 2. 添加解绑记录 * 3. 删除控制器外键 * * @param po * @param bindingResult * @return @@ -147,15 +153,15 @@ @PostMapping(path = "unbind", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> unbind(@RequestBody @Valid DtoIntakeController po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ public BaseResponse<Boolean> unbind(@RequestBody @Valid DtoIntakeController po, BindingResult bindingResult) { 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) { if (recIntke == 0 || recController == 0) { return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_OR_CONTROLLER_NO_EXIST.getMessage()); } @@ -169,23 +175,24 @@ PrIntakeController prIntakeController = DtoToPojo.INSTANCT.po2vo(po); Date operateTime = new Date(); prIntakeController.setOperatedt(operateTime); prIntakeController.setOperatetype((byte)2); prIntakeController.setOperatetype((byte) 2); Integer rec = Optional.ofNullable(intakeControllerSv.addRecord(prIntakeController)).orElse(0); if(rec == 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) { if (rec_deleteIntakeId == 0) { return BaseResponseUtils.buildFail(ProjectResultCode.BIND_FAIL.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; return BaseResponseUtils.buildSuccess(true); } /** * 根据取水口编号获取绑定记录列表 * * @param intakeId 取水口编号 * @return 取水口下控制器的绑定、解绑记录 */ @@ -200,22 +207,23 @@ }) @GetMapping(path = "intake_binds") @SsoAop() public BaseResponse<QueryResultVo<List<Map<String, Object>>>> getBindsByIntakeId(Long intakeId){ public BaseResponse<QueryResultVo<List<Map<String, Object>>>> getBindsByIntakeId(Long intakeId) { try { List<Map<String, Object>> list = Optional.ofNullable(intakeControllerSv.getBindsByIntakeId(intakeId)).orElse(new ArrayList<>()); if(list.size() <= 0) { if (list.size() <= 0) { //无绑定记录也返回成功 但数据为空 return BaseResponseUtils.buildSuccess(list); }//成功返回绑定记录数据 return BaseResponseUtils.buildSuccess(list); } catch (Exception e) { log.error("查询农户异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; log.error("查询异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } /** * 根据控制器编号获取绑定记录列表 * * @param controllerId 控制器编号 * @return 与该控制器相关的绑定、解绑记录 */ @@ -230,16 +238,92 @@ }) @GetMapping(path = "controller_binds") @SsoAop() public BaseResponse<QueryResultVo<List<Map<String, Object>>>> getBindsByControllerId(Long controllerId){ public BaseResponse<QueryResultVo<List<Map<String, Object>>>> getBindsByControllerId(Long controllerId) { try { List<Map<String, Object>> list = Optional.ofNullable(intakeControllerSv.getBindsByControllerId(controllerId)).orElse(new ArrayList<>()); if(list.size() <= 0) { return BaseResponseUtils.buildFail(ProjectResultCode.CONTROLLER_NO_RECORDS.getMessage()); if (list.size() <= 0) { //无绑定记录也返回成功 但数据为空 return BaseResponseUtils.buildSuccess(list); } return BaseResponseUtils.buildSuccess(list); } catch (Exception e) { log.error("查询农户异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; log.error("查询异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } /** * 根据指定条件获取流浪控制器列表 * * @param vo 查询条件 * @return 符合条件的控制器列表 */ @Operation(summary = "获得一页流浪控制器记录", description = "返回一页流浪控制器数据") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回一页流浪控制器数据(BaseResponse.content:QueryResultVo[{}])", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = PrControllerTramp.class))} ) }) @GetMapping(path = "/getTrampControllers") @SsoAop() public BaseResponse<QueryResultVo<List<PrControllerTramp>>> getTrampControllers(TrampControllerQueryVo vo) { try { QueryResultVo<List<PrControllerTramp>> res = intakeControllerSv.getTrampControllers(vo); if (res.itemTotal != null && res.itemTotal > 0) { return BaseResponseUtils.buildSuccess(res); } else { //请求成功但数据为空 return BaseResponseUtils.buildSuccess(res); } //return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取流浪控制器记录异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } /** * 添加流浪控制器 * * @param pct * @return */ @PostMapping("addTrampController") @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> addTrampController(@RequestBody PrControllerTramp pct) { pct.setFindDt(new Date()); Integer rows = intakeControllerSv.addTrampController(pct); if (rows == 0) { return BaseResponseUtils.buildFail(ProjectResultCode.ADD_TRAMP_CONTROLLER_FAIL.getMessage()); } return BaseResponseUtils.buildSuccess(true); } /** * 删除流浪控制器 * * @param id * @return */ @PostMapping("deleteTrampController") @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> deleteTrampController(Long id) { PrControllerTramp controllerInfo = intakeControllerSv.getTrampControllerInfo(id); if (controllerInfo == null) { return BaseResponseUtils.buildFail(ProjectResultCode.NO_EXIST_TRAMP_CONTROLLER.getMessage()); } Integer rows = intakeControllerSv.deleteTrampController(id); if (rows == 0) { return BaseResponseUtils.buildFail(ProjectResultCode.DELETE_TRAMP_CONTROLLER_FAIL.getMessage()); } return BaseResponseUtils.buildSuccess(true); } } pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerSv.java
@@ -1,13 +1,19 @@ package com.dy.pipIrrProject.intakeController; import cn.hutool.core.date.DateTime; import com.dy.common.webUtil.QueryResultVo; 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.apache.dubbo.common.utils.PojoUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; @@ -91,4 +97,34 @@ public Integer deleteTrampController(Long controllerId) { return prControllerTrampMapper.deleteByPrimaryKey(controllerId); } //流浪控制器增 public Integer addTrampController(PrControllerTramp record){ return prControllerTrampMapper.insertSelective(record); } /*流浪控制器查*/ public QueryResultVo<List<PrControllerTramp>> getTrampControllers(TrampControllerQueryVo queryVo){ Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); Long itemTotal = prControllerTrampMapper.getTrampControllersCount(params); QueryResultVo<List<PrControllerTramp>> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = prControllerTrampMapper.getTrampControllers(params); return rsVo; } /** * 修改绑定记录通过取水口 * @param record * @return */ public Integer updateBindRecord(PrIntakeController record){ return prIntakeControllerMapper.updateByIntakeSelective(record); } } pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/TrampControllerQueryVo.java
New file @@ -0,0 +1,34 @@ package com.dy.pipIrrProject.intakeController; import com.dy.common.webUtil.QueryConditionVo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.Date; /** * @author :WuZeYu * @Date :2024/5/8 14:16 * @LastEditTime :2024/5/8 14:16 * @Description */ @Data @EqualsAndHashCode(callSuper = false) @ToString(callSuper = true) @NoArgsConstructor @AllArgsConstructor @Builder @Schema(name = "流浪控制器查询条件") public class TrampControllerQueryVo extends QueryConditionVo { @Schema(description = "流浪控制器ID") private String id; @Schema(description = "控制器地址") private String rtuAddr; @Schema(description = "通讯协议") public String protocol; } pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java
@@ -37,7 +37,12 @@ NO_RECORDS(30002, "没有符合条件的控制器数据"), PLEASE_INPUT_CONTROLLER_ID(30003, "请输入控制器编号"), DELETE_CONTROLLER_FAIL(30004, "控制器删除失败"), /** * 流浪控制器 */ ADD_TRAMP_CONTROLLER_FAIL(80001, "流浪控制器添加失败"), DELETE_TRAMP_CONTROLLER_FAIL(80002, "流浪控制器删除失败"), NO_EXIST_TRAMP_CONTROLLER(80003, "该流浪控制器不存在"), /** * 取水口、控制器关联 */