Java注解与反射实现日志与校验

Java 注解与反射实战:自定义日志与参数校验注解

本文将手把手教你如何使用Java注解和反射机制实现两个实用的自定义注解:

  1. @Loggable - 方法执行日志注解

  2. @ValidParam - 参数校验注解

1. 项目结构

text

复制代码
annotation-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           ├── annotation/
│   │   │           │   ├── Loggable.java
│   │   │           │   ├── ValidParam.java
│   │   │           │   └── ValidationException.java
│   │   │           ├── service/
│   │   │           │   ├── UserService.java
│   │   │           │   └── impl/
│   │   │           │       └── UserServiceImpl.java
│   │   │           ├── model/
│   │   │           │   └── User.java
│   │   │           └── Main.java
│   │   └── resources/
│   └── test/
│       └── java/
└── pom.xml

2. 自定义注解实现

2.1 日志注解 @Loggable

java

复制代码
// Loggable.java
package com.example.annotation;

import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {
    // 日志级别
    LogLevel level() default LogLevel.INFO;
    
    // 是否记录方法参数
    boolean logParams() default true;
    
    // 是否记录返回值
    boolean logResult() default true;
    
    // 是否记录执行时间
    boolean logExecutionTime() default true;
    
    // 自定义日志消息
    String value() default "";
}

enum LogLevel {
    DEBUG, INFO, WARN, ERROR
}

2.2 参数校验注解 @ValidParam

java

复制代码
// ValidParam.java
package com.example.annotation;

import java.lang.annotation.*;

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidParam {
    // 是否非空
    boolean notNull() default false;
    
    // 字符串最小长度
    int minLength() default 0;
    
    // 字符串最大长度
    int maxLength() default Integer.MAX_VALUE;
    
    // 最小值(用于数字)
    long min() default Long.MIN_VALUE;
    
    // 最大值(用于数字)
    long max() default Long.MAX_VALUE;
    
    // 正则表达式验证
    String regex() default "";
    
    // 自定义错误消息
    String message() default "参数验证失败";
}

2.3 自定义异常类

java

复制代码
// ValidationException.java
package com.example.annotation;

public class ValidationException extends RuntimeException {
    public ValidationException(String message) {
        super(message);
    }
    
    public ValidationException(String message, Throwable cause) {
        super(message, cause);
    }
}

3. 数据模型

java

复制代码
// User.java
package com.example.model;

public class User {
    private String username;
    private String email;
    private int age;
    
    public User() {}
    
    public User(String username, String email, int age) {
        this.username = username;
        this.email = email;
        this.age = age;
    }
    
    // Getters and Setters
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
    
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
    
    @Override
    public String toString() {
        return String.format("User{username='%s', email='%s', age=%d}", 
                           username, email, age);
    }
}

4. 服务层实现

4.1 服务接口

java

复制代码
// UserService.java
package com.example.service;

import com.example.model.User;

public interface UserService {
    User createUser(String username, String email, int age);
    User getUserById(@com.example.annotation.ValidParam(notNull = true) String userId);
    void updateUser(@com.example.annotation.ValidParam(notNull = true) User user);
}

4.2 服务实现(使用注解)

java

复制代码
// UserServiceImpl.java
package com.example.service.impl;

import com.example.annotation.Loggable;
import com.example.annotation.ValidParam;
import com.example.model.User;
import com.example.service.UserService;

public class UserServiceImpl implements UserService {
    
    @Override
    @Loggable(level = LogLevel.INFO, logParams = true, logResult = true, 
              logExecutionTime = true, value = "创建用户")
    public User createUser(
            @ValidParam(notNull = true, minLength = 3, maxLength = 20) String username,
            @ValidParam(notNull = true, regex = "^[A-Za-z0-9+_.-]+@(.+)$") String email,
            @ValidParam(min = 1, max = 150) int age) {
        
        System.out.println("创建用户: " + username);
        return new User(username, email, age);
    }
    
    @Override
    @Loggable(level = LogLevel.DEBUG, logExecutionTime = true)
    public User getUserById(@ValidParam(notNull = true, minLength = 1) String userId) {
        System.out.println("获取用户: " + userId);
        // 模拟从数据库获取用户
        return new User("testUser", "test@example.com", 25);
    }
    
    @Override
    @Loggable(level = LogLevel.WARN, logParams = true)
    public void updateUser(@ValidParam(notNull = true) User user) {
        System.out.println("更新用户: " + user.getUsername());
        // 模拟更新逻辑
    }
}

5. 注解处理器(核心)

java

复制代码
// AnnotationProcessor.java
package com.example.annotation;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.lang.reflect.Proxy;
import java.util.Arrays;

public class AnnotationProcessor implements InvocationHandler {
    
    private final Object target;
    
    private AnnotationProcessor(Object target) {
        this.target = target;
    }
    
    @SuppressWarnings("unchecked")
    public static <T> T createProxy(T target) {
        return (T) Proxy.newProxyInstance(
            target.getClass().getClassLoader(),
            target.getClass().getInterfaces(),
            new AnnotationProcessor(target)
        );
    }
    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 1. 参数校验
        validateParameters(method, args);
        
        // 2. 日志记录(方法执行前)
        Loggable loggable = method.getAnnotation(Loggable.class);
        long startTime = 0;
        if (loggable != null) {
            startTime = logMethodStart(loggable, method, args);
        }
        
