2021与蓝度共同重构项目,服务端
fix
zhanzhiqin
2022-08-29 bcd9fda2a06e49195b038c18307511caf78bf615
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/c3ChargingProcessor.java
@@ -12,7 +12,6 @@
import com.sandu.ximon.admin.service.*;
import com.sandu.ximon.admin.utils.LogUtils;
import com.sandu.ximon.admin.utils.RedisUtils;
import com.sandu.ximon.dao.domain.C3mCharging;
import com.sandu.ximon.dao.domain.C3mOrder;
import com.sandu.ximon.dao.domain.Pole;
import com.sandu.ximon.dao.enums.OrderStatus;
@@ -58,12 +57,8 @@
            if (netRequestFrame.isValidate()) {
                //保存充电桩硬件信息
                boolean b = SpringContextHolder.getBean(C3ChargingService.class).saveReporEquipment(deviceName, netRequestFrame.getMcuUdid(), netRequestFrame.getDestinationAddress());
                //检查是否有正在进行的订单,有的话继续充电
                SpringContextHolder.getBean(C3mOrderService.class).recoverContinueCharing(netRequestFrame.getDestinationAddress(), netRequestFrame.getMcuUdid());
                if (!b) {
                    return;
                }
                SpringContextHolder.getBean(C3ChargingService.class)
                        .saveReporEquipment(deviceName, netRequestFrame.getMcuUdid(), netRequestFrame.getDestinationAddress());
            }
        } else if (C3ChargingEnum.QR_CODE_REQUEST.getCode().equals(functionCode)) {
            //  网页操作二维码请求(41)
@@ -73,12 +68,6 @@
            if (codeRequestFrame.isValidate()) {
                if (deviceName != null) {
//                    C3mCharging c3mCharging = SpringContextHolder.getBean(C3ChargingService.class).
//                            getOne(Wrappers.lambdaQuery(C3mCharging.class).eq(C3mCharging::getC3Mac, codeRequestFrame.getDestinationAddress()).last("limit 1"));
//                    if (c3mCharging == null) {
//                        SpringContextHolder.getBean(C3ChargingService.class).saveReporEquipment(deviceName, codeRequestFrame.getMcuUdid(), codeRequestFrame.getDestinationAddress());
//                    }
                    //设置二维码
                    Pole pole = SpringContextHolder.getBean(PoleService.class).getOne(Wrappers.lambdaQuery(Pole.class).eq(Pole::getDeviceCode, deviceName));
                    if (pole != null) {
@@ -113,18 +102,28 @@
            /**
             * 读取心跳包,判断剩余金额和已充电量,统计到缓存中正在进行的订单。
             */
            A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage aPackage = c3ChargingService.ReadTheHeartbeatPackage(completeRequestFrame.getDestinationAddress());
            A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage aPackage = c3ChargingService.ReadTheHeartbeatPackage(completeRequestFrame.getDestinationAddress(), true);
            if (aPackage == null) {
                LogUtils.error("{ 充电桩(" + completeRequestFrame.getDestinationAddress() + ")充电结束上报读取心跳包失败,请检查充电桩是否出现故障! }");
                return;
            }
            orderProcess(aPackage);
            orderService.stopCharingOrder(aPackage);
        } else if (C3ChargingEnum.CHARGE_STOP.getCode().equals(functionCode)) {
            log.info("心跳响应——充电中断");
            A5C3CommonReportInnerFrame stopRequestFrame = new A5C3CommonReportInnerFrame().transformFrame(frame.getPayload());
            log.info("C3充电桩上报处理_stopRequestFrame");
            log.info(stopRequestFrame.toString());
            /**
             * 读取心跳包,判断剩余金额和已充电量,统计到缓存中正在进行的订单。
             */
            A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage aPackage = c3ChargingService.ReadTheHeartbeatPackage(stopRequestFrame.getDestinationAddress(), true);
            if (aPackage == null) {
                LogUtils.error("{ 充电桩(" + stopRequestFrame.getDestinationAddress() + ")充电结束上报读取心跳包失败,请检查充电桩是否出现故障! }");
                return;
            }
            orderService.stopCharingOrder(aPackage);
        } else if (C3ChargingEnum.ERROR_CODE.getCode().equals(functionCode)) {
            log.info("心跳响应——故障");
            A5C3ErrorCodeReportInnerFrame errorCodeRequestFrame = new A5C3ErrorCodeReportInnerFrame().transformFrame(frame.getPayload());
@@ -135,47 +134,21 @@
             * 保存C3充电桩故障数据
             */
            if (errorCodeRequestFrame.isValidate() && errorCodeRequestFrame.getErrorMessage() != null) {
                //保存故障信息
                SpringContextHolder.getBean(C3mReportErrorService.class).saveReportError(errorCodeRequestFrame);
//                //充电桩故障结束订单
//                A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage aPackage = c3ChargingService.ReadTheHeartbeatPackage(errorCodeRequestFrame.getDestinationAddress(), true);
//                if (aPackage == null) {
//                    LogUtils.error("{ 充电桩(" + errorCodeRequestFrame.getDestinationAddress() + ")故障上报读取心跳包失败,请检查充电桩是否出现故障! }");
//                    return;
//                }
//                orderService.stopCharingOrder(aPackage);
            } else {
                System.out.println("数据校验异常!");
            }
        } else if (C3ChargingEnum.StartCharging.getCode().equals(functionCode)) {
            log.info("心跳响应——C3充电桩开始充电");
            A5C3OperationReportInnerFrame operationReportInnerFrame = new A5C3OperationReportInnerFrame().transformFrame(frame.getPayload());
            log.info("C3充电桩上报处理_heartbeatReportInnerFrame");
            log.info(operationReportInnerFrame.toString());
        }
    }
    /**
     * 订单处理
     *
     * @param aPackage
     */
    private void orderProcess(A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage aPackage) {
        String c3Mac = aPackage.getC3Mac();
        //结束充电 更改订单状态
        C3mOrder lastOrderByC3Mac = SpringContextHolder.getBean(C3mOrderService.class).getLastOrderByC3Mac(c3Mac);
        if (lastOrderByC3Mac != null) {
            //设置订单状态为已完成
            lastOrderByC3Mac.setOrderStatus(OrderStatus.COMPLETE.getStatus());
            BigDecimal actualChargingCapacity = BigDecimal.valueOf(lastOrderByC3Mac.getActualChargingCapacity());
            BigDecimal actualChargingCapacityHide = BigDecimal.valueOf(lastOrderByC3Mac.getActualChargingCapacityHide());
            //设置实际充电电量
            lastOrderByC3Mac.setActualChargingCapacity(actualChargingCapacity.add(actualChargingCapacityHide).doubleValue());
            //设置订单结束时间
            lastOrderByC3Mac.setStopChargingTimestamp(System.currentTimeMillis());
            lastOrderByC3Mac.setActualChargingCapacity(0.00);
            //设置订单状态为充电结束
            lastOrderByC3Mac.setChargingStates(1);
            //设置剩余金额
            lastOrderByC3Mac.setSurplusAmount(Double.parseDouble(aPackage.getRemainingAmount()));
            SpringContextHolder.getBean(C3mOrderService.class).updateById(lastOrderByC3Mac);
        }
    }
}