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; import com.sandu.ximon.admin.manager.iot.rrpc.util.SupplementUtils; import com.sandu.ximon.dao.domain.C3mChargingCharge; import java.text.DecimalFormat; import java.util.List; /** * @author ZZQ * @date 2022/8/15 11:23 */ public class C3SetRateReqInnerFrame implements IRequestInnerFrame { private final String payload; public C3SetRateReqInnerFrame(String c3Mac, List list) { StringBuffer buffer = new StringBuffer(); for (C3mChargingCharge bean : list) { //时间 String hour = SupplementUtils.suppleZero(hex10To16(bean.getHour()), 2); String min = SupplementUtils.suppleZero(hex10To16(bean.getMin()), 2); //费率 double chargeValue = bean.getCharge() * 10; String chargeHex = hex10To16( Integer.parseInt(new DecimalFormat("0").format(chargeValue))); String charge; if (chargeHex.length() > 2) { charge = "FF"; } else { charge = SupplementUtils.suppleZero(chargeHex, 2); } buffer = buffer.append(hour); buffer = buffer.append(min); buffer = buffer.append(charge); } //添加默认的无效费率 for (int i = 0; i < (5 - list.size()); i++) { //时间 buffer = buffer.append("FFFF"); //费率 buffer = buffer.append("FF"); } this.payload = c3Mac + buffer; } @Override public String getEncodeFrame() { String functionCode = C3ChargingEnum.SetRate.getCode(); String payloadLength = "0013"; String frame = functionCode + payloadLength + payload; return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase()); } /** * 十进制转16进制 * * @param value * @return */ private String hex10To16(int value) { return String.format("%02X", value); } }