        try {
            // 3. 执行原始方法
            Object result = method.invoke(target, args);
            
            // 4. 日志记录(方法执行后)
            if (loggable != null) {
                logMethodEnd(loggable, method, result, startTime);
            }
            
            return result;
        } catch (Exception e) {
            // 5. 异常处理
            if (loggable != null && loggable.level().ordinal() >= LogLevel.ERROR.ordinal()) {
                System.err.println("[" + loggable.level() + "] 方法执行异常: " + 
                                 method.getName() + " - " + e.getCause().getMessage());
            }
            throw e.getCause();
        }
    }
    
    private void validateParameters(Method method, Object[] args) {
        Parameter[] parameters = method.getParameters();
        
        for (int i = 0; i < parameters.length; i++) {
            ValidParam validParam = parameters[i].getAnnotation(ValidParam.class);
            if (validParam != null && args != null) {
                validateParameter(validParam, args[i], parameters[i].getName());
            }
        }
    }
    
    private void validateParameter(ValidParam validParam, Object arg, String paramName) {
        if (validParam.notNull() && arg == null) {
            throw new ValidationException(paramName + ": " + validParam.message() + " - 不能为null");
        }
        
        if (arg == null) {
            return; // 如果允许为null,且确实为null,则跳过其他验证
        }
        
        // 字符串验证
        if (arg instanceof String) {
            String str = (String) arg;
            if (str.length() < validParam.minLength()) {
                throw new ValidationException(paramName + ": " + validParam.message() + 
                                            " - 长度不能小于 " + validParam.minLength());
            }
            if (str.length() > validParam.maxLength()) {
                throw new ValidationException(paramName + ": " + validParam.message() + 
                                            " - 长度不能大于 " + validParam.maxLength());
            }
            if (!validParam.regex().isEmpty() && !str.matches(validParam.regex())) {
                throw new ValidationException(paramName + ": " + validParam.message() + 
                                            " - 格式不匹配");
            }
        }
        
        // 数字验证
        if (arg instanceof Number) {
            Number num = (Number) arg;
            long value = num.longValue();
            if (value < validParam.min()) {
                throw new ValidationException(paramName + ": " + validParam.message() + 
                                            " - 值不能小于 " + validParam.min());
            }
            if (value > validParam.max()) {
                throw new ValidationException(paramName + ": " + validParam.message() + 
                                            " - 值不能大于 " + validParam.max());
            }
        }
        
        // 对象验证(检查是否为null)
        if (validParam.notNull() && arg == null) {
            throw new ValidationException(paramName + ": " + validParam.message() + " - 不能为null");
        }
    }
    
    private long logMethodStart(Loggable loggable, Method method, Object[] args) {
        long startTime = System.currentTimeMillis();
        StringBuilder logMessage = new StringBuilder();
        
        logMessage.append("[").append(loggable.level()).append("] ");
        
        if (!loggable.value().isEmpty()) {
            logMessage.append(loggable.value());
        } else {
            logMessage.append("执行方法: ").append(method.getName());
        }
        
        if (loggable.logParams() && args != null && args.length > 0) {
            logMessage.append(" | 参数: ").append(Arrays.toString(args));
        }
        
        System.out.println(logMessage.toString());
        return startTime;
    }
    
    private void logMethodEnd(Loggable loggable, Method method, Object result, long startTime) {
        StringBuilder logMessage = new StringBuilder();
        
        logMessage.append("[").append(loggable.level()).append("] ");
        logMessage.append("方法完成: ").append(method.getName());
        
        if (loggable.logResult() && result != null) {
            logMessage.append(" | 返回值: ").append(result);
        }
        
        if (loggable.logExecutionTime()) {
            long executionTime = System.currentTimeMillis() - startTime;
            logMessage.append(" | 执行时间: ").append(executionTime).append("ms");
        }
        
        System.out.println(logMessage.toString());
    }
}

6. 主程序测试

java

复制代码
// Main.java
package com.example;

import com.example.annotation.AnnotationProcessor;
import com.example.annotation.ValidationException;
import com.example.model.User;
import com.example.service.UserService;
import com.example.service.impl.UserServiceImpl;

public class Main {
    public static void main(String[] args) {
        // 创建代理对象
        UserService userService = AnnotationProcessor.createProxy(new UserServiceImpl());
        
        System.out.println("=== 正常测试 ===");
        try {
            // 正常创建用户
            User user = userService.createUser("john_doe", "john@example.com", 25);
            System.out.println("创建的用户: " + user);
            
            // 获取用户
            User fetchedUser = userService.getUserById("123");
            System.out.println("获取的用户: " + fetchedUser);
            
            // 更新用户
            userService.updateUser(user);
            
        } catch (Exception e) {
            System.err.println("异常: " + e.getMessage());
        }
        
        System.out.println("\n=== 参数校验测试 ===");
        try {
            // 用户名过短
            userService.createUser("jo", "john@example.com", 25);
        } catch (ValidationException e) {
            System.err.println("验证异常: " + e.getMessage());
        }
        
        try {
            // 邮箱格式错误
            userService.createUser("john_doe", "invalid-email", 25);
        } catch (ValidationException e) {
            System.err.println("验证异常: " + e.getMessage());
        }
        
        try {
            // 年龄超出范围
            userService.createUser("john_doe", "john@example.com", 200);
        } catch (ValidationException e) {
            System.err.println("验证异常: " + e.getMessage());
        }
        
        try {
            // 用户ID为null
            userService.getUserById(null);
        } catch (ValidationException e) {
            System.err.println("验证异常: " + e.getMessage());
        }
    }
}

7. Maven配置

xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>com.example</groupId>
    <artifactId>annotation-demo</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    
    <dependencies>
        <!-- 如果需要额外的依赖可以在这里添加 -->
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

8. 运行结果示例

text

复制代码
=== 正常测试 ===
[INFO] 创建用户 | 参数: [john_doe, john@example.com, 25]
创建用户: john_doe
[INFO] 方法完成: createUser | 返回值: User{username='john_doe', email='john@example.com', age=25} | 执行时间: 12ms
创建的用户: User{username='john_doe', email='john@example.com', age=25}
[DEBUG] 执行方法: getUserById
获取用户: 123
[DEBUG] 方法完成: getUserById | 执行时间: 1ms
获取的用户: User{username='testUser', email='test@example.com', age=25}
[WARN] 执行方法: updateUser | 参数: [User{username='john_doe', email='john@example.com', age=25}]
更新用户: john_doe

=== 参数校验测试 ===
验证异常: username: 参数验证失败 - 长度不能小于 3
验证异常: email: 参数验证失败 - 格式不匹配
验证异常: age: 参数验证失败 - 值不能大于 150
验证异常: userId: 参数验证失败 - 不能为null

9. 扩展功能

9.1 添加AOP支持(使用Spring AOP)

如果你在使用Spring框架,可以结合Spring AOP实现更强大的功能:

java

复制代码
@Aspect
@Component
public class AnnotationAspect {
    
    @Around("@annotation(loggable)")
    public Object processLoggable(ProceedingJoinPoint joinPoint, Loggable loggable) throws Throwable {
        // 实现类似的日志逻辑
        return joinPoint.proceed();
    }
    
    @Before("execution(* *(.., @ValidParam (*), ..))")
    public void validateParameters(JoinPoint joinPoint) {
        // 实现类似的参数校验逻辑
    }
}

9.2 添加配置文件支持

可以扩展注解,使其支持从配置文件读取日志级别等配置:

java

复制代码
@Loggable(level = "${log.level:INFO}", value = "${log.message:}")

总结

通过这个实战项目,我们实现了:

  1. 自定义注解 :定义了@Loggable@ValidParam注解

  2. 反射处理:使用Java反射机制读取注解信息

  3. 动态代理:通过动态代理实现方法的拦截和增强

  4. 参数校验:实现了全面的参数验证逻辑

  5. 日志记录:实现了方法执行的全链路日志

这种基于注解和反射的实现方式具有很好的解耦性和可扩展性,可以在不修改业务代码的情况下为系统添加通用功能。rd.xjyl.gov.cn/upload/1982077759995215872.html

rd.xjyl.gov.cn/upload/1982077760053936128.html

rd.xjyl.gov.cn/upload/1982077760133627904.html

rd.xjyl.gov.cn/upload/1982077760142016512.html

