package com.fastbee.json; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.fastbee.common.annotation.SysProtocol; import com.fastbee.common.constant.FastBeeConstant; import com.fastbee.common.core.mq.DeviceReport; import com.fastbee.common.core.mq.message.DeviceData; import com.fastbee.common.core.thingsModel.ThingsModelSimpleItem; import com.fastbee.common.core.thingsModel.ThingsModelValuesInput; import com.fastbee.common.exception.ServiceException; import com.fastbee.common.utils.DateUtils; import com.fastbee.iot.model.ThingsModels.ValueItem; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; /** * @author gsb * @date 2022/10/10 16:55 */ @Slf4j @Component @SysProtocol(name = "JSONArray解析协议",protocolCode = FastBeeConstant.PROTOCOL.JsonArray,description = "系统内置JSONArray解析协议") public class JsonProtocolService { public DeviceReport decode(DeviceData deviceData, String clientId) { try { DeviceReport reportMessage = new DeviceReport(); // bytep[] 转String String data = new String(deviceData.getData(),StandardCharsets.UTF_8); List values = JSON.parseArray(data, ThingsModelSimpleItem.class); //上报数据时间 for (ThingsModelSimpleItem value : values) { value.setTs(DateUtils.getNowDate()); } ThingsModelValuesInput valuesInput = new ThingsModelValuesInput(); valuesInput.setThingsModelValueRemarkItem(values); reportMessage.setValuesInput(valuesInput); reportMessage.setClientId(clientId); reportMessage.setSerialNumber(clientId); return reportMessage; }catch (Exception e){ throw new ServiceException("数据解析异常"+e.getMessage()); } } public byte[] encode(DeviceData message, String clientId) { try { JSONObject body = (JSONObject) message.getDownMessage().getBody(); ValueItem valueItem = new ValueItem(); for (Map.Entry entry : body.entrySet()) { valueItem.setId(entry.getKey()); valueItem.setValue(entry.getValue()+""); valueItem.setRemark(""); } String msg = "[" + JSONObject.toJSONString(valueItem) +"]"; return msg.getBytes(StandardCharsets.UTF_8); }catch (Exception e){ log.error("=>指令编码异常,device={},data={}",message.getSerialNumber(), message.getDownMessage().getBody()); return null; } } }