pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CommonV1_0_1.java
@@ -147,7 +147,7 @@ return b ; } /** * 得到IC卡类型名称 ( 卡类型(1:用户卡;2:管理员卡;3:调试卡;4:开关阀卡;5:清空卡)) * 得到IC卡类型名称 ( 卡类型(1:用户卡;2:管理员卡;3:调试卡;4:巡检卡;5:清空卡)) * @param type 字节 * @return 名称 */ @@ -157,7 +157,7 @@ case 1 -> "用户卡"; case 2 -> "管理员卡"; case 3 -> "调试卡"; case 4 -> "开关阀卡"; case 4 -> "巡检卡"; case 5 -> "清空卡"; default -> "未知"; }; @@ -175,8 +175,8 @@ * 7:紧急关闭; * 8:用户远程开阀; * 9:用户远程关阀; * 10:开关阀卡关阀; * 11:开关阀卡刷卡卡开阀; * 10:巡检卡关阀; * 11:巡检卡刷卡卡开阀; * 12:黑名单命令关阀; * 13:远程定时关阀; * 14:远程定量关阀; @@ -195,8 +195,8 @@ case 7 -> "紧急关阀"; case 8 -> "用户远程开阀"; case 9 -> "用户远程关阀"; case 10 -> "开关阀卡关阀"; case 11 -> "开关阀卡开阀"; case 10 -> "巡检卡关阀"; case 11 -> "巡检卡开阀"; case 12 -> "黑名单命令关阀"; case 13 -> "远程定时关阀"; case 14 -> "远程定量关阀"; pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java
@@ -124,9 +124,12 @@ //用水户用水开始时间:6字节BCD码,顺序是年月日时分秒,其中公元年=2000+年。 cdData.openDt = GlParse.parseTp(bs, index) ; index += 6 ; //index += 6 ; //控制器时钟 cdData.rtuDt = GlParse.parseTp(bs, index) ; //cdData.rtuDt = GlParse.parseTp(bs, index) ; //2024-10-27 刘润玉:苏有勋把协议中的控制器时钟给删除掉了(目的是节约存储空间) //处理办法是把开阀时间作为控制器时钟,这两个时间相差不到一分钟 cdData.rtuDt = cdData.openDt; //index += 6 ; } @@ -188,9 +191,12 @@ index += 2 ; cdData.cardType = bs[index] ; index++ ; //index++ ; //控制器时钟 cdData.rtuDt = GlParse.parseTp(bs, index) ; //cdData.rtuDt = GlParse.parseTp(bs, index) ; //2024-10-27 刘润玉:苏有勋把协议中的控制器时钟给删除掉了(目的是节约存储空间) //处理办法是把关阀时间作为控制器时钟,这两个时间相差不到一分钟 //cdData.rtuDt = cdData.closeDt ; //index += 6 ; } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/upVos/DataCd84Vo.java
@@ -11,7 +11,7 @@ public class DataCd84Vo implements UpDataVo { public Byte opType; public Byte cardType ;//卡类型(0:无卡;1:用户卡;2:管理员卡;3:调试卡;4:开关阀卡;5:清空卡) public Byte cardType ;//卡类型(0:无卡;1:用户卡;2:管理员卡;3:调试卡;4:巡检卡;5:清空卡) public String cardAddr ;//IC卡地址(8位字符) public String cardNo ;//IC卡编号 public Double remainMoney ;//剩余金额:用户余额4字节BCD码,取值范围0.00~999999.99,单位为元 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeManagerCard.java
@@ -53,7 +53,7 @@ private String cardNum; /** * 卡片类型;2-管理科,4-开关阀卡,5清空卡 * 卡片类型;2-管理科,4-巡检卡,5清空卡 */ @NotNull(message = "卡片类型不能为空") private Byte cardType; pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoIntake.java
@@ -110,12 +110,6 @@ @ColumnWidth(20) private Date findDt; /** * 是否在线 */ @ExcelIgnore private Boolean isOnLine; @Schema(title = "绑定次数") @ExcelProperty(value = {"${title}", "绑定次数"}) @ColumnWidth(10) pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
@@ -231,14 +231,9 @@ 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 left JOIN JSON_TABLE( <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',--> #{onLineMap}, '$[*]' COLUMNS( rtuAddr VARCHAR(20) PATH '$.rtuAddr', isOnLine BOOLEAN PATH '$.isOnLine' ) ) rtus ON cont.rtuAddr = rtus.rtuAddr <if test = "bindNumber != null and bindNumber > 0"> JOIN (SELECT intakeId, COUNT(*) num FROM pr_intake_controller WHERE operateType = 1 group by intakeId) AS bindNumTb on bindNumTb.intakeId= ge.id </if> <where> ge.deleted = 0 AND divi.deleted = 0 @@ -255,10 +250,10 @@ AND blo.id = #{blockId} </if> <if test="isBinded == 0"> <if test="isBinded != null and isBinded == 0"> AND ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0) </if> <if test="isBinded == 1"> <if test="isBinded != null and isBinded == 1"> AND ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0) </if> <if test="isBinded == null"> @@ -269,21 +264,20 @@ <if test = "rtuAddr != null and rtuAddr !=''"> AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%') </if> <if test="isOnLine != null and isOnLine !='' "> AND rtus.isOnLine = #{isOnLine} </if> <if test="protocol != null and protocol !='' "> AND cont.protocol = #{protocol} </if> <if test = "bindNumber != null and bindNumber > 0"> AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = #{bindNumber} AND bindNumTb.num = #{bindNumber} </if> </where> </select> <!--根据指定条件获取取水口记录--> <select id="getIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntake"> SELECT CAST(ge.id AS char) AS intakeId, WITH intakeIds AS(SELECT intakeId FROM pr_controller where deleted = 0) SELECT CAST(ge.id AS char) AS intakeId, ge.`name` AS intakeName, CAST(divi.id AS char) AS divideId, divi.`name` AS divideName, @@ -293,18 +287,14 @@ cont.rtuAddr AS rtuAddr, cont.protocol AS protocol, cont.findDt AS findDt, rtus.isOnLine AS isOnLine, (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) AS bindNumber, bindNumTb.num AS bindNumber, ge.lng, ge.lat, ge.remarks, ge.operator, ge.operateDt As operateDt, (CASE WHEN ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0) THEN '未绑定' WHEN ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0) THEN '已绑定' END) AS isBind, CONCAT(country.`name`, town.`name`, village.`name`) AS address IF(ge.id IN (SELECT intakeId FROM intakeIds),'已绑定','未绑定') AS isBind, CONCAT(country.`name`, town.`name`, village.`name`) AS address FROM pr_intake ge INNER JOIN pr_divide divi ON ge.divideId = divi.id INNER JOIN ba_block blo ON divi.blockId = blo.id @@ -312,14 +302,7 @@ 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 left JOIN JSON_TABLE( <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',--> #{onLineMap}, '$[*]' COLUMNS( rtuAddr VARCHAR(20) PATH '$.rtuAddr', isOnLine BOOLEAN PATH '$.isOnLine' ) ) rtus ON cont.rtuAddr = rtus.rtuAddr JOIN (SELECT intakeId, COUNT(*) num FROM pr_intake_controller WHERE operateType = 1 group by intakeId) AS bindNumTb on bindNumTb.intakeId= ge.id <where> ge.deleted = 0 AND divi.deleted = 0 @@ -327,19 +310,16 @@ <if test="intakeName != null and intakeName != ''"> AND ge.name LIKE CONCAT('%', #{intakeName}, '%') </if> <if test="divideId != null and divideId != ''"> AND divi.id = #{divideId} </if> <if test="blockId != null and blockId != ''"> AND blo.id = #{blockId} </if> <if test="isBinded == 0"> <if test="isBinded != null and isBinded == 0"> AND ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0) </if> <if test="isBinded == 1"> <if test="isBinded != null and isBinded == 1"> AND ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0) </if> <if test="isBinded == null"> @@ -347,17 +327,14 @@ <if test="address != null and address != ''"> AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%') </if> <if test = "rtuAddr != null and rtuAddr !=''"> <if test="rtuAddr != null and rtuAddr !=''"> AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%') </if> <if test="isOnLine != null and isOnLine !='' "> AND rtus.isOnLine = #{isOnLine} </if> <if test="protocol != null and protocol !='' "> AND cont.protocol = #{protocol} </if> <if test = "bindNumber != null and bindNumber > 0"> AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = #{bindNumber} <if test="bindNumber != null and bindNumber > 0"> AND bindNumTb.num = #{bindNumber} </if> </where> ORDER BY ge.operateDt DESC pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseValveHistoryMapper.xml
@@ -476,7 +476,7 @@ WHEN oh.op_type = 3 THEN '中心站开阀' WHEN oh.op_type = 5 THEN '余额不足关阀' WHEN oh.op_type = 8 THEN '用户远程开阀' WHEN oh.op_type = 11 THEN '开关阀卡开阀' WHEN oh.op_type = 11 THEN '巡检卡开阀' ELSE '未知' END AS openType, oh.op_order_no AS openOrderNo, @@ -494,7 +494,7 @@ WHEN oh.cl_type = 6 THEN '流量计故障关阀' WHEN oh.cl_type = 7 THEN '紧急关闭' WHEN oh.cl_type = 9 THEN '用户远程关阀' WHEN oh.cl_type = 10 THEN '开关阀卡关阀' WHEN oh.cl_type = 10 THEN '巡检卡关阀' WHEN oh.cl_type = 12 THEN '黑名单命令关阀' WHEN oh.cl_type = 13 THEN '用户远程定时关阀' WHEN oh.cl_type = 14 THEN '用户远程定量关阀' pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseValveLastMapper.xml
@@ -495,7 +495,7 @@ WHEN oh.op_type = 3 THEN '中心站开阀' WHEN oh.op_type = 5 THEN '余额不足关阀' WHEN oh.op_type = 8 THEN '用户远程开阀' WHEN oh.op_type = 11 THEN '开关阀卡开阀' WHEN oh.op_type = 11 THEN '巡检卡开阀' ELSE '未知' END AS openType, oh.op_order_no AS openOrderNo, @@ -513,7 +513,7 @@ WHEN oh.cl_type = 6 THEN '流量计故障关阀' WHEN oh.cl_type = 7 THEN '紧急关闭' WHEN oh.cl_type = 9 THEN '用户远程关阀' WHEN oh.cl_type = 10 THEN '开关阀卡关阀' WHEN oh.cl_type = 10 THEN '巡检卡关阀' WHEN oh.cl_type = 12 THEN '黑名单命令关阀' WHEN oh.cl_type = 13 THEN '用户远程定时关阀' WHEN oh.cl_type = 14 THEN '用户远程定量关阀' pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealClientAmountDay.java
@@ -3,15 +3,10 @@ import com.dy.common.mw.protocol.Data; import com.dy.common.mw.protocol.p206V1_0_0.DataV1_0_1; import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCd83CloseVo; import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCd83OpenVo; import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCd84Vo; import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCdC0Vo; import com.dy.common.util.DateTime; import com.dy.pipIrrGlobal.pojoPr.PrController; import com.dy.pipIrrGlobal.pojoRm.RmClientAmountDay; import com.dy.pipIrrGlobal.pojoRm.RmClientAmountDayLast; import com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDay; import com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDayLast; import com.dy.pipIrrGlobal.pojoSe.SeClient; import com.dy.rtuMw.server.rtuData.TaskSurpport; import com.dy.rtuMw.server.rtuData.dbSv.DbSv; pipIrr-platform/pipIrr-web/pipIrr-web-file/src/main/java/com/dy/pipIrrWebFile/fm/FileNameIdUtil.java
@@ -10,11 +10,8 @@ private static long last = 0 ; //后缀 //在分布式系统中,例如多个业务中间件dataMw,多个系统都会向数据库中插入数据,用的都是此ID生成器, //此ID生成器在各个子系统中难免为同一类数据生成相同的ID,造成数据库插入因主键相同而报错, //所以设计此后缀,每个子系统后缀不同 private static String suffix = "0" ; static { last = current() ; } pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java
@@ -12,7 +12,6 @@ import com.dy.pipIrrGlobal.voPr.VoIntake; import com.dy.pipIrrGlobal.voPr.VoOnLineIntake; import com.dy.pipIrrGlobal.voSe.VoActiveCard; import com.dy.pipIrrProject.intake.qo.OnLineIntakesQO; import com.dy.pipIrrProject.result.ProjectResultCode; import com.taobao.api.ApiException; import io.swagger.v3.oas.annotations.Operation; @@ -290,14 +289,13 @@ } /** * 此功能已經移植到remote模塊的MonitroCtrl中 * 获取取水口列表(在线和不在线) * * @param qo * @return */ @GetMapping(path = "all_intakes") @SsoAop() public BaseResponse<QueryResultVo<List<VoOnLineIntake>>> getAllIntakes(OnLineIntakesQO qo) { @GetMapping(path = "all_intakes") @SsoAop() public BaseResponse<QueryResultVo<List<VoOnLineIntake>>> getAllIntakes(OnLineIntakesQO qo) { try { QueryResultVo<List<VoOnLineIntake>> res = intakeSv.selectOnLineIntakes(qo); return BaseResponseUtils.buildSuccess(res); @@ -305,8 +303,8 @@ log.error("查询取水口异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } } */ /** * 根据操作员获取常用取水口(在线和不在线) * pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
@@ -134,44 +134,15 @@ * @return 取水口记录列表 */ public QueryResultVo<List<VoIntake>> getIntakes(QueryVo queryVo) { Command com = new Command(); com.id = Command.defaultId; com.code = "LCD0001"; com.type = "innerCommand"; comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw); BaseResponse baseResponse = sendCom2Mw(com); JSONObject response = (JSONObject) JSON.toJSON(baseResponse); Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); Long itemTotal = prIntakeMapper.getRecordCount(params); if (response != null && response.getString("code").equals("0001")) { JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment").getJSONObject("onLineMap"); JSONArray jsonArray = new JSONArray(); if(attachment != null) { HashMap<String, Boolean> onLineMap = JSON.parseObject(attachment.toJSONString(), HashMap.class); for (Map.Entry<String, Boolean> entry : onLineMap.entrySet()) { JSONObject jsonObject = new JSONObject(); jsonObject.put("rtuAddr", entry.getKey()); jsonObject.put("isOnLine", entry.getValue()); jsonArray.add(jsonObject); } } queryVo.setOnLineMap(jsonArray.toJSONString()); Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); Long itemTotal = prIntakeMapper.getRecordCount(params); QueryResultVo<List<VoIntake>> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = prIntakeMapper.getIntakes(params); return rsVo; } else { QueryResultVo<List<VoIntake>> rsVo = new QueryResultVo<>(); return rsVo; } QueryResultVo<List<VoIntake>> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = prIntakeMapper.getIntakes(params); return rsVo; } /** @@ -249,11 +220,12 @@ } /** * 此功能已經移植到remote模塊的MonitroSv中 * * 获取取水口列表 * * @return */ public QueryResultVo<List<VoOnLineIntake>> selectOnLineIntakes(OnLineIntakesQO qo) { public QueryResultVo<List<VoOnLineIntake>> selectOnLineIntakes(OnLineIntakesQO qo) { Command com = new Command(); com.id = Command.defaultId; com.code = "LCD0001"; @@ -287,8 +259,8 @@ QueryResultVo<List<VoOnLineIntake>> rsVo = new QueryResultVo<>(); return rsVo; } } } */ /** * 根据操作员获取常用取水口 * pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/QueryVo.java
@@ -40,18 +40,6 @@ @Schema(description = "控制器地址") private String rtuAddr; /** * 中间件返回的RTU在线情况对象数组 */ private String onLineMap; /** * 是否在线 */ @Max(value = 1,message = "是否在线仅允许为真或假") @Min(value = 0,message = "是否在线仅允许为真或假") private Boolean isOnLine; @Schema(description = "通信协议") private String protocol; pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/ManagerCard.java
@@ -21,7 +21,7 @@ private String cardAddr; /** * 卡片类型,2-管理科,4-开关阀卡,5-清空卡 * 卡片类型,2-管理科,4-巡检卡,5-清空卡 */ private Byte cardType; pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/IntakeSv.java
@@ -342,10 +342,10 @@ openTypeName = "用户远程开阀"; break; case 11: openTypeName = "开关阀卡开阀"; openTypeName = "巡检卡开阀"; break; case 13: openTypeName = "开关阀卡开阀"; openTypeName = "巡检卡开阀"; break; default: openTypeName = "不知道您要查那种开阀类型"; @@ -412,7 +412,7 @@ closeTypeName = "用户远程关阀"; break; case 10: closeTypeName = "开关阀卡关阀"; closeTypeName = "巡检卡关阀"; break; case 12: closeTypeName = "黑名单命令关阀";