rd.xjyl.gov.cn/upload/1982077760137822208.html

rd.xjyl.gov.cn/upload/1982077760225902592.html

rd.xjyl.gov.cn/upload/1982077760435617792.html

rd.xjyl.gov.cn/upload/1982077760448200704.html

rd.xjyl.gov.cn/upload/1982077760611778560.html

rd.xjyl.gov.cn/upload/1982077760615972864.html

rd.xjyl.gov.cn/upload/1982077760649527296.html

rd.xjyl.gov.cn/upload/1982077760662110208.html

rd.xjyl.gov.cn/upload/1982077760909574144.html

rd.xjyl.gov.cn/upload/1982077760993460224.html

rd.xjyl.gov.cn/upload/1982077760997654528.html

rd.xjyl.gov.cn/upload/1982077761115095041.html

rd.xjyl.gov.cn/upload/1982077761115095040.html

rd.xjyl.gov.cn/upload/1982077761270284288.html

rd.xjyl.gov.cn/upload/1982077761320615936.html

rd.xjyl.gov.cn/upload/1982077761320615937.html

rd.xjyl.gov.cn/upload/1982077761517748224.html

rd.xjyl.gov.cn/upload/1982077761547108352.html

rd.xjyl.gov.cn/upload/1982077761651965953.html

rd.xjyl.gov.cn/upload/1982077761651965952.html

rd.xjyl.gov.cn/upload/1982077761668743168.html

rd.xjyl.gov.cn/upload/1982077761756823552.html

rd.xjyl.gov.cn/upload/1982077761752629248.html

rd.xjyl.gov.cn/upload/1982077761802960896.html

rd.xjyl.gov.cn/upload/1982077761945567232.html

rd.xjyl.gov.cn/upload/1982077761945567233.html

rd.xjyl.gov.cn/upload/1982077762046230528.html

rd.xjyl.gov.cn/upload/1982077762285305856.html

rd.xjyl.gov.cn/upload/1982077762318860288.html

rd.xjyl.gov.cn/upload/1982077762394357760.html

rd.xjyl.gov.cn/upload/1982077762453078016.html

rd.xjyl.gov.cn/upload/1982077762427912192.html

rd.xjyl.gov.cn/upload/1982077762469855232.html

rd.xjyl.gov.cn/upload/1982077762570518528.html

rd.xjyl.gov.cn/upload/1982077762650210304.html

rd.xjyl.gov.cn/upload/1982077762725707776.html

rd.xjyl.gov.cn/upload/1982077762746679296.html

rd.xjyl.gov.cn/upload/1982077762776039424.html

rd.xjyl.gov.cn/upload/1982077762914451456.html

rd.xjyl.gov.cn/upload/1982077763103195136.html

rd.xjyl.gov.cn/upload/1982077763090612224.html

rd.xjyl.gov.cn/upload/1982077763149332480.html

rd.xjyl.gov.cn/upload/1982077763262578688.html

rd.xjyl.gov.cn/upload/1982077763304521728.html

rd.xjyl.gov.cn/upload/1982077763468099584.html

rd.xjyl.gov.cn/upload/1982077763774283776.html

rd.xjyl.gov.cn/upload/1982077763803643904.html

rd.xjyl.gov.cn/upload/1982077763912695808.html

rd.xjyl.gov.cn/upload/1982077764088856576.html

rd.xjyl.gov.cn/upload/1982077764118216704.html

rd.xjyl.gov.cn/upload/1982077764260823040.html

rd.xjyl.gov.cn/upload/1982077764269211648.html

rd.xjyl.gov.cn/upload/1982077764302766080.html

rd.xjyl.gov.cn/upload/1982077764558618624.html

rd.xjyl.gov.cn/upload/1982077764705419264.html

rd.xjyl.gov.cn/upload/1982077764776722432.html

rd.xjyl.gov.cn/upload/1982077764793499648.html

rd.xjyl.gov.cn/upload/1982077764797693952.html

rd.xjyl.gov.cn/upload/1982077764806082560.html

rd.xjyl.gov.cn/upload/1982077764839636992.html

rd.xjyl.gov.cn/upload/1982077764885774336.html

rd.xjyl.gov.cn/upload/1982077764902551552.html

rd.xjyl.gov.cn/upload/1982077764994826240.html

rd.xjyl.gov.cn/upload/1982077764999020544.html

rd.xjyl.gov.cn/upload/1982077765137432576.html

rd.xjyl.gov.cn/upload/1982077765175181312.html

rd.xjyl.gov.cn/upload/1982077765170987008.html

rd.xjyl.gov.cn/upload/1982077765212930048.html

rd.xjyl.gov.cn/upload/1982077765351342080.html

rd.xjyl.gov.cn/upload/1982077765376507904.html

rd.xjyl.gov.cn/upload/1982077765443616768.html

rd.xjyl.gov.cn/upload/1982077765456199680.html

rd.xjyl.gov.cn/upload/1982077765464588288.html

rd.xjyl.gov.cn/upload/1982077765548474368.html

rd.xjyl.gov.cn/upload/1982077765603000320.html

rd.xjyl.gov.cn/upload/1982077765632360448.html

rd.xjyl.gov.cn/upload/1982077765808521217.html

rd.xjyl.gov.cn/upload/1982077765808521216.html

rd.xjyl.gov.cn/upload/1982077765858852864.html

rd.xjyl.gov.cn/upload/1982077766068568064.html

rd.xjyl.gov.cn/upload/1982077766085345280.html

rd.xjyl.gov.cn/upload/1982077766110511104.html

rd.xjyl.gov.cn/upload/1982077766169231360.html

rd.xjyl.gov.cn/upload/1982077766223757312.html

rd.xjyl.gov.cn/upload/1982077766257311744.html

rd.xjyl.gov.cn/upload/1982077766269894656.html

rd.xjyl.gov.cn/upload/1982077766487998464.html

rd.xjyl.gov.cn/upload/1982077766508969985.html

rd.xjyl.gov.cn/upload/1982077766508969984.html

rd.xjyl.gov.cn/upload/1982077766546718720.html

rd.xjyl.gov.cn/upload/1982077766571884544.html

rd.xjyl.gov.cn/upload/1982077766722879488.html

rd.xjyl.gov.cn/upload/1982077766752239616.html

rd.xjyl.gov.cn/upload/1982077766756433920.html

rd.xjyl.gov.cn/upload/1982077766831931392.html

rd.xjyl.gov.cn/upload/1982077766861291520.html

rd.xjyl.gov.cn/upload/1982077766911623168.html

rd.xjyl.gov.cn/upload/1982077766945177600.html

rd.xjyl.gov.cn/upload/1982077766970343424.html

rd.xjyl.gov.cn/upload/1982077767037452288.html

rd.xjyl.gov.cn/upload/1982077767133921280.html

rd.xjyl.gov.cn/upload/1982077767150698496.html

