From d36ad7a2138062f891000c13d9712b4706f8627c Mon Sep 17 00:00:00 2001
From: liulin <lin.liu@88.com>
Date: 星期二, 08 七月 2025 09:24:46 +0800
Subject: [PATCH] 修改支付接口

---
 src/main/java/com/lunhan/water/service/PaymentRecordsService.java |  124 +++++++++++++++++++---------------------
 1 files changed, 59 insertions(+), 65 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..7d523da 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,8 @@
     private HeartbeatDataMapperImpl heartbeatDataMapper;
     @Autowired
     private FacilityAlarmRecordMapperImpl facilityAlarmRecordMapper;
+    @Autowired
+    private WaterFacilityRecordsMapperImpl waterFacilityRecordsMapper;
 
     public ExecutedResult<Long> create(ReqCreatePaymentRecords request) {
         // 转换po
@@ -230,11 +233,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 +254,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("请点击设备取水按钮取水");
     }
 
@@ -309,50 +340,34 @@
             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() + "_count2")).findFirst().orElse(null);
         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()).divide(new BigDecimal(100)).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"://运行
                 break;
@@ -361,40 +376,19 @@
             case "3"://故障
                 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);
         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);
             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