//package com.elab.log.message;
//
//import com.dianping.cat.Cat;
//import com.ecloud.common.dto.request.RequestCommonModel;
//import com.elab.log.utils.CatMsgConstants;
//import feign.RequestTemplate;
//import feign.codec.EncodeException;
//import org.springframework.beans.factory.ObjectFactory;
//import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
//import org.springframework.cloud.netflix.feign.support.SpringEncoder;
//import org.springframework.stereotype.Component;
//
//import java.lang.reflect.Type;
//import java.util.Map;
//
///**
// * 在feign进行body解码的时候,将现有的参数做一次
// *
// * @author : liukx
// * @create : 2018/7/1 18:03
// * @email : liukx@elab-plus.com
// */
//@Component
//public class CatFeignMsgIdEncoder extends SpringEncoder {
//
//    public CatFeignMsgIdEncoder(ObjectFactory<HttpMessageConverters> messageConverters) {
//        super(messageConverters);
//    }
//
//    /**
//     * 参数解码处理
//     *
//     * @param requestBody
//     * @param bodyType
//     * @param request
//     * @throws EncodeException
//     */
//    @Override
//    public void encode(Object requestBody, Type bodyType, RequestTemplate request) throws EncodeException {
//        super.encode(requestBody, bodyType, request);
//        if (requestBody instanceof RequestCommonModel) {
//            try {
//                RequestCommonModel param = (RequestCommonModel) requestBody;
//                Map<String, Object> extMap = param.getExtMap();
//                setCatMessageId(request, extMap);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        } else if (requestBody instanceof Map) {
//            setCatMessageId(request, (Map<String, Object>) requestBody);
//        }
//    }
//
//    /**
//     * 将参数结构中附带CAT的消息树编号
//     *
//     * @param request
//     * @param extMap
//     */
//    private void setCatMessageId(RequestTemplate request, Map<String, Object> extMap) {
//        if (extMap != null) {
//            String rootId = extMap.get(Cat.Context.ROOT).toString();
//            String childId = extMap.get(Cat.Context.CHILD).toString();
//            String parentId = extMap.get(Cat.Context.PARENT).toString();
//            String applicationKey = extMap.get(CatMsgConstants.APPLICATION_KEY).toString();
//            request.header(Cat.Context.ROOT, rootId);
//            request.header(Cat.Context.CHILD, childId);
//            request.header(Cat.Context.PARENT, parentId);
//            request.header(CatMsgConstants.APPLICATION_KEY, applicationKey);
//        }
//    }
//}