rd.xjyl.gov.cn/upload/1982077767242973184.html

rd.xjyl.gov.cn/upload/1982077767360413696.html

rd.xjyl.gov.cn/upload/1982077767385579520.html

rd.xjyl.gov.cn/upload/1982077767490437120.html

rd.xjyl.gov.cn/upload/1982077767540768768.html

rd.xjyl.gov.cn/upload/1982077767633043456.html

rd.xjyl.gov.cn/upload/1982077767721123840.html

rd.xjyl.gov.cn/upload/1982077767805009920.html

rd.xjyl.gov.cn/upload/1982077767897284608.html

rd.xjyl.gov.cn/upload/1982077768027308032.html

rd.xjyl.gov.cn/upload/1982077768266383360.html

rd.xjyl.gov.cn/upload/1982077768329297920.html

rd.xjyl.gov.cn/upload/1982077768408989696.html

rd.xjyl.gov.cn/upload/1982077768388018176.html

rd.xjyl.gov.cn/upload/1982077768513847296.html

rd.xjyl.gov.cn/upload/1982077768601927680.html

rd.xjyl.gov.cn/upload/1982077768731951104.html

rd.xjyl.gov.cn/upload/1982077768765505536.html

rd.xjyl.gov.cn/upload/1982077768773894144.html

rd.xjyl.gov.cn/upload/1982077768778088448.html

rd.xjyl.gov.cn/upload/1982077768920694784.html

rd.xjyl.gov.cn/upload/1982077768941666304.html

rd.xjyl.gov.cn/upload/1982077769168158720.html

rd.xjyl.gov.cn/upload/1982077769273016320.html

rd.xjyl.gov.cn/upload/1982077769285599232.html

rd.xjyl.gov.cn/upload/1982077769298182144.html

rd.xjyl.gov.cn/upload/1982077769440788480.html

rd.xjyl.gov.cn/upload/1982077769575006208.html

rd.xjyl.gov.cn/upload/1982077769616949248.html

rd.xjyl.gov.cn/upload/1982077769633726464.html

rd.xjyl.gov.cn/upload/1982077769814081536.html

rd.xjyl.gov.cn/upload/1982077769923133440.html

rd.xjyl.gov.cn/upload/1982077769965076480.html

rd.xjyl.gov.cn/upload/1982077770191568896.html

rd.xjyl.gov.cn/upload/1982077770233511936.html

rd.xjyl.gov.cn/upload/1982077770225123328.html

rd.xjyl.gov.cn/upload/1982077770262872064.html

rd.xjyl.gov.cn/upload/1982077770262872065.html

rd.xjyl.gov.cn/upload/1982077770313203712.html

rd.xjyl.gov.cn/upload/1982077770510336001.html

rd.xjyl.gov.cn/upload/1982077770510336000.html

rd.xjyl.gov.cn/upload/1982077770552279040.html

rd.xjyl.gov.cn/upload/1982077770585833472.html

rd.xjyl.gov.cn/upload/1982077770627776512.html

rd.xjyl.gov.cn/upload/1982077770866851840.html

rd.xjyl.gov.cn/upload/1982077770887823360.html

rd.xjyl.gov.cn/upload/1982077770900406272.html

rd.xjyl.gov.cn/upload/1982077770912989184.html

rd.xjyl.gov.cn/upload/1982077770929766400.html

rd.xjyl.gov.cn/upload/1982077770917183488.html

rd.xjyl.gov.cn/upload/1982077771139481600.html

rd.xjyl.gov.cn/upload/1982077771223367680.html

rd.xjyl.gov.cn/upload/1982077771256922112.html

rd.xjyl.gov.cn/upload/1982077771277893632.html

rd.xjyl.gov.cn/upload/1982077771420499968.html

rd.xjyl.gov.cn/upload/1982077771495997440.html

rd.xjyl.gov.cn/upload/1982077771537940480.html

rd.xjyl.gov.cn/upload/1982077771554717696.html

rd.xjyl.gov.cn/upload/1982077771563106304.html

rd.xjyl.gov.cn/upload/1982077771575689216.html

rd.xjyl.gov.cn/upload/1982077771873484800.html

rd.xjyl.gov.cn/upload/1982077771961565184.html

rd.xjyl.gov.cn/upload/1982077771990925312.html

rd.xjyl.gov.cn/upload/1982077772070617088.html

rd.xjyl.gov.cn/upload/1982077772154503168.html

rd.xjyl.gov.cn/upload/1982077772171280384.html

rd.xjyl.gov.cn/upload/1982077772183863296.html

rd.xjyl.gov.cn/upload/1982077772360024064.html

rd.xjyl.gov.cn/upload/1982077772485853184.html

rd.xjyl.gov.cn/upload/1982077772611682304.html

rd.xjyl.gov.cn/upload/1982077772620070912.html

rd.xjyl.gov.cn/upload/1982077772695568384.html

rd.xjyl.gov.cn/upload/1982077772724928512.html

rd.xjyl.gov.cn/upload/1982077772821397504.html

rd.xjyl.gov.cn/upload/1982077772959809536.html

rd.xjyl.gov.cn/upload/1982077772976586752.html

rd.xjyl.gov.cn/upload/1982077773014335488.html

rd.xjyl.gov.cn/upload/1982077773198884864.html

rd.xjyl.gov.cn/upload/1982077773236633600.html

rd.xjyl.gov.cn/upload/1982077773261799424.html

rd.xjyl.gov.cn/upload/1982077773299548160.html

rd.xjyl.gov.cn/upload/1982077773337296896.html

rd.xjyl.gov.cn/upload/1982077773375045632.html

rd.xjyl.gov.cn/upload/1982077773425377280.html

rd.xjyl.gov.cn/upload/1982077773450543104.html

rd.xjyl.gov.cn/upload/1982077773597343744.html

rd.xjyl.gov.cn/upload/1982077773647675392.html

rd.xjyl.gov.cn/upload/1982077773752532992.html

rd.xjyl.gov.cn/upload/1982077773890945024.html

rd.xjyl.gov.cn/upload/1982077773924499456.html

rd.xjyl.gov.cn/upload/1982077774297792512.html

rd.xjyl.gov.cn/upload/1982077774402650112.html

rd.xjyl.gov.cn/upload/1982077774402650113.html

rd.xjyl.gov.cn/upload/1982077774406844416.html

rd.xjyl.gov.cn/upload/1982077774465564672.html

rd.xjyl.gov.cn/upload/1982077774759165952.html

rd.xjyl.gov.cn/upload/1982077774901772288.html

rd.xjyl.gov.cn/upload/1982077774914355200.html

rd.xjyl.gov.cn/upload/1982077775044378624.html

rd.xjyl.gov.cn/upload/1982077775086321664.html

rd.xjyl.gov.cn/upload/1982077775128264704.html

rd.xjyl.gov.cn/upload/1982077775136653312.html

