Newer
Older
newfiber-data-adapter / src / main / java / org / springnewfiber / dataadapter / sswj / util / RealTimeSerializer.java
package org.springnewfiber.dataadapter.sswj.util;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Filter;
import cn.hutool.core.util.ReflectUtil;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.google.common.collect.Maps;
import org.apache.commons.lang3.StringUtils;
import org.springnewfiber.dataadapter.entity.MqNodeData;
import org.springnewfiber.dataadapter.entity.PtReceiveBaseModel;
import org.springnewfiber.dataadapter.xf.entity.BaseXfInterfaceEntity;
import org.springnewfiber.dataadapter.xf.entity.MonitorChnlDataDto;
import org.springnewfiber.dataadapter.xf.entity.MonitorSewageData;

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @program: newfiber-data-adapter
 * @description:
 * @author: djt
 * @create: 2022-04-21 15:48
 **/
public class RealTimeSerializer extends JsonSerializer<Object> {

    @Override
    public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartObject();

        Class clazz = value.getClass();
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            for (Annotation annotation : field.getAnnotations()) {
                Class annotationType = annotation.annotationType();

                System.out.println("属性【" + field + "】的注释类型有: " + annotationType);
            }
        }
//            ReflectUtil.get
        gen.writeEndObject();
    }

    public static void main(String[] args) {
//        BzLive bzLive = new BzLive();
//        bzLive.setDataUpStatus("1");
//        bzLive.setDataUpUuid("111111");
//        System.out.println();
//        System.out.println(JSONObject.toJSONString(bzLive));
        MonitorChnlDataDto dto = new MonitorChnlDataDto();
//        dto.setWptn(new BigDecimal(2));
        dto.setZ(new BigDecimal(2));
        dto.setTm(new Date());
        dto.setStnm("ceshi");
        dto.setStcd("123456789");
        PtReceiveBaseModel json = xfObjectToRealMap(dto);
        System.out.println(JSONObject.toJSONString(json));
    }

    public static PtReceiveBaseModel objectToRealMap(Object object) {
        if (null == object) {
            return null;
        }
        Map<String, Object> map = BeanUtil.beanToMap(JSONObject.parse(JSONObject.toJSONString(object)));
        Map<String, MqNodeData> dataMap = Maps.newHashMap();
        PtReceiveBaseModel model = new PtReceiveBaseModel();
        CollUtil.filter(map, new Filter<Map.Entry<String, Object>>() {
            @Override
            public boolean accept(Map.Entry<String, Object> stringObjectEntry) {
                if (PtReceiveBaseModel.constantSet.contains(stringObjectEntry.getKey())) {
                    return false;
                }
                return true;
            }
        }).forEach((key, value) -> {
            MqNodeData data = new MqNodeData();
            data.setSn(key);
            data.setKey(key);
            data.setValue(value);
            dataMap.put(key, data);
        });
        model.setSt(map.get(PtReceiveBaseModel.RealTimeConsstant.st).toString());
        model.setTt(DateUtil.parse(map.get(PtReceiveBaseModel.RealTimeConsstant.tt).toString(), DatePattern.NORM_DATETIME_PATTERN));
        model.setUt(DateUtil.parse(map.get(PtReceiveBaseModel.RealTimeConsstant.ut) == null ? DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN) : map.get(PtReceiveBaseModel.RealTimeConsstant.ut).toString(), DatePattern.NORM_DATETIME_PATTERN));
        model.setDataMap(dataMap);
        return model;
    }
    public static PtReceiveBaseModel xfObjectToRealMap(BaseXfInterfaceEntity object) {
        if (null == object) {
            return null;
        }
        PtReceiveBaseModel model = new PtReceiveBaseModel();
        Map<String, MqNodeData> dataMap = Maps.newHashMap();
        String dataType = null;
        if(object instanceof MonitorSewageData) {
        	dataType = ((MonitorSewageData) object).getType();
        }
        final String snType = dataType;
        ReflectUtil.getFieldMap(object.getClass()).forEach((filedName, filed) -> {
            try {
                JsonProperty annotation = filed.getAnnotation(JsonProperty.class);
                filed.setAccessible(true);
                if (!PtReceiveBaseModel.XFconstantSet.contains(filedName)) {
                    if (filed.get(object) == null || StringUtils.isBlank(filed.get(object).toString())) {
                        return;
                    }
                    if (annotation != null) {
                        String name = annotation.value();
                        MqNodeData data = new MqNodeData();
                        if(StringUtils.isNotBlank(snType)) {
                        	data.setSn(filedName + "_" + snType);
                        }else {
                        	data.setSn(filedName);
                        }
                        data.setKey(name);
                        data.setValue(filed.get(object));
                        if (dataMap.containsKey(name)) {
                            dataMap.put(filedName, data);
                        } else {
                            dataMap.put(name, data);
                        }
                    }
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        });
        model.setSt(object.getStcd());
        model.setTt(object.getTm());
        model.setUt(new Date());
        model.setDataMap(dataMap);
        return model;
    }
}