1. 程式人生 > 實用技巧 >執行 execute 方法初始化過程MapperMethod

執行 execute 方法初始化過程MapperMethod

前言

剛開始使用Mybaits的同學有沒有這樣的疑惑,為什麼我們沒有編寫Mapper的實現類,卻能呼叫Mapper的方法呢?本篇文章我帶大家一起來解決這個疑問

上一篇文章我們獲取到了DefaultSqlSession,接著我們來看第一篇文章測試用例後面的程式碼

//獲取對應的mapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//執行方法
List<User> list = userMapper.getAll();

為 Mapper 介面建立代理物件

我們先從 DefaultSqlSession 的 getMapper 方法開始看起,如下:

public class DefaultSqlSession implements SqlSession {

    private final Configuration configuration;
  
    @Override
    public <T> T getMapper(Class<T> type) {
        return configuration.<T>getMapper(type, this);
    }
}


public class Configuration {

    protected final MapperRegistry mapperRegistry = new MapperRegistry(this);

    public <T> T getMapper(Class<T> type, SqlSession sqlSession) {
        return mapperRegistry.getMapper(type, sqlSession);
    }
}


public class MapperRegistry {

    private final Map<Class<?>, MapperProxyFactory<?>> knownMappers = new HashMap<Class<?>, MapperProxyFactory<?>>();

    @SuppressWarnings("unchecked")
    public <T> T getMapper(Class<T> type, SqlSession sqlSession) {
        // 從 knownMappers 中獲取與 type 對應的 MapperProxyFactory
        final MapperProxyFactory<T> mapperProxyFactory = (MapperProxyFactory<T>) knownMappers.get(type);
        if (mapperProxyFactory == null) {
            throw new BindingException("Type " + type + " is not known to the MapperRegistry.");
        }
        try {
            // 建立代理物件
            return mapperProxyFactory.newInstance(sqlSession);
        } catch (Exception e) {
            throw new BindingException("Error getting mapper instance. Cause: " + e, e);
        }
    }
}

這裡最重要就是加了註釋的兩行程式碼。

獲取MapperProxyFactory

根據名稱看,可以理解為Mapper代理的建立工廠,是不是Mapper的代理物件由它建立呢?我們先來回顧一下knownMappers 集合中的元素是何時存入的。這要在我前面的文章中找答案,MyBatis 在解析配置檔案的 <mappers> 節點的過程中,會呼叫 MapperRegistry 的 addMapper 方法將 Class 到 MapperProxyFactory 物件的對映關係存入到 knownMappers。有興趣的同學可以看看我之前的文章,我們來回顧一下原始碼:

public class XMLMapperBuilder extends BaseBuilder {

    private final XPathParser parser;
    private final MapperBuilderAssistant builderAssistant;

    private void bindMapperForNamespace() {
        // 獲取對映檔案的名稱空間
        String namespace = builderAssistant.getCurrentNamespace();
        if (namespace != null) {
            Class<?> boundType = null;
            try {
                // 根據名稱空間解析 mapper 型別
                boundType = Resources.classForName(namespace);
            } catch (ClassNotFoundException e) {
                //ignore, bound type is not required
            }
            if (boundType != null) {
                // 檢測當前 mapper 類是否被繫結過
                if (!configuration.hasMapper(boundType)) {
                    // Spring may not know the real resource name so we set a flag
                    // to prevent loading again this resource from the mapper interface
                    // look at MapperAnnotationBuilder#loadXmlResource
                    configuration.addLoadedResource("namespace:" + namespace);
                    
                    // 繫結 mapper 類
                    configuration.addMapper(boundType);
                }
            }
        }
    }
}


public class Configuration {

    protected final MapperRegistry mapperRegistry = new MapperRegistry(this);

    public <T> void addMapper(Class<T> type) {
        // 通過 MapperRegistry 繫結 mapper 類
        mapperRegistry.addMapper(type);
    }
}


public class MapperRegistry {

    private final Map<Class<?>, MapperProxyFactory<?>> knownMappers = new HashMap<Class<?>, MapperProxyFactory<?>>();
    
    public <T> void addMapper(Class<T> type) {
        if (type.isInterface()) {
            if (hasMapper(type)) {
                throw new BindingException("Type " + type + " is already known to the MapperRegistry.");
            }
            boolean loadCompleted = false;
            try {
                /*
                 * 將 type 和 MapperProxyFactory 進行繫結,MapperProxyFactory 可為 mapper 介面生成代理類
                 */
                knownMappers.put(type, new MapperProxyFactory<T>(type));
                // It's important that the type is added before the parser is run
                // otherwise the binding may automatically be attempted by the
                // mapper parser. If the type is already known, it won't try.
                MapperAnnotationBuilder parser = new MapperAnnotationBuilder(config, type);
                
                // 解析註解中的資訊
                parser.parse();
                loadCompleted = true;
            } finally {
                if (!loadCompleted) {
                    knownMappers.remove(type);
                }
            }
        }
    }
}

在解析Mapper.xml的最後階段,獲取到Mapper.xml的namespace,然後利用反射,獲取到namespace的Class,並建立一個MapperProxyFactory的例項,namespace的Class作為引數,最後將namespace的Class為key,MapperProxyFactory的例項為value存入knownMappers。

注意,我們這裡是通過對映檔案的名稱空間的Class當做knownMappers的Key。然後我們看看getMapper方法,是通過引數User.class也就是Mapper介面的Class來獲取MapperProxyFactory,所以我們明白了為什麼要求xml配置中的namespace要和和對應的Mapper介面的全限定名了。

生成代理物件

我們看return mapperProxyFactory.newInstance(sqlSession);,很明顯是呼叫了MapperProxyFactory的一個工廠方法,我們跟進去看看

public class MapperProxyFactory<T> {

    //存放Mapper介面Class
    private final Class<T> mapperInterface;
    private final Map<Method, MapperMethod> methodCache = new ConcurrentHashMap<Method, MapperMethod>();

    public MapperProxyFactory(Class<T> mapperInterface) {
        this.mapperInterface = mapperInterface;
    }

    public Class<T> getMapperInterface() {
        return mapperInterface;
    }

    public Map<Method, MapperMethod> getMethodCache() {
        return methodCache;
    }

    @SuppressWarnings("unchecked")
    protected T newInstance(MapperProxy<T> mapperProxy) {
        //生成mapperInterface的代理類
        return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy);
    }

    public T newInstance(SqlSession sqlSession) {
        /*
         * 建立 MapperProxy 物件,MapperProxy 實現了 InvocationHandler 介面,代理邏輯封裝在此類中
         * 將sqlSession傳入MapperProxy物件中,第二個引數是Mapper的介面,並不是其實現類
         */
        final MapperProxy<T> mapperProxy = new MapperProxy<T>(sqlSession, mapperInterface, methodCache);
        return newInstance(mapperProxy);
    }

}

上面的程式碼首先建立了一個 MapperProxy 物件,該物件實現了 InvocationHandler 介面。然後將物件作為引數傳給過載方法,並在過載方法中呼叫 JDK 動態代理介面為 Mapper介面 生成代理物件。

這裡要注意一點,MapperProxy這個InvocationHandler 建立的時候,傳入的引數並不是Mapper介面的實現類,我們以前是怎麼建立JDK動態代理的?先建立一個介面,然後再建立一個介面的實現類,最後建立一個InvocationHandler並將實現類傳入其中作為目標類,建立介面的代理類,然後呼叫代理類方法時會回撥InvocationHandler的invoke方法,最後在invoke方法中呼叫目標類的方法,但是我們這裡呼叫Mapper介面代理類的方法時,需要呼叫其實現類的方法嗎?不需要,我們需要呼叫對應的配置檔案的SQL,所以這裡並不需要傳入Mapper的實現類到MapperProxy中,那Mapper介面的代理物件是如何呼叫對應配置檔案的SQL呢?下面我們來看看。

Mapper代理類如何執行SQL?

上面一節中我們已經獲取到了EmployeeMapper的代理類,並且其InvocationHandler為MapperProxy,那我們接著看Mapper介面方法的呼叫

List<User> list = userMapper.getAll();

知道JDK動態代理的同學都知道,呼叫代理類的方法,最後都會回撥到InvocationHandler的Invoke方法,那我們來看看這個InvocationHandler(MapperProxy)

public class MapperProxy<T> implements InvocationHandler, Serializable {

    private static final long serialVersionUID = -6424540398559729838L;
    private final SqlSession sqlSession;
    private final Class<T> mapperInterface;
    private final Map<Method, MapperMethod> methodCache;

    public MapperProxy(SqlSession sqlSession, Class<T> mapperInterface, Map<Method, MapperMethod> methodCache) {
        this.sqlSession = sqlSession;
        this.mapperInterface = mapperInterface;
        this.methodCache = methodCache;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        try {
            // 如果方法是定義在 Object 類中的,則直接呼叫
            if (Object.class.equals(method.getDeclaringClass())) {
                return method.invoke(this, args);
                
            //如果是介面中的default方法,JDK8的新特性之一
            } else if (isDefaultMethod(method)) {
                //如果使用者執行的是介面中的default方法的話,MyBatis就需要為使用者提供正常的代理流程。
                return invokeDefaultMethod(proxy, method, args);
            }
        } catch (Throwable t) {
            throw ExceptionUtil.unwrapThrowable(t);
        }
        // 從快取中獲取 MapperMethod 物件,若快取未命中,則建立 MapperMethod 物件
        final MapperMethod mapperMethod = cachedMapperMethod(method);
        // 呼叫 execute 方法執行 SQL
        return mapperMethod.execute(sqlSession, args);
    }