rd.xjyl.gov.cn/upload/1982077775275065344.html

rd.xjyl.gov.cn/upload/1982077775287648256.html

rd.xjyl.gov.cn/upload/1982077775333785600.html

rd.xjyl.gov.cn/upload/1982077775388311552.html

rd.xjyl.gov.cn/upload/1982077775405088768.html

rd.xjyl.gov.cn/upload/1982077775405088769.html

rd.xjyl.gov.cn/upload/1982077775543500800.html

rd.xjyl.gov.cn/upload/1982077775589638144.html

rd.xjyl.gov.cn/upload/1982077775656747008.html

rd.xjyl.gov.cn/upload/1982077775740633088.html

rd.xjyl.gov.cn/upload/1982077775774187520.html

rd.xjyl.gov.cn/upload/1982077775975514112.html

rd.xjyl.gov.cn/upload/1982077775950348288.html

rd.xjyl.gov.cn/upload/1982077776038428672.html

rd.xjyl.gov.cn/upload/1982077776055205888.html

rd.xjyl.gov.cn/upload/1982077776097148928.html

rd.xjyl.gov.cn/upload/1982077776172646400.html

rd.xjyl.gov.cn/upload/1982077776189423616.html

rd.xjyl.gov.cn/upload/1982077776235560960.html

rd.xjyl.gov.cn/upload/1982077776315252736.html

rd.xjyl.gov.cn/upload/1982077776353001472.html

rd.xjyl.gov.cn/upload/1982077776407527424.html

rd.xjyl.gov.cn/upload/1982077776629825536.html

rd.xjyl.gov.cn/upload/1982077776625631232.html

rd.xjyl.gov.cn/upload/1982077776675962880.html

rd.xjyl.gov.cn/upload/1982077776675962881.html

rd.xjyl.gov.cn/upload/1982077776684351488.html

rd.xjyl.gov.cn/upload/1982077776759848960.html

rd.xjyl.gov.cn/upload/1982077776797597696.html

rd.xjyl.gov.cn/upload/1982077776973758464.html

rd.xjyl.gov.cn/upload/1982077776994729984.html

rd.xjyl.gov.cn/upload/1982077777024090112.html

rd.xjyl.gov.cn/upload/1982077777040867328.html

rd.xjyl.gov.cn/upload/1982077777267359744.html

rd.xjyl.gov.cn/upload/1982077777334468608.html

rd.xjyl.gov.cn/upload/1982077777426743296.html

rd.xjyl.gov.cn/upload/1982077777514823680.html

rd.xjyl.gov.cn/upload/1982077777535795200.html

rd.xjyl.gov.cn/upload/1982077777539989504.html

rd.xjyl.gov.cn/upload/1982077777711955968.html

rd.xjyl.gov.cn/upload/1982077777871339520.html

rd.xjyl.gov.cn/upload/1982077777992974336.html

rd.xjyl.gov.cn/upload/1982077778005557248.html

rd.xjyl.gov.cn/upload/1982077778055888896.html

rd.xjyl.gov.cn/upload/1982077778370461696.html

rd.xjyl.gov.cn/upload/1982077778445959169.html

rd.xjyl.gov.cn/upload/1982077778445959168.html

rd.xjyl.gov.cn/upload/1982077778647285760.html

rd.xjyl.gov.cn/upload/1982077778735366144.html

rd.xjyl.gov.cn/upload/1982077778802475008.html

rd.xjyl.gov.cn/upload/1982077779007995904.html

rd.xjyl.gov.cn/upload/1982077779020578816.html

rd.xjyl.gov.cn/upload/1982077779024773120.html

rd.xjyl.gov.cn/upload/1982077779087687680.html

rd.xjyl.gov.cn/upload/1982077779125436416.html

rd.xjyl.gov.cn/upload/1982077779238682624.html

rd.xjyl.gov.cn/upload/1982077779469369344.html

rd.xjyl.gov.cn/upload/1982077779481952256.html

rd.xjyl.gov.cn/upload/1982077779456786432.html

rd.xjyl.gov.cn/upload/1982077779486146560.html

rd.xjyl.gov.cn/upload/1982077779532283904.html

rd.xjyl.gov.cn/upload/1982077779591004160.html

rd.xjyl.gov.cn/upload/1982077779649724416.html

rd.xjyl.gov.cn/upload/1982077779674890240.html

rd.xjyl.gov.cn/upload/1982077779679084544.html

rd.xjyl.gov.cn/upload/1982077779792330752.html

rd.xjyl.gov.cn/upload/1982077779867828224.html

rd.xjyl.gov.cn/upload/1982077779876216832.html

rd.xjyl.gov.cn/upload/1982077780119486464.html

rd.xjyl.gov.cn/upload/1982077780136263680.html

rd.xjyl.gov.cn/upload/1982077780140457984.html

rd.xjyl.gov.cn/upload/1982077780245315584.html

rd.xjyl.gov.cn/upload/1982077780299841536.html

rd.xjyl.gov.cn/upload/1982077780551499776.html

rd.xjyl.gov.cn/upload/1982077780790575104.html

rd.xjyl.gov.cn/upload/1982077780790575105.html

rd.xjyl.gov.cn/upload/1982077780933181440.html

rd.xjyl.gov.cn/upload/1982077781126119424.html

rd.xjyl.gov.cn/upload/1982077781159673856.html

rd.xjyl.gov.cn/upload/1982077781205811200.html

rd.xjyl.gov.cn/upload/1982077781235171328.html

rd.xjyl.gov.cn/upload/1982077781214199808.html

rd.xjyl.gov.cn/upload/1982077781373583360.html

rd.xjyl.gov.cn/upload/1982077781398749184.html

rd.xjyl.gov.cn/upload/1982077781461663744.html

rd.xjyl.gov.cn/upload/1982077781478440960.html

rd.xjyl.gov.cn/upload/1982077781583298560.html

rd.xjyl.gov.cn/upload/1982077781637824512.html

rd.xjyl.gov.cn/upload/1982077781763653632.html

rd.xjyl.gov.cn/upload/1982077781788819456.html

rd.xjyl.gov.cn/upload/1982077781860122624.html

rd.xjyl.gov.cn/upload/1982077781881094144.html

rd.xjyl.gov.cn/upload/1982077781885288448.html

rd.xjyl.gov.cn/upload/1982077781893677056.html

rd.xjyl.gov.cn/upload/1982077782271164416.html

rd.xjyl.gov.cn/upload/1982077782300524544.html

rd.xjyl.gov.cn/upload/1982077782396993536.html

rd.xjyl.gov.cn/upload/1982077782451519488.html

rd.xjyl.gov.cn/upload/1982077782493462528.html

rd.xjyl.gov.cn/upload/1982077782531211264.html

rd.xjyl.gov.cn/upload/1982077782615097344.html

rd.xjyl.gov.cn/upload/1982077782736732160.html

