package com.sandu.ximon.admin.manager.iot.frame.inner.request;
|
|
import cn.hutool.core.util.HexUtil;
|
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;
|
import com.sandu.ximon.admin.manager.iot.rrpc.util.SupplementUtils;
|
|
import java.text.DecimalFormat;
|
|
/**
|
* @author ZZQ
|
* @date 2022/3/3 16:43
|
*/
|
public class C3StartChargingReqInnerFrame implements IRequestInnerFrame {
|
private final String payload;
|
|
public C3StartChargingReqInnerFrame(String c3Mac, Integer chargingCapacity, Double chargeAmount) {
|
String destinationAddress = c3Mac;
|
|
payload = destinationAddress + SupplementUtils.suppleZero(HexUtil.toHex(chargingCapacity), 4
|
) + SupplementUtils.suppleZero(HexUtil.toHex(parseVal(chargeAmount)), 4
|
);
|
}
|
|
@Override
|
public String getEncodeFrame() {
|
String functionCode = C3ChargingEnum.StartCharging.getCode();
|
String payloadLength = "0008";
|
String frame = functionCode + payloadLength + payload;
|
return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
|
}
|
|
private static Integer parseVal(Double totalAmount) {
|
double v = Double.parseDouble(new DecimalFormat("#.0").format(totalAmount)) * 10;
|
String str = v + "";
|
str = str.substring(0, str.indexOf("."));
|
return Integer.parseInt(str);
|
}
|
|
|
}
|