2021与蓝度共同重构项目,服务端
zhanzhiqin
2022-03-15 61ef68c831fc4d8266121a6b11b5f751ae7d1266
C3充电桩
已修改6个文件
已添加1个文件
277 ■■■■■ 文件已修改
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/C3ChargingController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/c3ChargingProcessor.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3OperationReportInnerFrame.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/C3FinishChargingReqInnerFrame.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/C3ChargingEnum.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/security/PermissionConfig.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/C3ChargingController.java
@@ -31,9 +31,13 @@
     */
    @PostMapping("/startCharging")
    public ResponseVO<Object> startCharging(@RequestBody C3ChargingParam c3ChargingParam) {
        c3ChargingService.startCharging(c3ChargingParam.getC3Mac(), c3ChargingParam.getChargingCapacity(), c3ChargingParam.getChargeAmount());
        String result = c3ChargingService.startCharging(c3ChargingParam.getC3Mac(), c3ChargingParam.getChargingCapacity(), c3ChargingParam.getChargeAmount());
        if ("操作成功".equals(result)) {
            return ResponseUtil.success(result);
        } else {
            return ResponseUtil.fail(result);
        }
        return ResponseUtil.success(null);
    }
    /**
@@ -41,9 +45,13 @@
     */
    @PostMapping("/finishCharging")
    public ResponseVO<Object> finishCharging(@RequestBody C3ChargingParam c3ChargingParam) {
        c3ChargingService.finishCharging(c3ChargingParam.getC3Mac());
        String result = c3ChargingService.finishCharging(c3ChargingParam.getC3Mac());
        return ResponseUtil.success(null);
        if ("操作成功".equals(result)) {
            return ResponseUtil.success(result);
        } else {
            return ResponseUtil.fail(result);
        }
    }