    private MapperMethod cachedMapperMethod(Method method) {
        MapperMethod mapperMethod = methodCache.get(method);
        if (mapperMethod == null) {
            //建立一個MapperMethod,引數為mapperInterface和method還有Configuration
            mapperMethod = new MapperMethod(mapperInterface, method, sqlSession.getConfiguration());
            methodCache.put(method, mapperMethod);
        }
        return mapperMethod;
    }
}

如上,回撥函式invoke邏輯會首先檢測被攔截的方法是不是定義在 Object 中的,比如 equals、hashCode 方法等。對於這類方法,直接執行即可。緊接著從快取中獲取或者建立 MapperMethod 物件,然後通過該物件中的 execute 方法執行 SQL。我們先來看看如何建立MapperMethod

建立 MapperMethod 物件

public class MapperMethod {

    //包含SQL相關資訊,比喻MappedStatement的id屬性,(mapper.UserMapper.getAll)
    private final SqlCommand command;
    
    //包含了關於執行的Mapper方法的引數型別和返回型別。
    private final MethodSignature method;

    public MapperMethod(Class<?> mapperInterface, Method method, Configuration config) {
        // 建立 SqlCommand 物件,該物件包含一些和 SQL 相關的資訊
        this.command = new SqlCommand(config, mapperInterface, method);
        // 建立 MethodSignature 物件,從類名中可知,該物件包含了被攔截方法的一些資訊
        this.method = new MethodSignature(config, mapperInterface, method);
    }
}

MapperMethod包含SqlCommand 和MethodSignature 物件,我們來看看其建立過程

1、建立 SqlCommand 物件
public static class SqlCommand {

    //name為MappedStatement的id,也就是namespace.methodName(mapper.UserMapper.getAll)
    private final String name;
    
    //SQL的型別,如insert,delete,update
    private final SqlCommandType type;

    public SqlCommand(Configuration configuration, Class<?> mapperInterface, Method method) {
    
        //拼接Mapper介面名和方法名,(mapper.UserMapper.getAll)
        final String methodName = method.getName();
        final Class<?> declaringClass = method.getDeclaringClass();
        //檢測configuration是否有key為mapper.UserMapper.getAll的MappedStatement
        //獲取MappedStatement
        MappedStatement ms = resolveMappedStatement(mapperInterface, methodName, declaringClass,
          configuration);
        // 檢測當前方法是否有對應的 MappedStatement
        if (ms == null) {
            if (method.getAnnotation(Flush.class) != null) {
                name = null;
                type = SqlCommandType.FLUSH;
            } else {
                throw new BindingException("Invalid bound statement (not found): "
                  + mapperInterface.getName() + "." + methodName);
            }
        } else {
            // 設定 name 和 type 變數
            name = ms.getId();
            type = ms.getSqlCommandType();
            if (type == SqlCommandType.UNKNOWN) {
                throw new BindingException("Unknown execution method for: " + name);
            }
        }
    }
    
    private MappedStatement resolveMappedStatement(Class<?> mapperInterface, String methodName,
        Class<?> declaringClass, Configuration configuration) {
        String statementId = mapperInterface.getName() + "." + methodName;
        //檢測configuration是否有key為statementName的MappedStatement
        if (configuration.hasStatement(statementId)) {
            return configuration.getMappedStatement(statementId);
        } else if (mapperInterface.equals(declaringClass)) {
            return null;
        }
        for (Class<?> superInterface : mapperInterface.getInterfaces()) {
            if (declaringClass.isAssignableFrom(superInterface)) {
                MappedStatement ms = resolveMappedStatement(superInterface, methodName,
                  declaringClass, configuration);
                if (ms != null) {
                    return ms;
                }
            }
        }
        return null;
    }
}

通過拼接介面名和方法名,在configuration獲取對應的MappedStatement,並設定設定 name 和 type 變數,程式碼很簡單

2、建立 MethodSignature 物件

MethodSignature 包含了被攔截方法的一些資訊,如目標方法的返回型別,目標方法的引數列表資訊等。下面,我們來看一下 MethodSignature 的構造方法。

public static class MethodSignature {

    private final boolean returnsMany;
    private final boolean returnsMap;
    private final boolean returnsVoid;
    private final boolean returnsCursor;
    private final Class<?> returnType;
    private final String mapKey;
    private final Integer resultHandlerIndex;
    private final Integer rowBoundsIndex;
    private final ParamNameResolver paramNameResolver;

    public MethodSignature(Configuration configuration, Class<?> mapperInterface, Method method) {
        // 通過反射解析方法返回型別
        Type resolvedReturnType = TypeParameterResolver.resolveReturnType(method, mapperInterface);
        if (resolvedReturnType instanceof Class<?>) {
            this.returnType = (Class<?>) resolvedReturnType;
        } else if (resolvedReturnType instanceof ParameterizedType) {
            this.returnType = (Class<?>) ((ParameterizedType) resolvedReturnType).getRawType();
        } else {
            this.returnType = method.getReturnType();
        }
        
        // 檢測返回值型別是否是 void、集合或陣列、Cursor、Map 等
        this.returnsVoid = void.class.equals(this.returnType);
        this.returnsMany = configuration.getObjectFactory().isCollection(this.returnType) || this.returnType.isArray();
        this.returnsCursor = Cursor.class.equals(this.returnType);
        
        // 解析 @MapKey 註解,獲取註解內容
        this.mapKey = getMapKey(method);
        this.returnsMap = this.mapKey != null;
        
        /*
         * 獲取 RowBounds 引數在引數列表中的位置,如果引數列表中
         * 包含多個 RowBounds 引數,此方法會丟擲異常
         */ 
        this.rowBoundsIndex = getUniqueParamIndex(method, RowBounds.class);
        // 獲取 ResultHandler 引數在引數列表中的位置
        this.resultHandlerIndex = getUniqueParamIndex(method, ResultHandler.class);
        // 解析引數列表
        this.paramNameResolver = new ParamNameResolver(configuration, method);
    }
}

執行 execute 方法

前面已經分析了 MapperMethod 的初始化過程,現在 MapperMethod 建立好了。那麼,接下來要做的事情是呼叫 MapperMethod 的 execute 方法,執行 SQL。傳遞引數sqlSession和method的執行引數args。

return mapperMethod.execute(this.sqlSession, args);

我們去MapperMethod 的execute方法中看看

MapperMethod

public class MapperMethod {
    
    //包含SQL相關資訊,比喻MappedStatement的id屬性,(mapper.UserMapper.getAll)
    private final SqlCommand command;

    //包含了關於執行的Mapper方法的引數型別和返回型別。
    private final MethodSignature method;

    public Object execute(SqlSession sqlSession, Object[] args) {
        Object result;
        
        // 根據 SQL 型別執行相應的資料庫操作
        switch (command.getType()) {
            case INSERT: {
                // 對使用者傳入的引數進行轉換,下同
                Object param = method.convertArgsToSqlCommandParam(args);
                // 執行插入操作,rowCountResult 方法用於處理返回值
                result = rowCountResult(sqlSession.insert(command.getName(), param));
                break;
            }
            case UPDATE: {
                Object param = method.convertArgsToSqlCommandParam(args);
                 // 執行更新操作
                result = rowCountResult(sqlSession.update(command.getName(), param));
                break;
            }
            case DELETE: {
                Object param = method.convertArgsToSqlCommandParam(args);
                // 執行刪除操作
                result = rowCountResult(sqlSession.delete(command.getName(), param));
                break;
            }
            case SELECT:
                // 根據目標方法的返回型別進行相應的查詢操作
                if (method.returnsVoid() && method.hasResultHandler()) {
                    executeWithResultHandler(sqlSession, args);
                    result = null;
                } else if (method.returnsMany()) {
                    // 執行查詢操作,並返回多個結果 
                    result = executeForMany(sqlSession, args);
                } else if (method.returnsMap()) {
                    // 執行查詢操作,並將結果封裝在 Map 中返回
                    result = executeForMap(sqlSession, args);
                } else if (method.returnsCursor()) {
                    // 執行查詢操作,並返回一個 Cursor 物件
                    result = executeForCursor(sqlSession, args);
                } else {
                    Object param = method.convertArgsToSqlCommandParam(args);
                    // 執行查詢操作,並返回一個結果
                    result = sqlSession.selectOne(command.getName(), param);
                }
                break;
            case FLUSH:
                // 執行重新整理操作
                result = sqlSession.flushStatements();
                break;
            default:
                throw new BindingException("Unknown execution method for: " + command.getName());
        }
        if (result == null && method.getReturnType().isPrimitive() && !method.returnsVoid()) {
            throw new BindingException("Mapper method '" + command.getName() 
            + " attempted to return null from a method with a primitive return type (" + method.getReturnType() + ").");
        }
        return result;
    }
}

