2021与蓝度共同重构项目,服务端
liuhaonan
2022-03-21 3cdb1ada032fb650c37d8e9240979b4daedf1b08
Merge remote-tracking branch 'origin/master'
已修改6个文件
已添加3个文件
221 ■■■■■ 文件已修改
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/C3ChargingController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/ClientController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3HeartbeatReportInnerFrame.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3QueryReportInnerFrame.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/C3QueryFaultCodeReqInnerFrame.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/C3ReadTheHeartbeatPackageReqInnerFrame.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/param/ResetClientPasswordPrarm.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/C3ChargingController.java
@@ -107,6 +107,23 @@
        return ResponseUtil.success(result);
    }
    /**
     * æŸ¥è¯¢æ•…障码
     */
    @PostMapping("/QueryFaultCode")
    public ResponseVO<Object> QueryFaultCode(@RequestBody C3ChargingParam c3ChargingParam) {
        String result = c3ChargingService.QueryFaultCode(c3ChargingParam.getC3Mac());
        return ResponseUtil.success(result);
    }
    /**
     * è¯»å¿ƒè·³åŒ…
     */
    @PostMapping("/ReadTheHeartbeatPackage")
    public ResponseVO<Object> ReadTheHeartbeatPackage(@RequestBody C3ChargingParam c3ChargingParam) {
        return ResponseUtil.success(c3ChargingService.ReadTheHeartbeatPackage(c3ChargingParam.getC3Mac()));
    }
    /**
     * è½¯é‡å¯
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/ClientController.java
@@ -16,6 +16,7 @@
import com.sandu.ximon.admin.dto.ClientDto;
import com.sandu.ximon.admin.param.AddClientPrarm;
import com.sandu.ximon.admin.param.AdminLoginParam;
import com.sandu.ximon.admin.param.ResetClientPasswordPrarm;
import com.sandu.ximon.admin.param.UpdateClientPrarm;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.service.ClientRoleRelationService;
@@ -70,6 +71,16 @@
        }
    }
    @PostMapping("/resetClientPassword")
    public ResponseVO<Object> resetClientPassword(@RequestBody @Validated ResetClientPasswordPrarm resetClientPasswordPrarm) {
        boolean b = clientService.resetPassword(resetClientPasswordPrarm);
        if (b) {
            return ResponseUtil.success("修改成功");
        } else {
            return ResponseUtil.fail("修改失败");
        }
    }
    @PostMapping("/delete/{id}")
    public ResponseVO<Object> deleteClient(@PathVariable Long id) {
        boolean b = clientService.deleteClient(id);
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3HeartbeatReportInnerFrame.java
@@ -98,25 +98,25 @@
                return null;
            }
            this.c3Mac = hex.substring(0, 8);
            this.year = hex.substring(8, 10);
            this.month = hex.substring(10, 12);
            this.day = hex.substring(12, 14);
            this.hour = hex.substring(14, 16);
            this.min = hex.substring(16, 18);
            this.sec = hex.substring(18, 20);
            this.chargingPort = hex.substring(20, 24);
            this.statusBit = hex.substring(24, 26);
            this.year = parseVal(hex.substring(8, 10));
            this.month = parseVal(hex.substring(10, 12));
            this.day = parseVal(hex.substring(12, 14));
            this.hour = parseVal(hex.substring(14, 16));
            this.min = parseVal(hex.substring(16, 18));
            this.sec = parseVal(hex.substring(18, 20));
            this.chargingPort = parseVal(hex.substring(20, 24));
            this.statusBit = parseVal(hex.substring(24, 26));
            this.deviceTemperature = (parseVal(hex, 26, 28) + "." + parseVal(hex, 28, 30));
            this.gridVoltage = hex.substring(30, 34);
            this.gridCurrent = hex.substring(34, 38);
            this.frequency = hex.substring(38, 42);
            this.powerFactor = hex.substring(42, 46);
            this.activePower = hex.substring(46, 50);
            this.reactivePower = hex.substring(50, 54);
            this.chargedCapacity = hex.substring(54, 58);
            this.reservedCapacity = hex.substring(58, 62);
            this.remainingAmount = hex.substring(62, 66);
            this.alreadyChargingTime = hex.substring(66, 72);
            this.gridVoltage = (parseVal(hex, 30, 32) + "." + parseVal(hex, 32, 34));
            this.gridCurrent =  (parseVal(hex, 34, 36) + "." + parseVal(hex, 36, 38));
            this.frequency = (parseVal(hex, 38, 40) + "." + parseVal(hex, 40, 42));
            this.powerFactor = (parseVal(hex, 42, 44) + "." + parseVal(hex, 44, 46));
            this.activePower = (parseVal(hex, 46, 48) + "." + parseVal(hex, 48, 50));
            this.reactivePower = (parseVal(hex, 50, 52) + "." + parseVal(hex, 52, 54));
            this.chargedCapacity = (parseVal(hex, 54, 56) + "." + parseVal(hex, 56, 58));
            this.reservedCapacity = (parseVal(hex, 58, 60) + "." + parseVal(hex, 60, 62));
            this.remainingAmount = (parseVal(hex, 62, 64) + "." + parseVal(hex, 64, 66));
            this.alreadyChargingTime = parseVal(hex.substring(66, 72));
            return this;
        }
@@ -124,5 +124,9 @@
        private Integer parseVal(String frame, int start, int end) {
            return Integer.parseInt(frame.substring(start, end), 16);
        }
        private String parseVal(String hex) {
            return Integer.parseInt(hex, 16) + "";
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3QueryReportInnerFrame.java
@@ -28,6 +28,8 @@
    private String constant;
    //查询地址(暂时不用到)
    private String address;
    //故障码
    private String faultCode;
    @Override
    public A5C3QueryReportInnerFrame transformFrame(String hex) {
@@ -95,6 +97,16 @@
            }
            setAddress(hex);
        }
        /**
         * æŸ¥è¯¢åœ°å€(暂时不用到)
         */
        if (functionCode.equals(C3ChargingEnum.QueryFaultCode.getCode())) {
            if (hex.length() != 4) {
                throw new BusinessException("数据错误,请重新请求!");
            }
            setFaultCode(hex);
        }
    }
    private Integer parseVal(String frame, int start, int end) {
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/C3QueryFaultCodeReqInnerFrame.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.sandu.ximon.admin.manager.iot.frame.inner.request;
import com.sandu.ximon.admin.manager.iot.frame.inner.IRequestInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ChargingEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.MQTTConnectTypeEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
/**
 * @author ZZQ
 * @date 2022/3/3 16:43
 */
public class C3QueryFaultCodeReqInnerFrame implements IRequestInnerFrame {
    private final String payload;
    public C3QueryFaultCodeReqInnerFrame(String c3Mac) {
        payload = c3Mac ;
    }
    @Override
    public String getEncodeFrame() {
        String functionCode = C3ChargingEnum.QueryFaultCode.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/frame/inner/request/C3ReadTheHeartbeatPackageReqInnerFrame.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.sandu.ximon.admin.manager.iot.frame.inner.request;
import com.sandu.ximon.admin.manager.iot.frame.inner.IRequestInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ChargingEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.MQTTConnectTypeEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
/**
 * @author ZZQ
 * @date 2022/3/3 16:43
 */
public class C3ReadTheHeartbeatPackageReqInnerFrame implements IRequestInnerFrame {
    private final String payload;
    public C3ReadTheHeartbeatPackageReqInnerFrame(String c3Mac) {
        payload = c3Mac ;
    }
    @Override
    public String getEncodeFrame() {
        String functionCode = C3ChargingEnum.ReadTheHeartbeatPackage.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/param/ResetClientPasswordPrarm.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.sandu.ximon.admin.param;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class ResetClientPasswordPrarm {
    @NotNull
    private Long id;
    @NotEmpty
    private String oldPassword;
    @NotEmpty
    private String newPassword;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java
@@ -251,6 +251,53 @@
    }
    /**
     * æŸ¥è¯¢æ•…障码
     *
     * @param c3Mac
     */
    public String QueryFaultCode(String c3Mac) {
        C3QueryFaultCodeReqInnerFrame c3QueryFaultCodeReqInnerFrame =
                new C3QueryFaultCodeReqInnerFrame(c3Mac);
        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_C3_DATA.getCode(), c3QueryFaultCodeReqInnerFrame);
        System.out.println(a5Frame + "            -----a5Frame");
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC("32313243305008ff0a04ffff", a5Frame);
        System.out.println(commonFrame + "            -----commonFrame");
        A5C3QueryReportInnerFrame queryReportInnerFrame = new A5C3QueryReportInnerFrame().transformFrame(commonFrame.getPayload());
        if (queryReportInnerFrame.isValidate()) {
            return queryReportInnerFrame.getFaultCode();
        } else {
            throw new BusinessException("数据校验错误,请重新请求");
        }
    }
    /**
     * è¯»å¿ƒè·³åŒ…
     *
     * @param c3Mac
     */
    public A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage ReadTheHeartbeatPackage(String c3Mac) {
        C3ReadTheHeartbeatPackageReqInnerFrame readTheHeartbeatPackageReqInnerFrame =
                new C3ReadTheHeartbeatPackageReqInnerFrame(c3Mac);
        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_C3_DATA.getCode(), readTheHeartbeatPackageReqInnerFrame);
        System.out.println(a5Frame + "            -----a5Frame");
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC("32313243305008ff0a04ffff", a5Frame);
        System.out.println(commonFrame + "            -----commonFrame");
        A5C3HeartbeatReportInnerFrame heartbeatReportInnerFrame = new A5C3HeartbeatReportInnerFrame().transformFrame(commonFrame.getPayload());
        if (heartbeatReportInnerFrame.isValidate()) {
            return heartbeatReportInnerFrame.getHeartBeatDataPackage();
        } else {
            throw new BusinessException("数据校验错误,请重新请求");
        }
    }
    /**
     * è½¯é‡å¯
     *
     * @param c3Mac
ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java
@@ -7,6 +7,7 @@
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.param.AddClientPrarm;
import com.sandu.ximon.admin.param.ResetClientPasswordPrarm;
import com.sandu.ximon.admin.param.UpdateClientPrarm;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.dao.domain.Client;
@@ -14,6 +15,7 @@
import com.sandu.ximon.dao.domain.Role;
import com.sandu.ximon.dao.mapper.ClientMapper;
import lombok.AllArgsConstructor;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@@ -39,9 +41,9 @@
        if (addClientPrarm.getClientSuperior() != null && !"".equals(addClientPrarm.getClientSuperior())) {
            Client one = getOne(Wrappers.lambdaQuery(Client.class).eq(Client::getClientName, addClientPrarm.getClientSuperior()));
            if (one != null) {
                if(one.getSuperiorId() == null){
                if (one.getSuperiorId() == null) {
                    client.setSuperiorId(one.getId());
                }else{
                } else {
                    throw new BusinessException("上级客户不能为二级用户");
                }
            } else {
@@ -112,6 +114,25 @@
        return updateById(client);
    }
    public boolean resetPassword(ResetClientPasswordPrarm resetClientPasswordPrarm) {
        Client client = getOne(Wrappers.lambdaQuery(Client.class).eq(Client::getId, resetClientPasswordPrarm.getId()));
        if (client == null) {
            throw new BusinessException("该用户不存在!");
        }
        PasswordEncoder pw = new BCryptPasswordEncoder();
        //判断旧密码与数据库是否一致
        if (pw.matches(resetClientPasswordPrarm.getOldPassword(), client.getPassword())) {
            //加密新密码
            String encode = pw.encode(resetClientPasswordPrarm.getNewPassword());
            client.setPassword(encode);
            return updateById(client);
        } else {
            throw new BusinessException("旧密码不正确,请重新确认密码!");
        }
    }
    public boolean deleteClient(Long id) {
        //判断删除用户是否存在
        Client one = getById(id);