@@ -52,8 +60,12 @@
     */
    @PostMapping("/restartCharging")
    public ResponseVO<Object> restartCharging(@RequestBody C3ChargingParam c3ChargingParam) {
        c3ChargingService.restartCharging(c3ChargingParam.getC3Mac());
        String result = c3ChargingService.restartCharging(c3ChargingParam.getC3Mac());
        return ResponseUtil.success(null);
        if ("操作成功".equals(result)) {
            return ResponseUtil.success(result);
        } else {
            return ResponseUtil.fail(result);
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/c3ChargingProcessor.java
@@ -2,7 +2,9 @@
import com.sandu.common.util.SpringContextHolder;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3HeartbeatReportInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3OperationReportInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ChargingEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ChargingReportEnum;
import com.sandu.ximon.admin.service.C3ChargingService;
import lombok.extern.slf4j.Slf4j;
@@ -29,12 +31,23 @@
    public void process(String productKey, String deviceName, CommonFrame frame) {
        String functionCode = frame.getPayload().substring(2, 4);
        if (C3ChargingReportEnum.HeartBeat_Data.getCode().equals(functionCode)) {
            log.info("心跳相应——C3充电桩数据"+productKey+"     -------       "+deviceName);
            log.info("心跳相应——C3充电桩数据" + productKey + "     -------       " + deviceName);
            A5C3HeartbeatReportInnerFrame heartbeatReportInnerFrame = new A5C3HeartbeatReportInnerFrame().transformFrame(frame.getPayload());
            log.info("C3充电桩上报处理_heartbeatReportInnerFrame");
            log.info(heartbeatReportInnerFrame.toString());
            SpringContextHolder.getBean(C3ChargingService.class).saveReportData(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage());
            if (heartbeatReportInnerFrame.isValidate()) {
                SpringContextHolder.getBean(C3ChargingService.class).saveReportData(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage());
            }
        } 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());
//            if (operationReportInnerFrame.isValidate()) {
//                SpringContextHolder.getBean(C3ChargingService.class).saveReportData(deviceName, operationReportInnerFrame.getHeartBeatDataPackage());
//            }
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3OperationReportInnerFrame.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,147 @@
package com.sandu.ximon.admin.manager.iot.frame.inner.report;
import cn.hutool.core.util.StrUtil;
import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
import lombok.Data;
import lombok.ToString;
/**
 * @author ZZQ
 * @date 2022/3/14 16:36
 * C3充电桩操作指令响应帧
 */
@Data
@ToString(callSuper = true)
public class A5C3OperationReportInnerFrame extends BaseResponseInnerFrame<A5C3OperationReportInnerFrame> {
    //MAC地址
    private String mac;
    //响应状态
    //        æ•…障码类型表:
    //        1.通信流程超时
    //        2.无电压
    //        3.无电流
    //        4.无功率
    //        5.充电功率过小
    //        6.漏电
    //        7.设备温度过高
    //        8.设备温度过低
    //        9.充电超时(充电功率过小导至充电时间超长)
    //        10.无网络
    //        11.连接主机超时
    //        12.连接服务器超时
    //        13.触摸屏无响应
    //        14.更新写入Flash失败
    //        15.写入EEProm失败
    //        16.市电电压过高警告
    //        17.市电电压过底警告
    //        18.地锁故障(当前为解锁状态,不能锁上)
    //        19.地锁故障(当前为锁上状态,不能解锁)
    //        20.充电口1故障(不能使用)
    //        21.充电口2故障(不能使用)(暂不用)
    //        22. å……电口1无法与车机通讯
    //        23. å……电口2无法与车机通讯(暂不用)
    private String state;
    @Override
    public A5C3OperationReportInnerFrame transformFrame(String hex) {        //  é•¿åº¦ä¸ä¸€è‡´æ—¶ï¼Œè¿”回null
        if (StrUtil.isBlank(hex)) {
            return null;
        }
        // MQTT通信方式(1)
        setConnectType(hex.substring(0, 2));
        //  åŠŸèƒ½ç (1)
        setFunctionCode(hex.substring(2, 4));
        //  è´Ÿè·é•¿åº¦(2)
        setPayloadLength(hex.substring(4, 8));
        //MAC地址
        setMac(hex.substring(8, 16));
        //硬件交互响应结果
        setState(returnState(hex.substring(16, 18)));
        setCrc32(hex.substring(hex.length() - 8));
        //  æ ¡éªŒCRC32
        String frame = hex.substring(2, hex.length() - 8);
        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
        return this;
    }
    public String returnState(String stateCode) {
        String State = "";
        switch (stateCode) {
            case "00":
                State = "操作成功";
                break;
            case "01":
                State = "通信流程超时";
                break;
            case "02":
                State = "无电压";
                break;
            case "03":
                State = "无电流";
                break;
            case "04":
                State = "无功率";
                break;
            case "05":
                State = "充电功率过小";
                break;
            case "06":
                State = "漏电";
                break;
            case "07":
                State = "设备温度过高";
                break;
            case "08":
                State = "设备温度过低";
                break;
            case "09":
                State = "充电超时(充电功率过小导至充电时间超长)";
                break;
            case "10":
                State = "无网络";
                break;
            case "11":
                State = "连接主机超时";
                break;
            case "12":
                State = "连接服务器超时";
                break;
            case "13":
                State = "触摸屏无响应";
                break;
            case "14":
                State = "更新写入Flash失败";
                break;
            case "15":
                State = "写入EEProm失败";
                break;
            case "16":
                State = "市电电压过高警告";
                break;
            case "17":
                State = "市电电压过底警告";
                break;
            case "18":
                State = "地锁故障(当前为解锁状态,不能锁上)";
                break;
            case "19":
                State = "地锁故障(当前为锁上状态,不能解锁)";
                break;
            case "20":
                State = "充电口1故障(不能使用)";
                break;
            case "21":
                State = "充电口2故障(不能使用)(暂不用)";
                break;
            case "22":
                State = "充电口1无法与车机通讯";
                break;
            case "23":
                State = "充电口2无法与车机通讯(暂不用)";
            default:
        }
        return State;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/C3FinishChargingReqInnerFrame.java
@@ -22,7 +22,7 @@
    @Override
    public String getEncodeFrame() {
        String functionCode = C3ChargingEnum.FinishCharging.getCode();
        String functionCode = C3ChargingEnum.FinishOrder.getCode();
        String payloadLength = "0004";
        String frame = functionCode + payloadLength + payload;
        return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/C3ChargingEnum.java
@@ -8,8 +8,40 @@
public enum C3ChargingEnum {
    //开始充电
    StartCharging("01"),
    //结束充电
    FinishCharging("02"),
    //同步结束
    EndOfTheSynchronization("04"),
    //二维码
    QrCode("05"),
    //结束订单
    FinishOrder("09"),
    //查询版本
    QueryVersion("10"),
    //查询心跳包间隔时间
    QueryIntervalTime("11"),
    //查询电压/电流常数
    QueryConstant("12"),
    //查询地址(暂时不用到)
    QueryAddress("13"),
    //查询故障码
    QueryFaultCode("14"),
    //读心跳包
    ReadTheHeartbeatPackage("15"),
    //设置心跳包时间(秒)-充电状态时
    SetHeartbeatPacketTimeCharging("20"),
    //设置心跳包间隔时间(秒)-非充电状态时
    SetHeartbeatPacketTimeNotCharging("21"),
    //设置电压/电流常数(各一字节)(默认值0xBC64)
    SetConstant("22"),
    //设置地址
    SetAddress("23"),
    //设置日历(同心跳包中的6字节日期时间)
    SetCalendar("24"),
    //设置费率(开始时间1,费率1,开始时间2,费率2,开始时间3,费率3,开始时间,费率5,开始时间,费率5)
    SetRate("25"),
    //故障码上报清除
    ClearedFaultCode("26"),
    //恢复出厂值
    RestoreFactoryValue("29"),
    //软重启
    RestartCharging("2B");
@@ -19,7 +51,7 @@
        return code;
    }
    C3ChargingEnum(String code){
    C3ChargingEnum(String code) {
        this.code = code;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/security/PermissionConfig.java
@@ -22,10 +22,10 @@
        if (loginUserInfo == null || loginUserInfo.getPermission() == null) {
            return false;
        }
        // å®¢æˆ·æ²¡æœ‰æƒé™ç®¡ç†
        if(AdministratorEnums.CUSTOMER.getCode().equals(loginUserInfo.getAdministratorType())){
            return true;
        }
//        // å®¢æˆ·æ²¡æœ‰æƒé™ç®¡ç†
//        if(AdministratorEnums.CUSTOMER.getCode().equals(loginUserInfo.getAdministratorType())){
//            return true;
//        }
        String[] split = loginUserInfo.getPermission().split(",");
        // èŽ·å–å½“å‰ç”¨æˆ·çš„æ‰€æœ‰æƒé™
        List<String> elPermissions = Arrays.stream(split).collect(Collectors.toList());
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java
@@ -2,20 +2,25 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.manager.iot.amqp.processor.c3ChargingProcessor;
import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3HeartbeatReportInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3OperationReportInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.C3FinishChargingReqInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.C3RestartChargingReqInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.C3StartChargingReqInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ChargingEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
import com.sandu.ximon.admin.utils.RedisUtils;
import com.sandu.ximon.dao.domain.C3mCharging;
import com.sandu.ximon.dao.mapper.C3mChargingMapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -26,6 +31,7 @@
 * @date 2022/3/4 9:58
 */
@Service
@Slf4j
@AllArgsConstructor
public class C3ChargingService extends BaseServiceImpl<C3mChargingMapper, C3mCharging> {
@@ -69,7 +75,7 @@
     * @param chargingCapacity
     * @param chargeAmount
     */
    public void startCharging(String c3Mac, Integer chargingCapacity, Double chargeAmount) {
    public String startCharging(String c3Mac, Integer chargingCapacity, Double chargeAmount) {
        C3StartChargingReqInnerFrame c3StartChargingReqInnerFrame =
                new C3StartChargingReqInnerFrame(c3Mac, chargingCapacity, chargeAmount);
@@ -78,6 +84,19 @@
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC("32313243305008ff0a04ffff", a5Frame);
        System.out.println(commonFrame + "            -----commonFrame");
//        String functionCode = commonFrame.getPayload().substring(2, 4);
//        if (C3ChargingEnum.StartCharging.getCode().equals(functionCode)) {}
        A5C3OperationReportInnerFrame operationReportInnerFrame = new A5C3OperationReportInnerFrame().transformFrame(commonFrame.getPayload());
        if (operationReportInnerFrame.isValidate()) {
            return operationReportInnerFrame.getState();
        } else {
            throw new BusinessException("数据校验错误,请重新请求");
        }
    }
    /**
@@ -85,7 +104,7 @@
     *
     * @param c3Mac
     */
    public void finishCharging(String c3Mac) {
    public String finishCharging(String c3Mac) {
        C3FinishChargingReqInnerFrame c3FinishChargingReqInnerFrame =
                new C3FinishChargingReqInnerFrame(c3Mac);
@@ -94,6 +113,14 @@
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC("32313243305008ff0a04ffff", a5Frame);
        System.out.println(commonFrame + "            -----commonFrame");
        A5C3OperationReportInnerFrame operationReportInnerFrame = new A5C3OperationReportInnerFrame().transformFrame(commonFrame.getPayload());
        if (operationReportInnerFrame.isValidate()) {
            return operationReportInnerFrame.getState();
        } else {
            throw new BusinessException("数据校验错误,请重新请求");
        }
    }
    /**
@@ -101,7 +128,7 @@
     *
     * @param c3Mac
     */
    public void restartCharging(String c3Mac) {
    public String restartCharging(String c3Mac) {
        C3RestartChargingReqInnerFrame c3RestartChargingReqInnerFrame =
                new C3RestartChargingReqInnerFrame(c3Mac);
@@ -110,5 +137,13 @@
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC("32313243305008ff0a04ffff", a5Frame);
        System.out.println(commonFrame + "            -----commonFrame");
        A5C3OperationReportInnerFrame operationReportInnerFrame = new A5C3OperationReportInnerFrame().transformFrame(commonFrame.getPayload());
        if (operationReportInnerFrame.isValidate()) {
            return operationReportInnerFrame.getState();
        } else {
            throw new BusinessException("数据校验错误,请重新请求");
        }
    }
}