如上,execute 方法主要由一個 switch 語句組成,用於根據 SQL 型別執行相應的資料庫操作。我們先來看看是引數的處理方法convertArgsToSqlCommandParam是如何將方法引數陣列轉化成Map的。

public class MapperMethod {

    public static class MethodSignature {

        private final ParamNameResolver paramNameResolver;
        
        public Object convertArgsToSqlCommandParam(Object[] args) {
            return paramNameResolver.getNamedParams(args);
        }
    }
}


public class ParamNameResolver {

    private static final String GENERIC_NAME_PREFIX = "param";

    private final SortedMap<Integer, String> names;

    private boolean hasParamAnnotation;
    
    public Object getNamedParams(Object[] args) {
        final int paramCount = names.size();
        if (args == null || paramCount == 0) {
            return null;
        } else if (!hasParamAnnotation && paramCount == 1) {
            return args[names.firstKey()];
        } else {
            //建立一個Map,key為method的引數名,值為method的執行時引數值
            final Map<String, Object> param = new ParamMap<Object>();
            int i = 0;
            for (Map.Entry<Integer, String> entry : names.entrySet()) {
                // 新增 <引數名, 引數值> 鍵值對到 param 中
                param.put(entry.getValue(), args[entry.getKey()]);
                // add generic param names (param1, param2, ...)
                final String genericParamName = GENERIC_NAME_PREFIX + String.valueOf(i + 1);
                // ensure not to overwrite parameter named with @Param
                if (!names.containsValue(genericParamName)) {
                    param.put(genericParamName, args[entry.getKey()]);
                }
                i++;
            }
            return param;
        }
    }
}

我們看到,將Object[] args轉化成了一個Map<引數名, 引數值> ,接著我們就可以看查詢過程分析了,如下

// 執行查詢操作,並返回一個結果
result = sqlSession.selectOne(command.getName(), param);

我們看到是通過sqlSession來執行查詢的,並且傳入的引數為command.getName()和param,也就是namespace.methodName(mapper.EmployeeMapper.getAll)和方法的執行引數。

查詢操作在下一篇文章單獨來講。