rd.xjyl.gov.cn/upload/1982077782791258112.html

rd.xjyl.gov.cn/upload/1982077782929670144.html

rd.xjyl.gov.cn/upload/1982077782959030272.html

rd.xjyl.gov.cn/upload/1982077783021944832.html

rd.xjyl.gov.cn/upload/1982077783076470784.html

rd.xjyl.gov.cn/upload/1982077783093248000.html

rd.xjyl.gov.cn/upload/1982077783114219520.html

rd.xjyl.gov.cn/upload/1982077783399432192.html

rd.xjyl.gov.cn/upload/1982077783588175872.html

rd.xjyl.gov.cn/upload/1982077783646896128.html

rd.xjyl.gov.cn/upload/1982077783701422080.html

rd.xjyl.gov.cn/upload/1982077783739170816.html

rd.xjyl.gov.cn/upload/1982077784007606272.html

rd.xjyl.gov.cn/upload/1982077784049549312.html

rd.xjyl.gov.cn/upload/1982077784120852480.html

rd.xjyl.gov.cn/upload/1982077784166989824.html

rd.xjyl.gov.cn/upload/1982077784200544256.html

rd.xjyl.gov.cn/upload/1982077784183767040.html

rd.xjyl.gov.cn/upload/1982077784267653120.html

rd.xjyl.gov.cn/upload/1982077784280236032.html

rd.xjyl.gov.cn/upload/1982077784531894272.html

rd.xjyl.gov.cn/upload/1982077784569643008.html

rd.xjyl.gov.cn/upload/1982077784695472128.html

rd.xjyl.gov.cn/upload/1982077784766775296.html

rd.xjyl.gov.cn/upload/1982077784800329728.html

rd.xjyl.gov.cn/upload/1982077784850661376.html

rd.xjyl.gov.cn/upload/1982077785202982912.html

rd.xjyl.gov.cn/upload/1982077785362366464.html

rd.xjyl.gov.cn/upload/1982077785442058240.html

rd.xjyl.gov.cn/upload/1982077785463029760.html

rd.xjyl.gov.cn/upload/1982077785517555713.html

rd.xjyl.gov.cn/upload/1982077785517555712.html

rd.xjyl.gov.cn/upload/1982077785588858880.html

rd.xjyl.gov.cn/upload/1982077785731465216.html

rd.xjyl.gov.cn/upload/1982077785798574080.html

rd.xjyl.gov.cn/upload/1982077786025066496.html

rd.xjyl.gov.cn/upload/1982077786033455104.html

rd.xjyl.gov.cn/upload/1982077786071203840.html

rd.xjyl.gov.cn/upload/1982077786108952576.html

rd.xjyl.gov.cn/upload/1982077786176061440.html

rd.xjyl.gov.cn/upload/1982077786272530432.html

rd.xjyl.gov.cn/upload/1982077786385776640.html

rd.xjyl.gov.cn/upload/1982077786738098176.html

rd.xjyl.gov.cn/upload/1982077786742292480.html

rd.xjyl.gov.cn/upload/1982077786746486784.html

rd.xjyl.gov.cn/upload/1982077786801012736.html

rd.xjyl.gov.cn/upload/1982077786838761472.html

rd.xjyl.gov.cn/upload/1982077786918453248.html

rd.xjyl.gov.cn/upload/1982077786956201984.html

rd.xjyl.gov.cn/upload/1982077787346272256.html

rd.xjyl.gov.cn/upload/1982077787409186816.html

rd.xjyl.gov.cn/upload/1982077787555987456.html

rd.xjyl.gov.cn/upload/1982077787576958976.html

rd.xjyl.gov.cn/upload/1982077787585347584.html

rd.xjyl.gov.cn/upload/1982077787623096320.html

rd.xjyl.gov.cn/upload/1982077787627290624.html

rd.xjyl.gov.cn/upload/1982077787686010880.html

rd.xjyl.gov.cn/upload/1982077787866365952.html

rd.xjyl.gov.cn/upload/1982077787904114688.html

rd.xjyl.gov.cn/upload/1982077788042526720.html

rd.xjyl.gov.cn/upload/1982077788210298880.html

rd.xjyl.gov.cn/upload/1982077788222881792.html

rd.xjyl.gov.cn/upload/1982077788277407744.html

rd.xjyl.gov.cn/upload/1982077788289990656.html

rd.xjyl.gov.cn/upload/1982077788369682432.html

rd.xjyl.gov.cn/upload/1982077788466151424.html

rd.xjyl.gov.cn/upload/1982077788529065984.html

rd.xjyl.gov.cn/upload/1982077788558426112.html

rd.xjyl.gov.cn/upload/1982077788558426113.html

rd.xjyl.gov.cn/upload/1982077788612952064.html

rd.xjyl.gov.cn/upload/1982077788726198272.html

rd.xjyl.gov.cn/upload/1982077788868804608.html

rd.xjyl.gov.cn/upload/1982077788889776128.html

rd.xjyl.gov.cn/upload/1982077788923330560.html

rd.xjyl.gov.cn/upload/1982077788969467904.html

rd.xjyl.gov.cn/upload/1982077789200154624.html

rd.xjyl.gov.cn/upload/1982077789208543232.html

rd.xjyl.gov.cn/upload/1982077789397286912.html

rd.xjyl.gov.cn/upload/1982077789506338816.html

rd.xjyl.gov.cn/upload/1982077789531504640.html

rd.xjyl.gov.cn/upload/1982077789590224896.html

rd.xjyl.gov.cn/upload/1982077789615390720.html

rd.xjyl.gov.cn/upload/1982077789640556544.html

rd.xjyl.gov.cn/upload/1982077789674110976.html

rd.xjyl.gov.cn/upload/1982077789766385664.html

rd.xjyl.gov.cn/upload/1982077789825105920.html

rd.xjyl.gov.cn/upload/1982077789833494528.html

rd.xjyl.gov.cn/upload/1982077789841883136.html

rd.xjyl.gov.cn/upload/1982077789850271744.html

rd.xjyl.gov.cn/upload/1982077789913186304.html

rd.xjyl.gov.cn/upload/1982077790076764160.html

rd.xjyl.gov.cn/upload/1982077790072569856.html

rd.xjyl.gov.cn/upload/1982077790148067328.html

rd.xjyl.gov.cn/upload/1982077790261313536.html

rd.xjyl.gov.cn/upload/1982077790282285056.html

rd.xjyl.gov.cn/upload/1982077790471028736.html

rd.xjyl.gov.cn/upload/1982077790508777472.html

rd.xjyl.gov.cn/upload/1982077790508777473.html

rd.xjyl.gov.cn/upload/1982077790554914816.html

rd.xjyl.gov.cn/upload/1982077790559109120.html

rd.xjyl.gov.cn/upload/1982077790672355328.html

