From 512ddb42f73f1560661865225dd03870e021e1d2 Mon Sep 17 00:00:00 2001 From: liulin <lin.liu@88.com> Date: 星期三, 09 七月 2025 09:08:26 +0800 Subject: [PATCH] 修改故障上报 --- src/main/java/com/lunhan/water/service/PaymentRecordsService.java | 185 +++++++++++++++++++++++++-------------------- 1 files changed, 102 insertions(+), 83 deletions(-) diff --git a/src/main/java/com/lunhan/water/service/PaymentRecordsService.java b/src/main/java/com/lunhan/water/service/PaymentRecordsService.java index 340600f..2012ef5 100644 --- a/src/main/java/com/lunhan/water/service/PaymentRecordsService.java +++ b/src/main/java/com/lunhan/water/service/PaymentRecordsService.java @@ -46,6 +46,7 @@ import java.lang.reflect.Type; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @@ -77,6 +78,10 @@ private HeartbeatDataMapperImpl heartbeatDataMapper; @Autowired private FacilityAlarmRecordMapperImpl facilityAlarmRecordMapper; + @Autowired + private WaterFacilityRecordsMapperImpl waterFacilityRecordsMapper; + @Autowired + private AlarmHistoryMapperImpl alarmHistoryMapper; public ExecutedResult<Long> create(ReqCreatePaymentRecords request) { // 转换po @@ -230,11 +235,10 @@ return ExecutedResult.failed("余额水量不足!"); } //发送mqtt取水指令 - String topic = "zundong/" + facilityPO.getFacilityCode() + "/switch"; + String topic = "zundong/" + facilityPO.getFacilityCode() + "/send"; JsonObject data = new JsonObject(); - data.addProperty(facilityPO.getFacilityCode() + "_amount", request.getAmount().multiply(BigDecimal.valueOf(100))); - data.addProperty(facilityPO.getFacilityCode() + "_user", userLoginPO.getUserCode()); - data.addProperty(facilityPO.getFacilityCode() + "_state", 1); + data.addProperty(facilityPO.getFacilityCode() + "_count2", request.getAmount().multiply(BigDecimal.valueOf(100))); + data.addProperty(facilityPO.getFacilityCode() + "_state2", 1); boolean send=false; if (Objects.nonNull(mqttServer)) { send = mqttServer.send(topic, data.toString()); @@ -252,6 +256,35 @@ if(!send){ ExecutedResult.failed("通讯断开!"); } + //扣除余额 + //创建消费记录 + PaymentRecordsPO recordsPO=new PaymentRecordsPO(); + recordsPO.setUserId(userLoginPO.getId()); + recordsPO.setUserName(userLoginPO.getUserName()); + recordsPO.setFacilityCode(facilityPO.getFacilityCode()); + recordsPO.setPaymentAmount(request.getAmount()); + recordsPO.setWaterAmount(request.getAmount()); + recordsPO.setPayTime(LocalDateTimeUtil.nowDateTimeStr()); + recordsPO.setPayStatus(EBillPayStatus.PAID.getValue()); + recordsPO.setComment("取水"); + recordsPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); + mapper.insert(recordsPO); + //修改余额 + BigDecimal beforeMoney=userLoginPO.getBalance(); + BigDecimal subtract = beforeMoney.subtract(request.getAmount()); + userLoginPO.setBalance(subtract); + userLoginMapper.updateById(userLoginPO); + //生成余额变动记录 + UserCapitalChangePO changePO=new UserCapitalChangePO(); + changePO.setUserId(userLoginPO.getId()); + changePO.setBusiness(ECapitalChange.WATER_BILL_COUNTER_PAY.getValue()); + changePO.setBusinessName("取水"); + changePO.setBusinessCode("QS"+SnowFlakeUtil.getId()); + changePO.setChangeMoney(request.getAmount()); + changePO.setBeforeMoney(beforeMoney); + changePO.setAfterMoney(subtract); + changePO.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); + userCapitalChangeMapper.insert(changePO); return ExecutedResult.success("请点击设备取水按钮取水"); } @@ -279,23 +312,6 @@ DEBUG_LOGGER.error("设备数据未找到!"); return; } - -// 数据上报格式: -// 主题格式:zundong/QS001/data -// 数据格式:{"Data": -// [ -// {"name":"QS001_state","value":1}, //状态 -// {"name":"QS001_fault","value":0}, //是否故障 -// {"name":"QS001_count","value":10000} //总水量 -// ],"time":"2025-07-02 15:19:17" -// } -// 心跳上报格式: -// 主题格式:zundong/QS001/state -// 数据格式:{"Data": -// [ -// {"name":"QS001_heartbeat","value":1} //心跳 -// ],"time":"2025-07-02 15:19:17" -// } //消息解析 Gson gson = new Gson(); JsonObject object = gson.fromJson(msg, JsonObject.class); @@ -309,92 +325,95 @@ case "data": uploadData(time,facilityPO,listVo); break; - case "state": - uploadState(time,facilityPO,listVo); - break; +// case "state": +// uploadState(time,facilityPO,listVo); +// break; } } public void uploadData(String time,WaterFacilityPO facilityPO, List<CountVO> listVo) { - CountVO stateVo = listVo.stream().filter(x -> x.getName().equals(facilityPO.getFacilityCode() + "_state")).findFirst().orElse(null); - CountVO faultVo = listVo.stream().filter(x -> x.getName().equals(facilityPO.getFacilityCode() + "_fault")).findFirst().orElse(null); - CountVO countVO = listVo.stream().filter(x -> x.getName().equals(facilityPO.getFacilityCode() + "_count")).findFirst().orElse(null); - CountVO userVo = listVo.stream().filter(x -> x.getName().equals(facilityPO.getFacilityCode() + "_user")).findFirst().orElse(null); + CountVO stateVo = listVo.stream().filter(x -> x.getName().equals(facilityPO.getFacilityCode() + "_state1")).findFirst().orElse(null); + CountVO heartbeat = listVo.stream().filter(x -> x.getName().equals(facilityPO.getFacilityCode() + "_heartbeat")).findFirst().orElse(null); + CountVO countVO = listVo.stream().filter(x -> x.getName().equals(facilityPO.getFacilityCode() + "_count1")).findFirst().orElse(null); + AlarmHistoryPO alarmHistoryPO=new AlarmHistoryPO(); + alarmHistoryPO.setFacilityId(facilityPO.getId()); switch (stateVo.getValue()) { case "0"://取水完成 - //扣除余额 - UserLoginPO user = userLoginMapper.get4UserCode(userVo.getValue()); - //创建消费记录 - PaymentRecordsPO recordsPO=new PaymentRecordsPO(); - recordsPO.setUserId(user.getId()); - recordsPO.setUserName(user.getUserName()); - recordsPO.setFacilityCode(facilityPO.getFacilityCode()); - BigDecimal bigDecimal = new BigDecimal(countVO.getValue()).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_DOWN); - recordsPO.setPaymentAmount(bigDecimal); - recordsPO.setWaterAmount(bigDecimal); - recordsPO.setPayTime(time); - recordsPO.setPayStatus(EBillPayStatus.PAID.getValue()); - recordsPO.setComment("取水"); - recordsPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); - mapper.insert(recordsPO); - //修改余额 - BigDecimal beforeMoney=user.getBalance(); - BigDecimal subtract = beforeMoney.subtract(bigDecimal); - user.setBalance(subtract); - userLoginMapper.updateById(user); - //生成余额变动记录 - UserCapitalChangePO changePO=new UserCapitalChangePO(); - changePO.setUserId(user.getId()); - changePO.setBusiness(ECapitalChange.WATER_BILL_COUNTER_PAY.getValue()); - changePO.setBusinessName("取水"); - changePO.setBusinessCode("QS"+SnowFlakeUtil.getId()); - changePO.setChangeMoney(bigDecimal); - changePO.setBeforeMoney(beforeMoney); - changePO.setAfterMoney(subtract); - changePO.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); - userCapitalChangeMapper.insert(changePO); + BigDecimal divide = new BigDecimal(countVO.getValue()).setScale(2,RoundingMode.DOWN); + BigDecimal subtract=divide.subtract(facilityPO.getWaterCount()); + if(subtract.compareTo(BigDecimal.ZERO)>0){ + facilityPO.setWaterCount(divide); + int i = waterFacilityMapper.updateById(facilityPO); + if(i>0){ + WaterFacilityRecordsPO recordsPO=new WaterFacilityRecordsPO(); + recordsPO.setFacilityId(facilityPO.getId()); + recordsPO.setFacilityName(facilityPO.getFacilityName()); + recordsPO.setWaterValue(subtract); + recordsPO.setUseDate(time); + recordsPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); + recordsPO.setRemark("设备供水记录"); + waterFacilityRecordsMapper.insert(recordsPO); + } + } break; case "1"://运行 + facilityPO.setState(1); + waterFacilityMapper.updateById(facilityPO); break; case "2"://停止 + facilityPO.setState(2); + waterFacilityMapper.updateById(facilityPO); break; - case "3"://故障 + case "10"://故障 + alarmHistoryPO.setCode("500"); + alarmHistoryPO.setDescription("管道缺水"); + break; + case "11"://故障 + alarmHistoryPO.setCode("501"); + alarmHistoryPO.setDescription("流量计故障"); + break; + case "12"://故障 + alarmHistoryPO.setCode("502"); + alarmHistoryPO.setDescription("阀门故障"); + break; + case "13"://故障 + alarmHistoryPO.setCode("503"); + alarmHistoryPO.setDescription("柜内温度过低"); + break; + case "14"://故障 + alarmHistoryPO.setCode("504"); + alarmHistoryPO.setDescription("柜内温度过高"); break; } - } - public void uploadState(String time,WaterFacilityPO facilityPO, List<CountVO> listVo){ - CountVO heartbeatVO = listVo.stream().filter(x -> x.getName().equals(facilityPO.getFacilityCode() + "_heartbeat")).findFirst().orElse(null); + if(StringUtil.isNotNullOrEmpty(alarmHistoryPO.getCode())){ + AlarmHistoryPO historyPO = alarmHistoryMapper.getByCode(facilityPO.getId(), alarmHistoryPO.getCode()); + if(Objects.nonNull(historyPO)){ + historyPO.setLastTime(LocalDateTimeUtil.nowDateTimeStr()); + historyPO.setCount(historyPO.getCount()+1); + alarmHistoryMapper.updateById(historyPO); + }else { + alarmHistoryPO.setLastTime(LocalDateTimeUtil.nowDateTimeStr()); + alarmHistoryPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); + alarmHistoryMapper.insert(alarmHistoryPO); + } + + }else { + alarmHistoryMapper.deleteByFacilityId(facilityPO.getId()); + } HeartbeatDataPO heartbeatDataPO = heartbeatDataMapper.getByKey(facilityPO.getFacilityCode()); if(Objects.nonNull(heartbeatDataPO)){ - heartbeatDataPO.setDataValue(Integer.valueOf(heartbeatVO.getValue())); + heartbeatDataPO.setDataValue(Integer.valueOf(heartbeat.getValue())); heartbeatDataPO.setSendValue(heartbeatDataPO.getSendValue()==0?1:0); + heartbeatDataPO.setRemark(time); heartbeatDataMapper.updateById(heartbeatDataPO); }else { HeartbeatDataPO dataPO=new HeartbeatDataPO(); dataPO.setDataKey(facilityPO.getFacilityCode()); dataPO.setSendValue(0); - dataPO.setDataValue(Integer.valueOf(heartbeatVO.getValue())); + dataPO.setDataValue(Integer.valueOf(heartbeat.getValue())); dataPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); dataPO.setRemark(LocalDateTimeUtil.nowDateTimeStr()); heartbeatDataMapper.insert(dataPO); - } - //发送心跳数据 - // 发送心跳 - String topic = "zundong/"+facilityPO.getFacilityCode()+"/remotecontrol/"; - JsonObject data = new JsonObject(); - data.addProperty(facilityPO.getFacilityCode()+"_heartbeat", heartbeatDataPO.getSendValue()==0?1:0); - if (Objects.nonNull(mqttServer)) { - mqttServer.send(topic, data.toString()); - } else { - try { - System.out.println("mqttServer bean尚未初始化..."); - mqttServer = SpringUtil.getBean(MQTTServer.class); - System.out.println("mqttServer 初始化bean成功!"); - } catch (Exception ignored) { - } - if (Objects.nonNull(mqttServer)) { - mqttServer.send(topic, data.toString()); - } } } public ExecutedResult<List<PaymentRecordsVO>> getList(List<Long> listId) { -- Gitblit v1.9.3