http://news.hbfzb.com/info.php?id=197357779
https://www.hbfzb.com/news.php?id=197357779
http://zhangjiakou.hbfzb.com/apple.php?id=197357779
http://news.hbfzb.com/apple.php?id=197357779
http://xingtai.hbfzb.com/apple.php?id=197357779
http://chengde.hbfzb.com/apple.php?id=197357779
http://shijiazhuang.hbfzb.com/apple.php?id=197357779
http://baoding.hbfzb.com/apple.php?id=197357779
http://hengshui.hbfzb.com/apple.php?id=197357779
https://www.hbfzb.com/html/qhd.php?id=197357779
https://www.hbfzb.com/html/ts.php?id=197357779
https://www.hbfzb.com/html/apple.php?id=197357779
https://www.hbfzb.com/html/news.php?id=197357779
https://www.hbfzb.com/html/zl.php?id=197357779
https://www.hbfzb.com/html/info.php?id=197357779
https://www.hbfzb.com/html/lf.php?id=197357779
https://www.hbfzb.com/html/shou.php?id=197357779
https://www.hbfzb.com/index.php?id=197357779
http://qinhuangdao.hbfzb.com/apple.php?id=197357779
http://xinji.hbfzb.com/apple.php?id=197357779
http://dingzhou.hbfzb.com/apple.php?id=197357779
http://shipin.hbfzb.com/apple.php?id=197357779
http://wshb.hbfzb.com/apple.php?id=197357779
http://photov.hbfzb.com/apple.php?id=197357779
http://szgc.glodon.com/news.php?id=197357779
http://sz.glodon.com/info.php?id=197357779
http://www.bxysg.com/news.asp?id=197357779
http://www.whbts.com/poser.asp?id=197357779
http://www.cquedp.com/news.php?id=197357779
http://cquedp.com/?id=197357779
http://m.cquedp.com/?id=197357779
http://www.hsfuhui.com/a/news.php?id=197357779
http://mdzz.itlun.cn/index.html?id=197357779
http://www.yqyy.net/news.php??id=197357779
http://www.hnalizs.com/news.php?id=197357779
http://www.gdnhec.com/poser.php?id=197357779
http://www.lygwb.com/poser.php?id=197357779
http://mzhihui.mulangcm.com/news/news.php?id=197357779
http://www.spark-lock.com/poser.asp?id=197357779
http://www.fsruijian.net/poser.php?id=197357779
http://www.xdmonitor.com/news.aspx?id=197357779
https://www.iresearch.com.cn/news.aspx?id=197357779
http://www.keyunit.cn/news.php?id=197357779
http://1798.rongbiz.net/new.php?id=197357779
http://news.hbfzb.com/info.php?id=171511155
https://www.hbfzb.com/news.php?id=171511155
http://zhangjiakou.hbfzb.com/apple.php?id=171511155
http://news.hbfzb.com/apple.php?id=171511155
http://xingtai.hbfzb.com/apple.php?id=171511155
http://chengde.hbfzb.com/apple.php?id=171511155
http://shijiazhuang.hbfzb.com/apple.php?id=171511155
http://baoding.hbfzb.com/apple.php?id=171511155
http://hengshui.hbfzb.com/apple.php?id=171511155
https://www.hbfzb.com/html/qhd.php?id=171511155
https://www.hbfzb.com/html/ts.php?id=171511155
https://www.hbfzb.com/html/apple.php?id=171511155
https://www.hbfzb.com/html/news.php?id=171511155
https://www.hbfzb.com/html/zl.php?id=171511155
https://www.hbfzb.com/html/info.php?id=171511155
https://www.hbfzb.com/html/lf.php?id=171511155
https://www.hbfzb.com/html/shou.php?id=171511155
https://www.hbfzb.com/index.php?id=171511155
http://qinhuangdao.hbfzb.com/apple.php?id=171511155
http://xinji.hbfzb.com/apple.php?id=171511155
http://dingzhou.hbfzb.com/apple.php?id=171511155
http://shipin.hbfzb.com/apple.php?id=171511155
http://wshb.hbfzb.com/apple.php?id=171511155
http://photov.hbfzb.com/apple.php?id=171511155
http://szgc.glodon.com/news.php?id=171511155
http://sz.glodon.com/info.php?id=171511155
http://www.bxysg.com/news.asp?id=171511155
http://www.whbts.com/poser.asp?id=171511155
http://www.cquedp.com/news.php?id=171511155
http://cquedp.com/?id=171511155
http://m.cquedp.com/?id=171511155
http://www.hsfuhui.com/a/news.php?id=171511155
http://mdzz.itlun.cn/index.html?id=171511155
http://www.yqyy.net/news.php??id=171511155
http://www.hnalizs.com/news.php?id=171511155
http://www.gdnhec.com/poser.php?id=171511155
http://www.lygwb.com/poser.php?id=171511155
http://mzhihui.mulangcm.com/news/news.php?id=171511155
http://www.spark-lock.com/poser.asp?id=171511155
http://www.fsruijian.net/poser.php?id=171511155
http://www.xdmonitor.com/news.aspx?id=171511155
https://www.iresearch.com.cn/news.aspx?id=171511155
http://www.keyunit.cn/news.php?id=171511155
http://1798.rongbiz.net/new.php?id=171511155
http://news.hbfzb.com/info.php?id=664688200
https://www.hbfzb.com/news.php?id=664688200
http://zhangjiakou.hbfzb.com/apple.php?id=664688200
http://news.hbfzb.com/apple.php?id=664688200
http://xingtai.hbfzb.com/apple.php?id=664688200
http://chengde.hbfzb.com/apple.php?id=664688200
http://shijiazhuang.hbfzb.com/apple.php?id=664688200
http://baoding.hbfzb.com/apple.php?id=664688200
http://hengshui.hbfzb.com/apple.php?id=664688200
https://www.hbfzb.com/html/qhd.php?id=664688200
https://www.hbfzb.com/html/ts.php?id=664688200
https://www.hbfzb.com/html/apple.php?id=664688200
https://www.hbfzb.com/html/news.php?id=664688200
https://www.hbfzb.com/html/zl.php?id=664688200
https://www.hbfzb.com/html/info.php?id=664688200
https://www.hbfzb.com/html/lf.php?id=664688200
https://www.hbfzb.com/html/shou.php?id=664688200
https://www.hbfzb.com/index.php?id=664688200
http://qinhuangdao.hbfzb.com/apple.php?id=664688200
http://xinji.hbfzb.com/apple.php?id=664688200
http://dingzhou.hbfzb.com/apple.php?id=664688200
http://shipin.hbfzb.com/apple.php?id=664688200
http://wshb.hbfzb.com/apple.php?id=664688200
http://photov.hbfzb.com/apple.php?id=664688200
http://szgc.glodon.com/news.php?id=664688200
http://sz.glodon.com/info.php?id=664688200
http://www.bxysg.com/news.asp?id=664688200
http://www.whbts.com/poser.asp?id=664688200
http://www.cquedp.com/news.php?id=664688200
http://cquedp.com/?id=664688200
http://m.cquedp.com/?id=664688200
http://www.hsfuhui.com/a/news.php?id=664688200
http://mdzz.itlun.cn/index.html?id=664688200
http://www.yqyy.net/news.php??id=664688200
http://www.hnalizs.com/news.php?id=664688200
http://www.gdnhec.com/poser.php?id=664688200
http://www.lygwb.com/poser.php?id=664688200
http://mzhihui.mulangcm.com/news/news.php?id=664688200
http://www.spark-lock.com/poser.asp?id=664688200
http://www.fsruijian.net/poser.php?id=664688200
http://www.xdmonitor.com/news.aspx?id=664688200
https://www.iresearch.com.cn/news.aspx?id=664688200
http://www.keyunit.cn/news.php?id=664688200
http://1798.rongbiz.net/new.php?id=664688200
http://news.hbfzb.com/info.php?id=602406060
https://www.hbfzb.com/news.php?id=602406060
http://zhangjiakou.hbfzb.com/apple.php?id=602406060
http://news.hbfzb.com/apple.php?id=602406060
http://xingtai.hbfzb.com/apple.php?id=602406060
http://chengde.hbfzb.com/apple.php?id=602406060
http://shijiazhuang.hbfzb.com/apple.php?id=602406060
http://baoding.hbfzb.com/apple.php?id=602406060
http://hengshui.hbfzb.com/apple.php?id=602406060
https://www.hbfzb.com/html/qhd.php?id=602406060
https://www.hbfzb.com/html/ts.php?id=602406060
https://www.hbfzb.com/html/apple.php?id=602406060
https://www.hbfzb.com/html/news.php?id=602406060
https://www.hbfzb.com/html/zl.php?id=602406060
https://www.hbfzb.com/html/info.php?id=602406060
https://www.hbfzb.com/html/lf.php?id=602406060
https://www.hbfzb.com/html/shou.php?id=602406060
https://www.hbfzb.com/index.php?id=602406060
http://qinhuangdao.hbfzb.com/apple.php?id=602406060
http://xinji.hbfzb.com/apple.php?id=602406060
http://dingzhou.hbfzb.com/apple.php?id=602406060
http://shipin.hbfzb.com/apple.php?id=602406060
http://wshb.hbfzb.com/apple.php?id=602406060
http://photov.hbfzb.com/apple.php?id=602406060
http://szgc.glodon.com/news.php?id=602406060
http://sz.glodon.com/info.php?id=602406060
http://www.bxysg.com/news.asp?id=602406060
http://www.whbts.com/poser.asp?id=602406060
http://www.cquedp.com/news.php?id=602406060
http://cquedp.com/?id=602406060
http://m.cquedp.com/?id=602406060
http://www.hsfuhui.com/a/news.php?id=602406060
http://mdzz.itlun.cn/index.html?id=602406060
http://www.yqyy.net/news.php??id=602406060
http://www.hnalizs.com/news.php?id=602406060
http://www.gdnhec.com/poser.php?id=602406060
http://www.lygwb.com/poser.php?id=602406060
http://mzhihui.mulangcm.com/news/news.php?id=602406060
http://www.spark-lock.com/poser.asp?id=602406060
http://www.fsruijian.net/poser.php?id=602406060
http://www.xdmonitor.com/news.aspx?id=602406060
https://www.iresearch.com.cn/news.aspx?id=602406060
http://www.keyunit.cn/news.php?id=602406060
http://1798.rongbiz.net/new.php?id=602406060
http://news.hbfzb.com/info.php?id=842660622
https://www.hbfzb.com/news.php?id=842660622
http://zhangjiakou.hbfzb.com/apple.php?id=842660622
http://news.hbfzb.com/apple.php?id=842660622
http://xingtai.hbfzb.com/apple.php?id=842660622
http://chengde.hbfzb.com/apple.php?id=842660622
http://shijiazhuang.hbfzb.com/apple.php?id=842660622
http://baoding.hbfzb.com/apple.php?id=842660622
http://hengshui.hbfzb.com/apple.php?id=842660622
https://www.hbfzb.com/html/qhd.php?id=842660622
https://www.hbfzb.com/html/ts.php?id=842660622
https://www.hbfzb.com/html/apple.php?id=842660622
https://www.hbfzb.com/html/news.php?id=842660622
https://www.hbfzb.com/html/zl.php?id=842660622
https://www.hbfzb.com/html/info.php?id=842660622
https://www.hbfzb.com/html/lf.php?id=842660622
https://www.hbfzb.com/html/shou.php?id=842660622
https://www.hbfzb.com/index.php?id=842660622
http://qinhuangdao.hbfzb.com/apple.php?id=842660622
http://xinji.hbfzb.com/apple.php?id=842660622
http://dingzhou.hbfzb.com/apple.php?id=842660622
http://shipin.hbfzb.com/apple.php?id=842660622
http://wshb.hbfzb.com/apple.php?id=842660622
http://photov.hbfzb.com/apple.php?id=842660622
http://szgc.glodon.com/news.php?id=842660622
http://sz.glodon.com/info.php?id=842660622
http://www.bxysg.com/news.asp?id=842660622
http://www.whbts.com/poser.asp?id=842660622
http://www.cquedp.com/news.php?id=842660622
http://cquedp.com/?id=842660622
http://m.cquedp.com/?id=842660622
http://www.hsfuhui.com/a/news.php?id=842660622
http://mdzz.itlun.cn/index.html?id=842660622
http://www.yqyy.net/news.php??id=842660622
http://www.hnalizs.com/news.php?id=842660622
http://www.gdnhec.com/poser.php?id=842660622
http://www.lygwb.com/poser.php?id=842660622
http://mzhihui.mulangcm.com/news/news.php?id=842660622
http://www.spark-lock.com/poser.asp?id=842660622
http://www.fsruijian.net/poser.php?id=842660622
http://www.xdmonitor.com/news.aspx?id=842660622
https://www.iresearch.com.cn/news.aspx?id=842660622
http://www.keyunit.cn/news.php?id=842660622
http://1798.rongbiz.net/new.php?id=842660622
http://news.hbfzb.com/info.php?id=424624040
https://www.hbfzb.com/news.php?id=424624040
http://zhangjiakou.hbfzb.com/apple.php?id=424624040
http://news.hbfzb.com/apple.php?id=424624040
http://xingtai.hbfzb.com/apple.php?id=424624040
http://chengde.hbfzb.com/apple.php?id=424624040
http://shijiazhuang.hbfzb.com/apple.php?id=424624040
http://baoding.hbfzb.com/apple.php?id=424624040
http://hengshui.hbfzb.com/apple.php?id=424624040
https://www.hbfzb.com/html/qhd.php?id=424624040
https://www.hbfzb.com/html/ts.php?id=424624040
https://www.hbfzb.com/html/apple.php?id=424624040
https://www.hbfzb.com/html/news.php?id=424624040
https://www.hbfzb.com/html/zl.php?id=424624040
https://www.hbfzb.com/html/info.php?id=424624040
https://www.hbfzb.com/html/lf.php?id=424624040
https://www.hbfzb.com/html/shou.php?id=424624040
https://www.hbfzb.com/index.php?id=424624040
http://qinhuangdao.hbfzb.com/apple.php?id=424624040
http://xinji.hbfzb.com/apple.php?id=424624040
http://dingzhou.hbfzb.com/apple.php?id=424624040
http://shipin.hbfzb.com/apple.php?id=424624040
http://wshb.hbfzb.com/apple.php?id=424624040
http://photov.hbfzb.com/apple.php?id=424624040
http://szgc.glodon.com/news.php?id=424624040
http://sz.glodon.com/info.php?id=424624040
http://www.bxysg.com/news.asp?id=424624040
http://www.whbts.com/poser.asp?id=424624040
http://www.cquedp.com/news.php?id=424624040
http://cquedp.com/?id=424624040
http://m.cquedp.com/?id=424624040
http://www.hsfuhui.com/a/news.php?id=424624040
http://mdzz.itlun.cn/index.html?id=424624040
http://www.yqyy.net/news.php??id=424624040
http://www.hnalizs.com/news.php?id=424624040
http://www.gdnhec.com/poser.php?id=424624040
http://www.lygwb.com/poser.php?id=424624040
http://mzhihui.mulangcm.com/news/news.php?id=424624040
http://www.spark-lock.com/poser.asp?id=424624040
http://www.fsruijian.net/poser.php?id=424624040
http://www.xdmonitor.com/news.aspx?id=424624040
https://www.iresearch.com.cn/news.aspx?id=424624040
http://www.keyunit.cn/news.php?id=424624040
http://1798.rongbiz.net/new.php?id=424624040
http://news.hbfzb.com/info.php?id=395937771
https://www.hbfzb.com/news.php?id=395937771
http://zhangjiakou.hbfzb.com/apple.php?id=395937771
http://news.hbfzb.com/apple.php?id=395937771
http://xingtai.hbfzb.com/apple.php?id=395937771
http://chengde.hbfzb.com/apple.php?id=395937771
http://shijiazhuang.hbfzb.com/apple.php?id=395937771
http://baoding.hbfzb.com/apple.php?id=395937771
http://hengshui.hbfzb.com/apple.php?id=395937771
https://www.hbfzb.com/html/qhd.php?id=395937771
https://www.hbfzb.com/html/ts.php?id=395937771
https://www.hbfzb.com/html/apple.php?id=395937771
https://www.hbfzb.com/html/news.php?id=395937771
https://www.hbfzb.com/html/zl.php?id=395937771
https://www.hbfzb.com/html/info.php?id=395937771
https://www.hbfzb.com/html/lf.php?id=395937771
https://www.hbfzb.com/html/shou.php?id=395937771
https://www.hbfzb.com/index.php?id=395937771
http://qinhuangdao.hbfzb.com/apple.php?id=395937771
http://xinji.hbfzb.com/apple.php?id=395937771
http://dingzhou.hbfzb.com/apple.php?id=395937771
http://shipin.hbfzb.com/apple.php?id=395937771
http://wshb.hbfzb.com/apple.php?id=395937771
http://photov.hbfzb.com/apple.php?id=395937771
http://szgc.glodon.com/news.php?id=395937771
http://sz.glodon.com/info.php?id=395937771
http://www.bxysg.com/news.asp?id=395937771
http://www.whbts.com/poser.asp?id=395937771
http://www.cquedp.com/news.php?id=395937771
http://cquedp.com/?id=395937771
http://m.cquedp.com/?id=395937771
http://www.hsfuhui.com/a/news.php?id=395937771
http://mdzz.itlun.cn/index.html?id=395937771
http://www.yqyy.net/news.php??id=395937771
http://www.hnalizs.com/news.php?id=395937771
http://www.gdnhec.com/poser.php?id=395937771
http://www.lygwb.com/poser.php?id=395937771
http://mzhihui.mulangcm.com/news/news.php?id=395937771
http://www.spark-lock.com/poser.asp?id=395937771
http://www.fsruijian.net/poser.php?id=395937771
http://www.xdmonitor.com/news.aspx?id=395937771
https://www.iresearch.com.cn/news.aspx?id=395937771
http://www.keyunit.cn/news.php?id=395937771
http://1798.rongbiz.net/new.php?id=395937771
http://news.hbfzb.com/info.php?id=642826480
https://www.hbfzb.com/news.php?id=642826480
http://zhangjiakou.hbfzb.com/apple.php?id=642826480
http://news.hbfzb.com/apple.php?id=642826480
http://xingtai.hbfzb.com/apple.php?id=642826480
http://chengde.hbfzb.com/apple.php?id=642826480
http://shijiazhuang.hbfzb.com/apple.php?id=642826480
http://baoding.hbfzb.com/apple.php?id=642826480
http://hengshui.hbfzb.com/apple.php?id=642826480
https://www.hbfzb.com/html/qhd.php?id=642826480
https://www.hbfzb.com/html/ts.php?id=642826480
https://www.hbfzb.com/html/apple.php?id=642826480
https://www.hbfzb.com/html/news.php?id=642826480
https://www.hbfzb.com/html/zl.php?id=642826480
https://www.hbfzb.com/html/info.php?id=642826480
https://www.hbfzb.com/html/lf.php?id=642826480
https://www.hbfzb.com/html/shou.php?id=642826480
https://www.hbfzb.com/index.php?id=642826480
http://qinhuangdao.hbfzb.com/apple.php?id=642826480
http://xinji.hbfzb.com/apple.php?id=642826480
http://dingzhou.hbfzb.com/apple.php?id=642826480
http://shipin.hbfzb.com/apple.php?id=642826480
http://wshb.hbfzb.com/apple.php?id=642826480
http://photov.hbfzb.com/apple.php?id=642826480
http://szgc.glodon.com/news.php?id=642826480
http://sz.glodon.com/info.php?id=642826480
http://www.bxysg.com/news.asp?id=642826480
http://www.whbts.com/poser.asp?id=642826480
http://www.cquedp.com/news.php?id=642826480
http://cquedp.com/?id=642826480
http://m.cquedp.com/?id=642826480
http://www.hsfuhui.com/a/news.php?id=642826480
http://mdzz.itlun.cn/index.html?id=642826480
http://www.yqyy.net/news.php??id=642826480
http://www.hnalizs.com/news.php?id=642826480
http://www.gdnhec.com/poser.php?id=642826480
http://www.lygwb.com/poser.php?id=642826480
http://mzhihui.mulangcm.com/news/news.php?id=642826480
http://www.spark-lock.com/poser.asp?id=642826480
http://www.fsruijian.net/poser.php?id=642826480
http://www.xdmonitor.com/news.aspx?id=642826480
https://www.iresearch.com.cn/news.aspx?id=642826480
http://www.keyunit.cn/news.php?id=642826480
http://1798.rongbiz.net/new.php?id=642826480
http://news.hbfzb.com/info.php?id=602600068
https://www.hbfzb.com/news.php?id=602600068
http://zhangjiakou.hbfzb.com/apple.php?id=602600068
http://news.hbfzb.com/apple.php?id=602600068
http://xingtai.hbfzb.com/apple.php?id=602600068
http://chengde.hbfzb.com/apple.php?id=602600068
http://shijiazhuang.hbfzb.com/apple.php?id=602600068
http://baoding.hbfzb.com/apple.php?id=602600068
http://hengshui.hbfzb.com/apple.php?id=602600068
https://www.hbfzb.com/html/qhd.php?id=602600068
https://www.hbfzb.com/html/ts.php?id=602600068
https://www.hbfzb.com/html/apple.php?id=602600068
https://www.hbfzb.com/html/news.php?id=602600068
https://www.hbfzb.com/html/zl.php?id=602600068
https://www.hbfzb.com/html/info.php?id=602600068
https://www.hbfzb.com/html/lf.php?id=602600068
https://www.hbfzb.com/html/shou.php?id=602600068
https://www.hbfzb.com/index.php?id=602600068
http://qinhuangdao.hbfzb.com/apple.php?id=602600068
http://xinji.hbfzb.com/apple.php?id=602600068
http://dingzhou.hbfzb.com/apple.php?id=602600068
http://shipin.hbfzb.com/apple.php?id=602600068
http://wshb.hbfzb.com/apple.php?id=602600068
http://photov.hbfzb.com/apple.php?id=602600068
http://szgc.glodon.com/news.php?id=602600068
http://sz.glodon.com/info.php?id=602600068
http://www.bxysg.com/news.asp?id=602600068
http://www.whbts.com/poser.asp?id=602600068
http://www.cquedp.com/news.php?id=602600068
http://cquedp.com/?id=602600068
http://m.cquedp.com/?id=602600068
http://www.hsfuhui.com/a/news.php?id=602600068
http://mdzz.itlun.cn/index.html?id=602600068
http://www.yqyy.net/news.php??id=602600068
http://www.hnalizs.com/news.php?id=602600068
http://www.gdnhec.com/poser.php?id=602600068
http://www.lygwb.com/poser.php?id=602600068
http://mzhihui.mulangcm.com/news/news.php?id=602600068
http://www.spark-lock.com/poser.asp?id=602600068
http://www.fsruijian.net/poser.php?id=602600068
http://www.xdmonitor.com/news.aspx?id=602600068
https://www.iresearch.com.cn/news.aspx?id=602600068
http://www.keyunit.cn/news.php?id=602600068
http://1798.rongbiz.net/new.php?id=602600068
http://news.hbfzb.com/info.php?id=084668488
https://www.hbfzb.com/news.php?id=084668488
http://zhangjiakou.hbfzb.com/apple.php?id=084668488
http://news.hbfzb.com/apple.php?id=084668488
http://xingtai.hbfzb.com/apple.php?id=084668488
http://chengde.hbfzb.com/apple.php?id=084668488
http://shijiazhuang.hbfzb.com/apple.php?id=084668488
http://baoding.hbfzb.com/apple.php?id=084668488
http://hengshui.hbfzb.com/apple.php?id=084668488
https://www.hbfzb.com/html/qhd.php?id=084668488
https://www.hbfzb.com/html/ts.php?id=084668488
https://www.hbfzb.com/html/apple.php?id=084668488
https://www.hbfzb.com/html/news.php?id=084668488
https://www.hbfzb.com/html/zl.php?id=084668488
https://www.hbfzb.com/html/info.php?id=084668488
https://www.hbfzb.com/html/lf.php?id=084668488
https://www.hbfzb.com/html/shou.php?id=084668488
https://www.hbfzb.com/index.php?id=084668488
http://qinhuangdao.hbfzb.com/apple.php?id=084668488
http://xinji.hbfzb.com/apple.php?id=084668488
http://dingzhou.hbfzb.com/apple.php?id=084668488
http://shipin.hbfzb.com/apple.php?id=084668488
http://wshb.hbfzb.com/apple.php?id=084668488
http://photov.hbfzb.com/apple.php?id=084668488
http://szgc.glodon.com/news.php?id=084668488
http://sz.glodon.com/info.php?id=084668488
http://www.bxysg.com/news.asp?id=084668488
http://www.whbts.com/poser.asp?id=084668488
http://www.cquedp.com/news.php?id=084668488
http://cquedp.com/?id=084668488
http://m.cquedp.com/?id=084668488
http://www.hsfuhui.com/a/news.php?id=084668488
http://mdzz.itlun.cn/index.html?id=084668488
http://www.yqyy.net/news.php??id=084668488
http://www.hnalizs.com/news.php?id=084668488
http://www.gdnhec.com/poser.php?id=084668488
http://www.lygwb.com/poser.php?id=084668488
http://mzhihui.mulangcm.com/news/news.php?id=084668488
http://www.spark-lock.com/poser.asp?id=084668488
http://www.fsruijian.net/poser.php?id=084668488
http://www.xdmonitor.com/news.aspx?id=084668488
https://www.iresearch.com.cn/news.aspx?id=084668488
http://www.keyunit.cn/news.php?id=084668488
http://1798.rongbiz.net/new.php?id=084668488
http://news.hbfzb.com/info.php?id=046206082
https://www.hbfzb.com/news.php?id=046206082
http://zhangjiakou.hbfzb.com/apple.php?id=046206082
http://news.hbfzb.com/apple.php?id=046206082
http://xingtai.hbfzb.com/apple.php?id=046206082
http://chengde.hbfzb.com/apple.php?id=046206082
http://shijiazhuang.hbfzb.com/apple.php?id=046206082
http://baoding.hbfzb.com/apple.php?id=046206082
http://hengshui.hbfzb.com/apple.php?id=046206082
https://www.hbfzb.com/html/qhd.php?id=046206082
https://www.hbfzb.com/html/ts.php?id=046206082
https://www.hbfzb.com/html/apple.php?id=046206082
https://www.hbfzb.com/html/news.php?id=046206082
https://www.hbfzb.com/html/zl.php?id=046206082
https://www.hbfzb.com/html/info.php?id=046206082
https://www.hbfzb.com/html/lf.php?id=046206082
https://www.hbfzb.com/html/shou.php?id=046206082
https://www.hbfzb.com/index.php?id=046206082
http://qinhuangdao.hbfzb.com/apple.php?id=046206082
http://xinji.hbfzb.com/apple.php?id=046206082
http://dingzhou.hbfzb.com/apple.php?id=046206082
http://shipin.hbfzb.com/apple.php?id=046206082
http://wshb.hbfzb.com/apple.php?id=046206082
http://photov.hbfzb.com/apple.php?id=046206082
http://szgc.glodon.com/news.php?id=046206082
http://sz.glodon.com/info.php?id=046206082
http://www.bxysg.com/news.asp?id=046206082
http://www.whbts.com/poser.asp?id=046206082
http://www.cquedp.com/news.php?id=046206082
http://cquedp.com/?id=046206082
http://m.cquedp.com/?id=046206082
http://www.hsfuhui.com/a/news.php?id=046206082
http://mdzz.itlun.cn/index.html?id=046206082
http://www.yqyy.net/news.php??id=046206082
http://www.hnalizs.com/news.php?id=046206082
http://www.gdnhec.com/poser.php?id=046206082
http://www.lygwb.com/poser.php?id=046206082
http://mzhihui.mulangcm.com/news/news.php?id=046206082
http://www.spark-lock.com/poser.asp?id=046206082
http://www.fsruijian.net/poser.php?id=046206082
http://www.xdmonitor.com/news.aspx?id=046206082
https://www.iresearch.com.cn/news.aspx?id=046206082
http://www.keyunit.cn/news.php?id=046206082
http://1798.rongbiz.net/new.php?id=046206082
http://news.hbfzb.com/info.php?id=444248424
https://www.hbfzb.com/news.php?id=444248424
http://zhangjiakou.hbfzb.com/apple.php?id=444248424
http://news.hbfzb.com/apple.php?id=444248424
http://xingtai.hbfzb.com/apple.php?id=444248424
http://chengde.hbfzb.com/apple.php?id=444248424
http://shijiazhuang.hbfzb.com/apple.php?id=444248424
http://baoding.hbfzb.com/apple.php?id=444248424
http://hengshui.hbfzb.com/apple.php?id=444248424
https://www.hbfzb.com/html/qhd.php?id=444248424
https://www.hbfzb.com/html/ts.php?id=444248424
https://www.hbfzb.com/html/apple.php?id=444248424
https://www.hbfzb.com/html/news.php?id=444248424
https://www.hbfzb.com/html/zl.php?id=444248424
https://www.hbfzb.com/html/info.php?id=444248424
https://www.hbfzb.com/html/lf.php?id=444248424
https://www.hbfzb.com/html/shou.php?id=444248424
https://www.hbfzb.com/index.php?id=444248424
http://qinhuangdao.hbfzb.com/apple.php?id=444248424
http://xinji.hbfzb.com/apple.php?id=444248424
http://dingzhou.hbfzb.com/apple.php?id=444248424
http://shipin.hbfzb.com/apple.php?id=444248424
http://wshb.hbfzb.com/apple.php?id=444248424
http://photov.hbfzb.com/apple.php?id=444248424
http://szgc.glodon.com/news.php?id=444248424
http://sz.glodon.com/info.php?id=444248424
http://www.bxysg.com/news.asp?id=444248424
http://www.whbts.com/poser.asp?id=444248424
http://www.cquedp.com/news.php?id=444248424
http://cquedp.com/?id=444248424
http://m.cquedp.com/?id=444248424
http://www.hsfuhui.com/a/news.php?id=444248424
http://mdzz.itlun.cn/index.html?id=444248424
http://www.yqyy.net/news.php??id=444248424
http://www.hnalizs.com/news.php?id=444248424
http://www.gdnhec.com/poser.php?id=444248424
http://www.lygwb.com/poser.php?id=444248424
http://mzhihui.mulangcm.com/news/news.php?id=444248424
http://www.spark-lock.com/poser.asp?id=444248424
http://www.fsruijian.net/poser.php?id=444248424
http://www.xdmonitor.com/news.aspx?id=444248424
https://www.iresearch.com.cn/news.aspx?id=444248424
http://www.keyunit.cn/news.php?id=444248424
http://1798.rongbiz.net/new.php?id=444248424
http://news.hbfzb.com/info.php?id=886042686
https://www.hbfzb.com/news.php?id=886042686
http://zhangjiakou.hbfzb.com/apple.php?id=886042686
http://news.hbfzb.com/apple.php?id=886042686
http://xingtai.hbfzb.com/apple.php?id=886042686
http://chengde.hbfzb.com/apple.php?id=886042686
http://shijiazhuang.hbfzb.com/apple.php?id=886042686
http://baoding.hbfzb.com/apple.php?id=886042686
http://hengshui.hbfzb.com/apple.php?id=886042686
https://www.hbfzb.com/html/qhd.php?id=886042686
https://www.hbfzb.com/html/ts.php?id=886042686
https://www.hbfzb.com/html/apple.php?id=886042686
https://www.hbfzb.com/html/news.php?id=886042686
https://www.hbfzb.com/html/zl.php?id=886042686
https://www.hbfzb.com/html/info.php?id=886042686
https://www.hbfzb.com/html/lf.php?id=886042686
https://www.hbfzb.com/html/shou.php?id=886042686
https://www.hbfzb.com/index.php?id=886042686
http://qinhuangdao.hbfzb.com/apple.php?id=886042686
http://xinji.hbfzb.com/apple.php?id=886042686
http://dingzhou.hbfzb.com/apple.php?id=886042686
http://shipin.hbfzb.com/apple.php?id=886042686
http://wshb.hbfzb.com/apple.php?id=886042686
http://photov.hbfzb.com/apple.php?id=886042686
http://szgc.glodon.com/news.php?id=886042686
http://sz.glodon.com/info.php?id=886042686
http://www.bxysg.com/news.asp?id=886042686
http://www.whbts.com/poser.asp?id=886042686
http://www.cquedp.com/news.php?id=886042686
http://cquedp.com/?id=886042686
http://m.cquedp.com/?id=886042686
http://www.hsfuhui.com/a/news.php?id=886042686
http://mdzz.itlun.cn/index.html?id=886042686
http://www.yqyy.net/news.php??id=886042686
http://www.hnalizs.com/news.php?id=886042686
http://www.gdnhec.com/poser.php?id=886042686
http://www.lygwb.com/poser.php?id=886042686
http://mzhihui.mulangcm.com/news/news.php?id=886042686
http://www.spark-lock.com/poser.asp?id=886042686
http://www.fsruijian.net/poser.php?id=886042686
http://www.xdmonitor.com/news.aspx?id=886042686
https://www.iresearch.com.cn/news.aspx?id=886042686
http://www.keyunit.cn/news.php?id=886042686
http://1798.rongbiz.net/new.php?id=886042686
http://news.hbfzb.com/info.php?id=208204082
https://www.hbfzb.com/news.php?id=208204082
http://zhangjiakou.hbfzb.com/apple.php?id=208204082
http://news.hbfzb.com/apple.php?id=208204082
http://xingtai.hbfzb.com/apple.php?id=208204082
http://chengde.hbfzb.com/apple.php?id=208204082
http://shijiazhuang.hbfzb.com/apple.php?id=208204082
http://baoding.hbfzb.com/apple.php?id=208204082
http://hengshui.hbfzb.com/apple.php?id=208204082
https://www.hbfzb.com/html/qhd.php?id=208204082
https://www.hbfzb.com/html/ts.php?id=208204082
https://www.hbfzb.com/html/apple.php?id=208204082
https://www.hbfzb.com/html/news.php?id=208204082
https://www.hbfzb.com/html/zl.php?id=208204082
https://www.hbfzb.com/html/info.php?id=208204082
https://www.hbfzb.com/html/lf.php?id=208204082
https://www.hbfzb.com/html/shou.php?id=208204082
https://www.hbfzb.com/index.php?id=208204082
http://qinhuangdao.hbfzb.com/apple.php?id=208204082
http://xinji.hbfzb.com/apple.php?id=208204082
http://dingzhou.hbfzb.com/apple.php?id=208204082
http://shipin.hbfzb.com/apple.php?id=208204082
http://wshb.hbfzb.com/apple.php?id=208204082
http://photov.hbfzb.com/apple.php?id=208204082
http://szgc.glodon.com/news.php?id=208204082
http://sz.glodon.com/info.php?id=208204082
http://www.bxysg.com/news.asp?id=208204082
http://www.whbts.com/poser.asp?id=208204082
http://www.cquedp.com/news.php?id=208204082
http://cquedp.com/?id=208204082
http://m.cquedp.com/?id=208204082
http://www.hsfuhui.com/a/news.php?id=208204082
http://mdzz.itlun.cn/index.html?id=208204082
http://www.yqyy.net/news.php??id=208204082
http://www.hnalizs.com/news.php?id=208204082
http://www.gdnhec.com/poser.php?id=208204082
http://www.lygwb.com/poser.php?id=208204082
http://mzhihui.mulangcm.com/news/news.php?id=208204082
http://www.spark-lock.com/poser.asp?id=208204082
http://www.fsruijian.net/poser.php?id=208204082
http://www.xdmonitor.com/news.aspx?id=208204082
https://www.iresearch.com.cn/news.aspx?id=208204082
http://www.keyunit.cn/news.php?id=208204082
http://1798.rongbiz.net/new.php?id=208204082
http://news.hbfzb.com/info.php?id=440424846
https://www.hbfzb.com/news.php?id=440424846
http://zhangjiakou.hbfzb.com/apple.php?id=440424846
http://news.hbfzb.com/apple.php?id=440424846
http://xingtai.hbfzb.com/apple.php?id=440424846
http://chengde.hbfzb.com/apple.php?id=440424846
http://shijiazhuang.hbfzb.com/apple.php?id=440424846
http://baoding.hbfzb.com/apple.php?id=440424846
http://hengshui.hbfzb.com/apple.php?id=440424846
https://www.hbfzb.com/html/qhd.php?id=440424846
https://www.hbfzb.com/html/ts.php?id=440424846
https://www.hbfzb.com/html/apple.php?id=440424846
https://www.hbfzb.com/html/news.php?id=440424846
https://www.hbfzb.com/html/zl.php?id=440424846
https://www.hbfzb.com/html/info.php?id=440424846
https://www.hbfzb.com/html/lf.php?id=440424846
https://www.hbfzb.com/html/shou.php?id=440424846
https://www.hbfzb.com/index.php?id=440424846
http://qinhuangdao.hbfzb.com/apple.php?id=440424846
http://xinji.hbfzb.com/apple.php?id=440424846
http://dingzhou.hbfzb.com/apple.php?id=440424846
http://shipin.hbfzb.com/apple.php?id=440424846
http://wshb.hbfzb.com/apple.php?id=440424846
http://photov.hbfzb.com/apple.php?id=440424846
http://szgc.glodon.com/news.php?id=440424846
http://sz.glodon.com/info.php?id=440424846
http://www.bxysg.com/news.asp?id=440424846
http://www.whbts.com/poser.asp?id=440424846
http://www.cquedp.com/news.php?id=440424846
http://cquedp.com/?id=440424846
http://m.cquedp.com/?id=440424846
http://www.hsfuhui.com/a/news.php?id=440424846
http://mdzz.itlun.cn/index.html?id=440424846
http://www.yqyy.net/news.php??id=440424846
http://www.hnalizs.com/news.php?id=440424846
http://www.gdnhec.com/poser.php?id=440424846
http://www.lygwb.com/poser.php?id=440424846
http://mzhihui.mulangcm.com/news/news.php?id=440424846
http://www.spark-lock.com/poser.asp?id=440424846
http://www.fsruijian.net/poser.php?id=440424846
http://www.xdmonitor.com/news.aspx?id=440424846
https://www.iresearch.com.cn/news.aspx?id=440424846
http://www.keyunit.cn/news.php?id=440424846
http://1798.rongbiz.net/new.php?id=440424846
http://news.hbfzb.com/info.php?id=040848208
https://www.hbfzb.com/news.php?id=040848208
http://zhangjiakou.hbfzb.com/apple.php?id=040848208
http://news.hbfzb.com/apple.php?id=040848208
http://xingtai.hbfzb.com/apple.php?id=040848208
http://chengde.hbfzb.com/apple.php?id=040848208
http://shijiazhuang.hbfzb.com/apple.php?id=040848208
http://baoding.hbfzb.com/apple.php?id=040848208
http://hengshui.hbfzb.com/apple.php?id=040848208
https://www.hbfzb.com/html/qhd.php?id=040848208
https://www.hbfzb.com/html/ts.php?id=040848208
https://www.hbfzb.com/html/apple.php?id=040848208
https://www.hbfzb.com/html/news.php?id=040848208
https://www.hbfzb.com/html/zl.php?id=040848208
https://www.hbfzb.com/html/info.php?id=040848208
https://www.hbfzb.com/html/lf.php?id=040848208
https://www.hbfzb.com/html/shou.php?id=040848208
https://www.hbfzb.com/index.php?id=040848208
http://qinhuangdao.hbfzb.com/apple.php?id=040848208
http://xinji.hbfzb.com/apple.php?id=040848208
http://dingzhou.hbfzb.com/apple.php?id=040848208
http://shipin.hbfzb.com/apple.php?id=040848208
http://wshb.hbfzb.com/apple.php?id=040848208
http://photov.hbfzb.com/apple.php?id=040848208
http://szgc.glodon.com/news.php?id=040848208
http://sz.glodon.com/info.php?id=040848208
http://www.bxysg.com/news.asp?id=040848208
http://www.whbts.com/poser.asp?id=040848208
http://www.cquedp.com/news.php?id=040848208
http://cquedp.com/?id=040848208
http://m.cquedp.com/?id=040848208
http://www.hsfuhui.com/a/news.php?id=040848208
http://mdzz.itlun.cn/index.html?id=040848208
http://www.yqyy.net/news.php??id=040848208
http://www.hnalizs.com/news.php?id=040848208
http://www.gdnhec.com/poser.php?id=040848208
http://www.lygwb.com/poser.php?id=040848208
http://mzhihui.mulangcm.com/news/news.php?id=040848208
http://www.spark-lock.com/poser.asp?id=040848208
http://www.fsruijian.net/poser.php?id=040848208
http://www.xdmonitor.com/news.aspx?id=040848208
https://www.iresearch.com.cn/news.aspx?id=040848208
http://www.keyunit.cn/news.php?id=040848208
http://1798.rongbiz.net/new.php?id=040848208
http://news.hbfzb.com/info.php?id=240484046
https://www.hbfzb.com/news.php?id=240484046
http://zhangjiakou.hbfzb.com/apple.php?id=240484046
http://news.hbfzb.com/apple.php?id=240484046
http://xingtai.hbfzb.com/apple.php?id=240484046
http://chengde.hbfzb.com/apple.php?id=240484046
http://shijiazhuang.hbfzb.com/apple.php?id=240484046
http://baoding.hbfzb.com/apple.php?id=240484046
http://hengshui.hbfzb.com/apple.php?id=240484046
https://www.hbfzb.com/html/qhd.php?id=240484046
https://www.hbfzb.com/html/ts.php?id=240484046
https://www.hbfzb.com/html/apple.php?id=240484046
https://www.hbfzb.com/html/news.php?id=240484046
https://www.hbfzb.com/html/zl.php?id=240484046
https://www.hbfzb.com/html/info.php?id=240484046
https://www.hbfzb.com/html/lf.php?id=240484046
https://www.hbfzb.com/html/shou.php?id=240484046
https://www.hbfzb.com/index.php?id=240484046
http://qinhuangdao.hbfzb.com/apple.php?id=240484046
http://xinji.hbfzb.com/apple.php?id=240484046
http://dingzhou.hbfzb.com/apple.php?id=240484046
http://shipin.hbfzb.com/apple.php?id=240484046
http://wshb.hbfzb.com/apple.php?id=240484046
http://photov.hbfzb.com/apple.php?id=240484046
http://szgc.glodon.com/news.php?id=240484046
http://sz.glodon.com/info.php?id=240484046
http://www.bxysg.com/news.asp?id=240484046
http://www.whbts.com/poser.asp?id=240484046
http://www.cquedp.com/news.php?id=240484046
http://cquedp.com/?id=240484046
http://m.cquedp.com/?id=240484046
http://www.hsfuhui.com/a/news.php?id=240484046
http://mdzz.itlun.cn/index.html?id=240484046
http://www.yqyy.net/news.php??id=240484046
http://www.hnalizs.com/news.php?id=240484046
http://www.gdnhec.com/poser.php?id=240484046
http://www.lygwb.com/poser.php?id=240484046
http://mzhihui.mulangcm.com/news/news.php?id=240484046
http://www.spark-lock.com/poser.asp?id=240484046
http://www.fsruijian.net/poser.php?id=240484046
http://www.xdmonitor.com/news.aspx?id=240484046
https://www.iresearch.com.cn/news.aspx?id=240484046
http://www.keyunit.cn/news.php?id=240484046
http://1798.rongbiz.net/new.php?id=240484046
http://news.hbfzb.com/info.php?id=159131791
https://www.hbfzb.com/news.php?id=159131791
http://zhangjiakou.hbfzb.com/apple.php?id=159131791
http://news.hbfzb.com/apple.php?id=159131791
http://xingtai.hbfzb.com/apple.php?id=159131791
http://chengde.hbfzb.com/apple.php?id=159131791
http://shijiazhuang.hbfzb.com/apple.php?id=159131791
http://baoding.hbfzb.com/apple.php?id=159131791
http://hengshui.hbfzb.com/apple.php?id=159131791
https://www.hbfzb.com/html/qhd.php?id=159131791
https://www.hbfzb.com/html/ts.php?id=159131791
https://www.hbfzb.com/html/apple.php?id=159131791
https://www.hbfzb.com/html/news.php?id=159131791
https://www.hbfzb.com/html/zl.php?id=159131791
https://www.hbfzb.com/html/info.php?id=159131791
https://www.hbfzb.com/html/lf.php?id=159131791
https://www.hbfzb.com/html/shou.php?id=159131791
https://www.hbfzb.com/index.php?id=159131791
http://qinhuangdao.hbfzb.com/apple.php?id=159131791
http://xinji.hbfzb.com/apple.php?id=159131791
http://dingzhou.hbfzb.com/apple.php?id=159131791
http://shipin.hbfzb.com/apple.php?id=159131791
http://wshb.hbfzb.com/apple.php?id=159131791
http://photov.hbfzb.com/apple.php?id=159131791
http://szgc.glodon.com/news.php?id=159131791
http://sz.glodon.com/info.php?id=159131791
http://www.bxysg.com/news.asp?id=159131791
http://www.whbts.com/poser.asp?id=159131791
http://www.cquedp.com/news.php?id=159131791
http://cquedp.com/?id=159131791
http://m.cquedp.com/?id=159131791
http://www.hsfuhui.com/a/news.php?id=159131791
http://mdzz.itlun.cn/index.html?id=159131791
http://www.yqyy.net/news.php??id=159131791
http://www.hnalizs.com/news.php?id=159131791
http://www.gdnhec.com/poser.php?id=159131791
http://www.lygwb.com/poser.php?id=159131791
http://mzhihui.mulangcm.com/news/news.php?id=159131791
http://www.spark-lock.com/poser.asp?id=159131791
http://www.fsruijian.net/poser.php?id=159131791
http://www.xdmonitor.com/news.aspx?id=159131791
https://www.iresearch.com.cn/news.aspx?id=159131791
http://www.keyunit.cn/news.php?id=159131791
http://1798.rongbiz.net/new.php?id=159131791
http://news.hbfzb.com/info.php?id=042464620
https://www.hbfzb.com/news.php?id=042464620
http://zhangjiakou.hbfzb.com/apple.php?id=042464620
http://news.hbfzb.com/apple.php?id=042464620
http://xingtai.hbfzb.com/apple.php?id=042464620
http://chengde.hbfzb.com/apple.php?id=042464620
http://shijiazhuang.hbfzb.com/apple.php?id=042464620
http://baoding.hbfzb.com/apple.php?id=042464620
http://hengshui.hbfzb.com/apple.php?id=042464620
https://www.hbfzb.com/html/qhd.php?id=042464620
https://www.hbfzb.com/html/ts.php?id=042464620
https://www.hbfzb.com/html/apple.php?id=042464620
https://www.hbfzb.com/html/news.php?id=042464620
https://www.hbfzb.com/html/zl.php?id=042464620
https://www.hbfzb.com/html/info.php?id=042464620
https://www.hbfzb.com/html/lf.php?id=042464620
https://www.hbfzb.com/html/shou.php?id=042464620
https://www.hbfzb.com/index.php?id=042464620
http://qinhuangdao.hbfzb.com/apple.php?id=042464620
http://xinji.hbfzb.com/apple.php?id=042464620
http://dingzhou.hbfzb.com/apple.php?id=042464620
http://shipin.hbfzb.com/apple.php?id=042464620
http://wshb.hbfzb.com/apple.php?id=042464620
http://photov.hbfzb.com/apple.php?id=042464620
http://szgc.glodon.com/news.php?id=042464620
http://sz.glodon.com/info.php?id=042464620
http://www.bxysg.com/news.asp?id=042464620
http://www.whbts.com/poser.asp?id=042464620
http://www.cquedp.com/news.php?id=042464620
http://cquedp.com/?id=042464620
http://m.cquedp.com/?id=042464620
http://www.hsfuhui.com/a/news.php?id=042464620
http://mdzz.itlun.cn/index.html?id=042464620
http://www.yqyy.net/news.php??id=042464620
http://www.hnalizs.com/news.php?id=042464620
http://www.gdnhec.com/poser.php?id=042464620
http://www.lygwb.com/poser.php?id=042464620
http://mzhihui.mulangcm.com/news/news.php?id=042464620
http://www.spark-lock.com/poser.asp?id=042464620
http://www.fsruijian.net/poser.php?id=042464620
http://www.xdmonitor.com/news.aspx?id=042464620
https://www.iresearch.com.cn/news.aspx?id=042464620
http://www.keyunit.cn/news.php?id=042464620
http://1798.rongbiz.net/new.php?id=042464620
http://news.hbfzb.com/info.php?id=604480468
https://www.hbfzb.com/news.php?id=604480468
http://zhangjiakou.hbfzb.com/apple.php?id=604480468
http://news.hbfzb.com/apple.php?id=604480468
http://xingtai.hbfzb.com/apple.php?id=604480468
http://chengde.hbfzb.com/apple.php?id=604480468
http://shijiazhuang.hbfzb.com/apple.php?id=604480468
http://baoding.hbfzb.com/apple.php?id=604480468
http://hengshui.hbfzb.com/apple.php?id=604480468
https://www.hbfzb.com/html/qhd.php?id=604480468
https://www.hbfzb.com/html/ts.php?id=604480468
https://www.hbfzb.com/html/apple.php?id=604480468
https://www.hbfzb.com/html/news.php?id=604480468
https://www.hbfzb.com/html/zl.php?id=604480468
https://www.hbfzb.com/html/info.php?id=604480468
https://www.hbfzb.com/html/lf.php?id=604480468
https://www.hbfzb.com/html/shou.php?id=604480468
https://www.hbfzb.com/index.php?id=604480468
http://qinhuangdao.hbfzb.com/apple.php?id=604480468
http://xinji.hbfzb.com/apple.php?id=604480468
http://dingzhou.hbfzb.com/apple.php?id=604480468
http://shipin.hbfzb.com/apple.php?id=604480468
http://wshb.hbfzb.com/apple.php?id=604480468
http://photov.hbfzb.com/apple.php?id=604480468
http://szgc.glodon.com/news.php?id=604480468
http://sz.glodon.com/info.php?id=604480468
http://www.bxysg.com/news.asp?id=604480468
http://www.whbts.com/poser.asp?id=604480468
http://www.cquedp.com/news.php?id=604480468
http://cquedp.com/?id=604480468
http://m.cquedp.com/?id=604480468
http://www.hsfuhui.com/a/news.php?id=604480468
http://mdzz.itlun.cn/index.html?id=604480468
http://www.yqyy.net/news.php??id=604480468
http://www.hnalizs.com/news.php?id=604480468
http://www.gdnhec.com/poser.php?id=604480468
http://www.lygwb.com/poser.php?id=604480468
http://mzhihui.mulangcm.com/news/news.php?id=604480468
http://www.spark-lock.com/poser.asp?id=604480468
http://www.fsruijian.net/poser.php?id=604480468
http://www.xdmonitor.com/news.aspx?id=604480468
https://www.iresearch.com.cn/news.aspx?id=604480468
http://www.keyunit.cn/news.php?id=604480468
http://1798.rongbiz.net/new.php?id=604480468