rd.xjyl.gov.cn/upload/1982077790718492672.html

rd.xjyl.gov.cn/upload/1982077791058231296.html

rd.xjyl.gov.cn/upload/1982077791146311680.html

rd.xjyl.gov.cn/upload/1982077791150505984.html

rd.xjyl.gov.cn/upload/1982077791175671808.html

rd.xjyl.gov.cn/upload/1982077791192449024.html

rd.xjyl.gov.cn/upload/1982077791469273088.html

rd.xjyl.gov.cn/upload/1982077791473467392.html

rd.xjyl.gov.cn/upload/1982077791708348416.html

rd.xjyl.gov.cn/upload/1982077791792234496.html

rd.xjyl.gov.cn/upload/1982077791863537664.html

rd.xjyl.gov.cn/upload/1982077791918063616.html

rd.xjyl.gov.cn/upload/1982077792144556032.html

rd.xjyl.gov.cn/upload/1982077792287162368.html

rd.xjyl.gov.cn/upload/1982077792392019968.html

rd.xjyl.gov.cn/upload/1982077792421380096.html

rd.xjyl.gov.cn/upload/1982077792496877568.html

rd.xjyl.gov.cn/upload/1982077792584957952.html

rd.xjyl.gov.cn/upload/1982077792765313024.html

rd.xjyl.gov.cn/upload/1982077792782090240.html

rd.xjyl.gov.cn/upload/1982077792815644672.html

rd.xjyl.gov.cn/upload/1982077792836616192.html

rd.xjyl.gov.cn/upload/1982077792924696576.html

rd.xjyl.gov.cn/upload/1982077793004388352.html

rd.xjyl.gov.cn/upload/1982077793029554176.html

rd.xjyl.gov.cn/upload/1982077793209909248.html

rd.xjyl.gov.cn/upload/1982077793344126976.html

rd.xjyl.gov.cn/upload/1982077793419624448.html

rd.xjyl.gov.cn/upload/1982077793574813696.html

rd.xjyl.gov.cn/upload/1982077793616756736.html

rd.xjyl.gov.cn/upload/1982077793637728256.html

rd.xjyl.gov.cn/upload/1982077793667088384.html

rd.xjyl.gov.cn/upload/1982077793784528896.html

rd.xjyl.gov.cn/upload/1982077793860026368.html

rd.xjyl.gov.cn/upload/1982077793956495360.html

rd.xjyl.gov.cn/upload/1982077793998438400.html

rd.xjyl.gov.cn/upload/1982077794023604224.html

rd.xjyl.gov.cn/upload/1982077794057158656.html

rd.xjyl.gov.cn/upload/1982077794233319424.html

rd.xjyl.gov.cn/upload/1982077794271068160.html

rd.xjyl.gov.cn/upload/1982077794266873856.html

rd.xjyl.gov.cn/upload/1982077794501754880.html

rd.xjyl.gov.cn/upload/1982077794510143488.html

rd.xjyl.gov.cn/upload/1982077794560475136.html

rd.xjyl.gov.cn/upload/1982077794585640960.html

rd.xjyl.gov.cn/upload/1982077794711470080.html

rd.xjyl.gov.cn/upload/1982077794904408064.html

rd.xjyl.gov.cn/upload/1982077794904408065.html

rd.xjyl.gov.cn/upload/1982077795177037824.html

rd.xjyl.gov.cn/upload/1982077795210592256.html

rd.xjyl.gov.cn/upload/1982077795357392896.html

rd.xjyl.gov.cn/upload/1982077795432890368.html

rd.xjyl.gov.cn/upload/1982077795445473280.html

rd.xjyl.gov.cn/upload/1982077795541942272.html

rd.xjyl.gov.cn/upload/1982077795554525184.html

rd.xjyl.gov.cn/upload/1982077795697131520.html

rd.xjyl.gov.cn/upload/1982077795831349248.html

rd.xjyl.gov.cn/upload/1982077796074618880.html

rd.xjyl.gov.cn/upload/1982077796103979008.html

rd.xjyl.gov.cn/upload/1982077796171087872.html

rd.xjyl.gov.cn/upload/1982077796183670784.html

rd.xjyl.gov.cn/upload/1982077796330471424.html

rd.xjyl.gov.cn/upload/1982077796376608768.html

rd.xjyl.gov.cn/upload/1982077796573741056.html

rd.xjyl.gov.cn/upload/1982077796649238528.html

rd.xjyl.gov.cn/upload/1982077796707958784.html

rd.xjyl.gov.cn/upload/1982077796720541696.html

rd.xjyl.gov.cn/upload/1982077796770873344.html

rd.xjyl.gov.cn/upload/1982077796997365760.html

rd.xjyl.gov.cn/upload/1982077797030920192.html

rd.xjyl.gov.cn/upload/1982077797039308800.html

rd.xjyl.gov.cn/upload/1982077797047697408.html

rd.xjyl.gov.cn/upload/1982077797123194880.html

rd.xjyl.gov.cn/upload/1982077797257412608.html

rd.xjyl.gov.cn/upload/1982077797353881600.html

rd.xjyl.gov.cn/upload/1982077797395824640.html

rd.xjyl.gov.cn/upload/1982077797651677184.html

rd.xjyl.gov.cn/upload/1982077797664260096.html

rd.xjyl.gov.cn/upload/1982077797697814528.html

rd.xjyl.gov.cn/upload/1982077797710397440.html

rd.xjyl.gov.cn/upload/1982077797731368960.html

rd.xjyl.gov.cn/upload/1982077797949472768.html

rd.xjyl.gov.cn/upload/1982077797991415808.html

rd.xjyl.gov.cn/upload/1982077798066913280.html

rd.xjyl.gov.cn/upload/1982077798075301888.html

rd.xjyl.gov.cn/upload/1982077798339543040.html

rd.xjyl.gov.cn/upload/1982077798360514560.html

rd.xjyl.gov.cn/upload/1982077798331154432.html

rd.xjyl.gov.cn/upload/1982077798486343680.html

rd.xjyl.gov.cn/upload/1982077798637338624.html

rd.xjyl.gov.cn/upload/1982077798645727232.html

rd.xjyl.gov.cn/upload/1982077798788333568.html

rd.xjyl.gov.cn/upload/1982077798838665216.html

rd.xjyl.gov.cn/upload/1982077799035797504.html

rd.xjyl.gov.cn/upload/1982077799023214592.html

rd.xjyl.gov.cn/upload/1982077799081934848.html

rd.xjyl.gov.cn/upload/1982077799283261440.html

rd.xjyl.gov.cn/upload/1982077799283261441.html

rd.xjyl.gov.cn/upload/1982077799631388672.html

rd.xjyl.gov.cn/upload/1982077799715274752.html

rd.xjyl.gov.cn/upload/1982077799803355136.html

rd.xjyl.gov.cn/upload/1982077799799160832.html

