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); } }