rd.xjyl.gov.cn/upload/1982077799849492480.html

rd.xjyl.gov.cn/upload/1982077799895629824.html

rd.xjyl.gov.cn/upload/1982077799971127296.html

rd.xjyl.gov.cn/upload/1982077800008876032.html

rd.xjyl.gov.cn/upload/1982077800344420352.html

rd.xjyl.gov.cn/upload/1982077800331837440.html

rd.xjyl.gov.cn/upload/1982077800507998208.html

rd.xjyl.gov.cn/upload/1982077800516386816.html

rd.xjyl.gov.cn/upload/1982077800629633024.html

rd.xjyl.gov.cn/upload/1982077800814182400.html

rd.xjyl.gov.cn/upload/1982077800898068480.html

rd.xjyl.gov.cn/upload/1982077800990343168.html

rd.xjyl.gov.cn/upload/1982077800994537472.html

rd.xjyl.gov.cn/upload/1982077801053257728.html

rd.xjyl.gov.cn/upload/1982077801455910912.html

rd.xjyl.gov.cn/upload/1982077801539796992.html

rd.xjyl.gov.cn/upload/1982077801539796993.html

rd.xjyl.gov.cn/upload/1982077801535602688.html

rd.xjyl.gov.cn/upload/1982077801556574208.html

rd.xjyl.gov.cn/upload/1982077801674014720.html

rd.xjyl.gov.cn/upload/1982077801678209024.html

rd.xjyl.gov.cn/upload/1982077801707569152.html

rd.xjyl.gov.cn/upload/1982077801715957760.html

rd.xjyl.gov.cn/upload/1982077801854369792.html

rd.xjyl.gov.cn/upload/1982077802038919168.html

rd.xjyl.gov.cn/upload/1982077802068279296.html

rd.xjyl.gov.cn/upload/1982077802114416640.html

rd.xjyl.gov.cn/upload/1982077802185719808.html

rd.xjyl.gov.cn/upload/1982077802185719809.html

rd.xjyl.gov.cn/upload/1982077802227662848.html

rd.xjyl.gov.cn/upload/1982077802277994496.html

rd.xjyl.gov.cn/upload/1982077802307354624.html

rd.xjyl.gov.cn/upload/1982077802324131840.html

rd.xjyl.gov.cn/upload/1982077802319937536.html

rd.xjyl.gov.cn/upload/1982077802487709696.html

rd.xjyl.gov.cn/upload/1982077802840031232.html

rd.xjyl.gov.cn/upload/1982077802869391360.html

rd.xjyl.gov.cn/upload/1982077802995220480.html

rd.xjyl.gov.cn/upload/1982077802957471744.html

rd.xjyl.gov.cn/upload/1982077803121049600.html

rd.xjyl.gov.cn/upload/1982077803121049601.html

rd.xjyl.gov.cn/upload/1982077803183964160.html

rd.xjyl.gov.cn/upload/1982077803318181888.html

rd.xjyl.gov.cn/upload/1982077803322376192.html

rd.xjyl.gov.cn/upload/1982077803448205312.html

rd.xjyl.gov.cn/upload/1982077803490148352.html

rd.xjyl.gov.cn/upload/1982077803532091392.html

rd.xjyl.gov.cn/upload/1982077803569840128.html

rd.xjyl.gov.cn/upload/1982077803649531904.html

rd.xjyl.gov.cn/upload/1982077803754389504.html

rd.xjyl.gov.cn/upload/1982077803792138240.html

rd.xjyl.gov.cn/upload/1982077803804721152.html

rd.xjyl.gov.cn/upload/1982077803825692672.html

rd.xjyl.gov.cn/upload/1982077803955716096.html

rd.xjyl.gov.cn/upload/1982077803993464832.html

rd.xjyl.gov.cn/upload/1982077804068962304.html

rd.xjyl.gov.cn/upload/1982077804190597120.html

rd.xjyl.gov.cn/upload/1982077804299649024.html

rd.xjyl.gov.cn/upload/1982077804308037632.html

rd.xjyl.gov.cn/upload/1982077804425478144.html

rd.xjyl.gov.cn/upload/1982077804425478145.html

rd.xjyl.gov.cn/upload/1982077804475809792.html

rd.xjyl.gov.cn/upload/1982077804480004096.html

rd.xjyl.gov.cn/upload/1982077804526141440.html

rd.xjyl.gov.cn/upload/1982077804589056000.html

rd.xjyl.gov.cn/upload/1982077804677136384.html

rd.xjyl.gov.cn/upload/1982077804664553472.html

rd.xjyl.gov.cn/upload/1982077804903628800.html

rd.xjyl.gov.cn/upload/1982077805042040832.html

rd.xjyl.gov.cn/upload/1982077805134315521.html

rd.xjyl.gov.cn/upload/1982077805134315520.html

rd.xjyl.gov.cn/upload/1982077805180452864.html

rd.xjyl.gov.cn/upload/1982077805205618688.html

rd.xjyl.gov.cn/upload/1982077805276921856.html

rd.xjyl.gov.cn/upload/1982077805381779456.html

rd.xjyl.gov.cn/upload/1982077805457276928.html

rd.xjyl.gov.cn/upload/1982077805495025664.html

rd.xjyl.gov.cn/upload/1982077805671186432.html

rd.xjyl.gov.cn/upload/1982077805767655424.html

rd.xjyl.gov.cn/upload/1982077805843152896.html

rd.xjyl.gov.cn/upload/1982077805977370624.html

rd.xjyl.gov.cn/upload/1982077805994147840.html

rd.xjyl.gov.cn/upload/1982077806052868096.html

rd.xjyl.gov.cn/upload/1982077806308720640.html

rd.xjyl.gov.cn/upload/1982077806082228224.html

rd.xjyl.gov.cn/upload/1982077806304526336.html

相关推荐
nianniannnn3 小时前
Qt布局管理停靠窗口QDockWidget类
开发语言·数据库·c++·qt·qt5·qt6.3
一成码农3 小时前
3w字一文讲透Java IO
java·开发语言
可触的未来,发芽的智生3 小时前
追根索源:换不同的词嵌入(词向量生成方式不同,但词与词关系接近),会出现什么结果?
javascript·人工智能·python·神经网络·自然语言处理
Yeats_Liao3 小时前
Go Web 编程快速入门 07.4 - 模板(4):组合模板与逻辑控制
开发语言·后端·golang
木易 士心3 小时前
MyBatis 与 Spring Data JPA 核心对比:选型指南与最佳实践
java·spring·1024程序员节
努力写代码的熊大3 小时前
stack、queue与priority_queue的用法解析与模拟实现
java·前端·javascript
hu_nil3 小时前
LLMOps-第十一周作业
python·vllm
lightqjx3 小时前
【C++】list 常见使用和模拟实现
开发语言·c++
ceclar1234 小时前
C++容器queue
开发语言·c++