浏览代码

广告视频理解任务

xueyiming 2 月之前
当前提交
5438a41f0c
共有 28 个文件被更改,包括 5451 次插入0 次删除
  1. 129 0
      pom.xml
  2. 13 0
      src/main/java/com/tzld/piaoquan/featurestools/FeaturesToolsApplication.java
  3. 48 0
      src/main/java/com/tzld/piaoquan/featurestools/config/DataSourceConfig.java
  4. 49 0
      src/main/java/com/tzld/piaoquan/featurestools/config/XxlJobConfig.java
  5. 31 0
      src/main/java/com/tzld/piaoquan/featurestools/dao/generator/MybatisGeneratorMain.java
  6. 76 0
      src/main/java/com/tzld/piaoquan/featurestools/dao/generator/PaginationPlugin.java
  7. 30 0
      src/main/java/com/tzld/piaoquan/featurestools/dao/mapper/CreativeMapper.java
  8. 36 0
      src/main/java/com/tzld/piaoquan/featurestools/dao/mapper/CreativeVideoUnderstanderMapper.java
  9. 127 0
      src/main/java/com/tzld/piaoquan/featurestools/job/CreativeVideoUnderstandJob.java
  10. 323 0
      src/main/java/com/tzld/piaoquan/featurestools/model/po/Creative.java
  11. 2052 0
      src/main/java/com/tzld/piaoquan/featurestools/model/po/CreativeExample.java
  12. 136 0
      src/main/java/com/tzld/piaoquan/featurestools/model/po/CreativeVideoUnderstander.java
  13. 842 0
      src/main/java/com/tzld/piaoquan/featurestools/model/po/CreativeVideoUnderstanderExample.java
  14. 14 0
      src/main/java/com/tzld/piaoquan/featurestools/model/vo/VideoUnderstandParam.java
  15. 19 0
      src/main/java/com/tzld/piaoquan/featurestools/model/vo/VideoUnderstandResult.java
  16. 9 0
      src/main/java/com/tzld/piaoquan/featurestools/service/VideoUnderstandService.java
  17. 32 0
      src/main/java/com/tzld/piaoquan/featurestools/service/impl/VideoUnderstandServiceImpl.java
  18. 33 0
      src/main/java/com/tzld/piaoquan/featurestools/util/DateUtil.java
  19. 90 0
      src/main/java/com/tzld/piaoquan/featurestools/util/HttpClientUtil.java
  20. 193 0
      src/main/java/com/tzld/piaoquan/featurestools/util/HttpPoolClientUtil.java
  21. 108 0
      src/main/java/com/tzld/piaoquan/featurestools/util/page/Page.java
  22. 11 0
      src/main/resources/application-prod.properties
  23. 23 0
      src/main/resources/application.properties
  24. 580 0
      src/main/resources/mapper/CreativeMapper.xml
  25. 364 0
      src/main/resources/mapper/CreativeVideoUnderstanderMapper.xml
  26. 13 0
      src/main/resources/mybatis-config.xml
  27. 57 0
      src/main/resources/mybatis-generator-config.xml
  28. 13 0
      src/test/java/com/tzld/piaoquan/featurestools/FeaturesToolsApplicationTests.java

+ 129 - 0
pom.xml

@@ -0,0 +1,129 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.tzld.commons</groupId>
+        <artifactId>supom</artifactId>
+        <version>1.0.6</version>
+    </parent>
+    <groupId>com.tzld.piaoquan</groupId>
+    <artifactId>features-tools</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>features-tools</name>
+    <description>features-tools</description>
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.mybatis.generator</groupId>
+            <artifactId>mybatis-generator-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+
+        <!-- druid数据源 -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.1.23</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.xuxueli</groupId>
+            <artifactId>xxl-job-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.34</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.14</version> <!-- 使用最新版本 -->
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.5.14</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore</artifactId>
+            <version>4.4.16</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>31.1-jre</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 13 - 0
src/main/java/com/tzld/piaoquan/featurestools/FeaturesToolsApplication.java

@@ -0,0 +1,13 @@
+package com.tzld.piaoquan.featurestools;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class FeaturesToolsApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(FeaturesToolsApplication.class, args);
+    }
+
+}

+ 48 - 0
src/main/java/com/tzld/piaoquan/featurestools/config/DataSourceConfig.java

@@ -0,0 +1,48 @@
+package com.tzld.piaoquan.featurestools.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.PlatformTransactionManager;
+
+import javax.sql.DataSource;
+
+
+@Configuration
+@MapperScan(basePackages = DataSourceConfig.PACKAGE_MASTER, sqlSessionFactoryRef = "masterSqlSessionFactory")
+public class DataSourceConfig {
+    // 数据源
+    static final String PACKAGE_MASTER = "com.tzld.piaoquan.featurestools.dao.mapper";
+    static final String MAPPER_LOCATION_MASTER = "classpath:mapper/*.xml";
+
+    @Bean(name = "dataSource")
+    @ConfigurationProperties("spring.datasource")
+    public DataSource getDataSource(){
+        return new DruidDataSource();
+    }
+
+    @Primary
+    @Bean(name = "masterTransactionManager")
+    public PlatformTransactionManager masterTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
+        return new DataSourceTransactionManager(dataSource);
+    }
+
+    @Primary
+    @Bean(name = "masterSqlSessionFactory")
+    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
+        final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
+        sessionFactoryBean.setDataSource(dataSource);
+        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(DataSourceConfig.MAPPER_LOCATION_MASTER));
+        return sessionFactoryBean.getObject();
+    }
+
+
+}

+ 49 - 0
src/main/java/com/tzld/piaoquan/featurestools/config/XxlJobConfig.java

@@ -0,0 +1,49 @@
+package com.tzld.piaoquan.featurestools.config;
+
+import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class XxlJobConfig {
+
+
+    @Value("${xxl.job.admin.addresses}")
+    private String adminAddresses;
+
+    @Value("${xxl.job.accessToken}")
+    private String accessToken;
+
+    @Value("${xxl.job.executor.appname}")
+    private String appName;
+
+    @Value("${xxl.job.executor.address}")
+    private String address;
+
+    @Value("${xxl.job.executor.ip}")
+    private String ip;
+
+    @Value("${xxl.job.executor.port}")
+    private int port;
+
+    @Value("${xxl.job.executor.logpath}")
+    private String logPath;
+
+    @Value("${xxl.job.executor.logretentiondays}")
+    private int logRetentionDays;
+
+    @Bean
+    public XxlJobSpringExecutor xxlJobExecutor() {
+        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
+        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
+        xxlJobSpringExecutor.setAppname(appName);
+        xxlJobSpringExecutor.setAddress(address);
+        xxlJobSpringExecutor.setIp(ip);
+        xxlJobSpringExecutor.setPort(port);
+        xxlJobSpringExecutor.setAccessToken(accessToken);
+        xxlJobSpringExecutor.setLogPath(logPath);
+        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
+        return xxlJobSpringExecutor;
+    }
+}

+ 31 - 0
src/main/java/com/tzld/piaoquan/featurestools/dao/generator/MybatisGeneratorMain.java

@@ -0,0 +1,31 @@
+package com.tzld.piaoquan.featurestools.dao.generator;
+
+import org.mybatis.generator.api.MyBatisGenerator;
+import org.mybatis.generator.config.Configuration;
+import org.mybatis.generator.config.xml.ConfigurationParser;
+import org.mybatis.generator.exception.InvalidConfigurationException;
+import org.mybatis.generator.exception.XMLParserException;
+import org.mybatis.generator.internal.DefaultShellCallback;
+
+import java.io.File;
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class MybatisGeneratorMain {
+
+    public static void main(String[] args)
+            throws SQLException, IOException, InterruptedException, InvalidConfigurationException, XMLParserException {
+        List<String> warnings = new ArrayList<>();
+
+        File configFile = new File(MybatisGeneratorMain.class.getResource("/mybatis-generator-config.xml").getFile());
+        ConfigurationParser cp = new ConfigurationParser(warnings);
+        Configuration config = cp.parseConfiguration(configFile);
+        DefaultShellCallback callback = new DefaultShellCallback(true);
+        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
+        myBatisGenerator.generate(null);
+        System.out.println("genreate finish");
+    }
+}

+ 76 - 0
src/main/java/com/tzld/piaoquan/featurestools/dao/generator/PaginationPlugin.java

@@ -0,0 +1,76 @@
+package com.tzld.piaoquan.featurestools.dao.generator;
+
+import org.mybatis.generator.api.CommentGenerator;
+import org.mybatis.generator.api.IntrospectedTable;
+import org.mybatis.generator.api.PluginAdapter;
+import org.mybatis.generator.api.dom.java.*;
+import org.mybatis.generator.api.dom.xml.Attribute;
+import org.mybatis.generator.api.dom.xml.TextElement;
+import org.mybatis.generator.api.dom.xml.XmlElement;
+
+import java.util.List;
+
+public class PaginationPlugin extends PluginAdapter {
+
+    @Override
+    public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+        addPage(topLevelClass, introspectedTable, "page");
+        return super.modelExampleClassGenerated(topLevelClass, introspectedTable);
+    }
+
+    @Override
+    public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
+        XmlElement page = new XmlElement("if");
+        page.addAttribute(new Attribute("test", "page != null"));
+        page.addElement(new TextElement("limit #{page.offset} , #{page.pageSize}"));
+        element.addElement(page);
+        return super.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element, introspectedTable);
+    }
+
+    @Override
+    public boolean sqlMapSelectByExampleWithBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
+        XmlElement page = new XmlElement("if");
+        page.addAttribute(new Attribute("test", "page != null"));
+        page.addElement(new TextElement("limit #{page.offset} , #{page.pageSize}"));
+        element.addElement(page);
+        return super.sqlMapSelectByExampleWithBLOBsElementGenerated(element, introspectedTable);
+    }
+
+    /**
+     * @param topLevelClass
+     * @param introspectedTable
+     * @param name
+     */
+    private void addPage(TopLevelClass topLevelClass, IntrospectedTable introspectedTable, String name) {
+        topLevelClass.addImportedType(new FullyQualifiedJavaType("com.tzld.piaoquan.featurestools.page.Page"));
+        CommentGenerator commentGenerator = context.getCommentGenerator();
+        Field field = new Field();
+        field.setVisibility(JavaVisibility.PROTECTED);
+        field.setType(new FullyQualifiedJavaType("com.tzld.piaoquan.featurestools.page.Page"));
+        field.setName(name);
+        commentGenerator.addFieldComment(field, introspectedTable);
+        topLevelClass.addField(field);
+        char c = name.charAt(0);
+        String camel = Character.toUpperCase(c) + name.substring(1);
+        Method method = new Method();
+        method.setVisibility(JavaVisibility.PUBLIC);
+        method.setName("set" + camel);
+        method.addParameter(new Parameter(new FullyQualifiedJavaType("com.tzld.piaoquan.featurestools.page.Page"), name));
+        method.addBodyLine("this." + name + "=" + name + ";");
+        commentGenerator.addGeneralMethodComment(method, introspectedTable);
+        topLevelClass.addMethod(method);
+        method = new Method();
+        method.setVisibility(JavaVisibility.PUBLIC);
+        method.setReturnType(new FullyQualifiedJavaType("com.tzld.piaoquan.featurestools.page.Page"));
+        method.setName("get" + camel);
+        method.addBodyLine("return " + name + ";");
+        commentGenerator.addGeneralMethodComment(method, introspectedTable);
+        topLevelClass.addMethod(method);
+    }
+
+    @Override
+    public boolean validate(List<String> arg0) {
+        return true;
+    }
+
+}

+ 30 - 0
src/main/java/com/tzld/piaoquan/featurestools/dao/mapper/CreativeMapper.java

@@ -0,0 +1,30 @@
+package com.tzld.piaoquan.featurestools.dao.mapper;
+
+import com.tzld.piaoquan.featurestools.model.po.Creative;
+import com.tzld.piaoquan.featurestools.model.po.CreativeExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface CreativeMapper {
+    long countByExample(CreativeExample example);
+
+    int deleteByExample(CreativeExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(Creative record);
+
+    int insertSelective(Creative record);
+
+    List<Creative> selectByExample(CreativeExample example);
+
+    Creative selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("record") Creative record, @Param("example") CreativeExample example);
+
+    int updateByExample(@Param("record") Creative record, @Param("example") CreativeExample example);
+
+    int updateByPrimaryKeySelective(Creative record);
+
+    int updateByPrimaryKey(Creative record);
+}

+ 36 - 0
src/main/java/com/tzld/piaoquan/featurestools/dao/mapper/CreativeVideoUnderstanderMapper.java

@@ -0,0 +1,36 @@
+package com.tzld.piaoquan.featurestools.dao.mapper;
+
+import com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstander;
+import com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstanderExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface CreativeVideoUnderstanderMapper {
+    long countByExample(CreativeVideoUnderstanderExample example);
+
+    int deleteByExample(CreativeVideoUnderstanderExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(CreativeVideoUnderstander record);
+
+    int insertSelective(CreativeVideoUnderstander record);
+
+    List<CreativeVideoUnderstander> selectByExampleWithBLOBs(CreativeVideoUnderstanderExample example);
+
+    List<CreativeVideoUnderstander> selectByExample(CreativeVideoUnderstanderExample example);
+
+    CreativeVideoUnderstander selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("record") CreativeVideoUnderstander record, @Param("example") CreativeVideoUnderstanderExample example);
+
+    int updateByExampleWithBLOBs(@Param("record") CreativeVideoUnderstander record, @Param("example") CreativeVideoUnderstanderExample example);
+
+    int updateByExample(@Param("record") CreativeVideoUnderstander record, @Param("example") CreativeVideoUnderstanderExample example);
+
+    int updateByPrimaryKeySelective(CreativeVideoUnderstander record);
+
+    int updateByPrimaryKeyWithBLOBs(CreativeVideoUnderstander record);
+
+    int updateByPrimaryKey(CreativeVideoUnderstander record);
+}

+ 127 - 0
src/main/java/com/tzld/piaoquan/featurestools/job/CreativeVideoUnderstandJob.java

@@ -0,0 +1,127 @@
+package com.tzld.piaoquan.featurestools.job;
+
+import com.tzld.piaoquan.featurestools.dao.mapper.CreativeVideoUnderstanderMapper;
+import com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstander;
+import com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstanderExample;
+import com.tzld.piaoquan.featurestools.model.vo.VideoUnderstandParam;
+import com.tzld.piaoquan.featurestools.model.vo.VideoUnderstandResult;
+import com.tzld.piaoquan.featurestools.service.VideoUnderstandService;
+import com.tzld.piaoquan.featurestools.util.DateUtil;
+import com.tzld.piaoquan.featurestools.util.page.Page;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.*;
+
+@Slf4j
+@Component
+public class CreativeVideoUnderstandJob {
+    private static final ThreadPoolExecutor videoPoolExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5);
+
+    private static final ArrayBlockingQueue<CreativeVideoUnderstander> videoQueue = new ArrayBlockingQueue<>(100000);
+
+
+    @Autowired
+    private CreativeVideoUnderstanderMapper creativeVideoUnderstanderMapper;
+
+    @Autowired
+    private VideoUnderstandService videoUnderstandService;
+
+    @XxlJob("videoUnderstanderJob")
+    public ReturnT<String> videoUnderstander(String param) throws InterruptedException {
+        if (videoPoolExecutor.getCorePoolSize() - videoPoolExecutor.getActiveCount() > 0) {
+            int threadSize = videoPoolExecutor.getCorePoolSize() - videoPoolExecutor.getActiveCount();
+            log.info("threadNum={}", threadSize);
+            CountDownLatch countDownLatch = new CountDownLatch(threadSize);
+            // 启动消费者线程
+            for (int i = 0; i < threadSize; i++) {
+                videoPoolExecutor.execute(new Thread(() -> {
+                    log.info("启动视频理解线程");
+                    while (true) {
+                        try {
+                            // 超过 5 分钟没有数据,销毁当前线程
+                            CreativeVideoUnderstander creativeVideoUnderstander = videoQueue.poll(5, TimeUnit.MINUTES); // 等待最多 5 分钟
+                            log.info("videoQueue size={}", videoQueue.size());
+                            if (creativeVideoUnderstander == null) {
+                                break; // 退出当前线程
+                            }
+                            processCreativeVideoUnderstander(creativeVideoUnderstander);
+                        } catch (Exception e) {
+                            log.error("视频理解线程异常", e);
+                        }
+                    }
+                    log.info("视频理解线程结束");
+                    countDownLatch.countDown();
+                }));
+            }
+            CreativeVideoUnderstanderExample example = new CreativeVideoUnderstanderExample();
+            example.createCriteria().andStatusEqualTo(0);
+            long count = creativeVideoUnderstanderMapper.countByExample(example);
+            int pageSize = 1000;
+            int pageNum = (int) (count / pageSize) + 1;
+            for (int i = 0; i < pageNum; i++) {
+                Page page = new Page<>(i, pageSize);
+                example.setPage(page);
+                List<CreativeVideoUnderstander> creativeVideoUnderstanderList = creativeVideoUnderstanderMapper.selectByExample(example);
+                if (!CollectionUtils.isEmpty(creativeVideoUnderstanderList)) {
+                    videoQueue.addAll(creativeVideoUnderstanderList);
+                }
+            }
+            countDownLatch.await();
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    private void processCreativeVideoUnderstander(CreativeVideoUnderstander creativeVideoUnderstander) {
+        VideoUnderstandParam videoUnderstandParam = new VideoUnderstandParam();
+        videoUnderstandParam.setUrl(creativeVideoUnderstander.getVideoUrl());
+        videoUnderstandParam.setFileName(creativeVideoUnderstander.getVideoFileName());
+        VideoUnderstandResult videoUnderstandResult = videoUnderstandService.getVideoUnderstandResult(videoUnderstandParam);
+        if (videoUnderstandResult == null) {
+            addRetryCount(creativeVideoUnderstander);
+            return;
+        }
+        if (StringUtils.isNotEmpty(videoUnderstandResult.getError())) {
+            log.error("videoUnderstandResult id={} error={}", creativeVideoUnderstander.getId(), videoUnderstandResult.getError());
+            addRetryCount(creativeVideoUnderstander);
+            return;
+        }
+        if (StringUtils.isNotEmpty(videoUnderstandResult.getFileName())) {
+            creativeVideoUnderstander.setVideoFileName(videoUnderstandResult.getFileName());
+        }
+        if (StringUtils.isNotEmpty(videoUnderstandResult.getFileStatus())) {
+            creativeVideoUnderstander.setVideoFileStatus(videoUnderstandResult.getFileStatus());
+        }
+        if (StringUtils.isNotEmpty(videoUnderstandResult.getExpireTime())) {
+            Date date = DateUtil.parseDate(videoUnderstandResult.getExpireTime());
+            if (date != null) {
+                creativeVideoUnderstander.setVideoFileExpireTime(date);
+            }
+        }
+        if (StringUtils.isNotEmpty(videoUnderstandResult.getUnderstanderText())) {
+            creativeVideoUnderstander.setUnderstanderText(videoUnderstandResult.getUnderstanderText());
+            creativeVideoUnderstander.setStatus(1);
+            creativeVideoUnderstanderMapper.updateByPrimaryKeyWithBLOBs(creativeVideoUnderstander);
+            return;
+        }
+        addRetryCount(creativeVideoUnderstander);
+    }
+
+    private void addRetryCount(CreativeVideoUnderstander creativeVideoUnderstander) {
+        if (creativeVideoUnderstander.getRetryCount() >= 3) {
+            creativeVideoUnderstander.setStatus(2);
+        } else {
+            creativeVideoUnderstander.setRetryCount(creativeVideoUnderstander.getRetryCount() + 1);
+        }
+        creativeVideoUnderstanderMapper.updateByPrimaryKeySelective(creativeVideoUnderstander);
+    }
+
+
+}

+ 323 - 0
src/main/java/com/tzld/piaoquan/featurestools/model/po/Creative.java

@@ -0,0 +1,323 @@
+package com.tzld.piaoquan.featurestools.model.po;
+
+import java.util.Date;
+
+public class Creative {
+    private Long id;
+
+    private Long adId;
+
+    private String creativeCode;
+
+    private Integer creativePattern;
+
+    private Integer positionId;
+
+    private String creativeTitle;
+
+    private String copywriting;
+
+    private String materialType;
+
+    private String materialAddress;
+
+    private String materialMd5;
+
+    private Long materialAddressTranscodeJobId;
+
+    private String creativeLogoAddress;
+
+    private String clickButtonText;
+
+    private String clickButtonColor;
+
+    private Integer clickButtonEffects;
+
+    private Integer landingPageType;
+
+    private String landingPageAppid;
+
+    private String landingPageAddress;
+
+    private String status;
+
+    private String checkReason;
+
+    private Integer weight;
+
+    private Integer isDelete;
+
+    private String createUser;
+
+    private String updateUser;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    private String creativeName;
+
+    private Integer urlCheckStatus;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getAdId() {
+        return adId;
+    }
+
+    public void setAdId(Long adId) {
+        this.adId = adId;
+    }
+
+    public String getCreativeCode() {
+        return creativeCode;
+    }
+
+    public void setCreativeCode(String creativeCode) {
+        this.creativeCode = creativeCode;
+    }
+
+    public Integer getCreativePattern() {
+        return creativePattern;
+    }
+
+    public void setCreativePattern(Integer creativePattern) {
+        this.creativePattern = creativePattern;
+    }
+
+    public Integer getPositionId() {
+        return positionId;
+    }
+
+    public void setPositionId(Integer positionId) {
+        this.positionId = positionId;
+    }
+
+    public String getCreativeTitle() {
+        return creativeTitle;
+    }
+
+    public void setCreativeTitle(String creativeTitle) {
+        this.creativeTitle = creativeTitle;
+    }
+
+    public String getCopywriting() {
+        return copywriting;
+    }
+
+    public void setCopywriting(String copywriting) {
+        this.copywriting = copywriting;
+    }
+
+    public String getMaterialType() {
+        return materialType;
+    }
+
+    public void setMaterialType(String materialType) {
+        this.materialType = materialType;
+    }
+
+    public String getMaterialAddress() {
+        return materialAddress;
+    }
+
+    public void setMaterialAddress(String materialAddress) {
+        this.materialAddress = materialAddress;
+    }
+
+    public String getMaterialMd5() {
+        return materialMd5;
+    }
+
+    public void setMaterialMd5(String materialMd5) {
+        this.materialMd5 = materialMd5;
+    }
+
+    public Long getMaterialAddressTranscodeJobId() {
+        return materialAddressTranscodeJobId;
+    }
+
+    public void setMaterialAddressTranscodeJobId(Long materialAddressTranscodeJobId) {
+        this.materialAddressTranscodeJobId = materialAddressTranscodeJobId;
+    }
+
+    public String getCreativeLogoAddress() {
+        return creativeLogoAddress;
+    }
+
+    public void setCreativeLogoAddress(String creativeLogoAddress) {
+        this.creativeLogoAddress = creativeLogoAddress;
+    }
+
+    public String getClickButtonText() {
+        return clickButtonText;
+    }
+
+    public void setClickButtonText(String clickButtonText) {
+        this.clickButtonText = clickButtonText;
+    }
+
+    public String getClickButtonColor() {
+        return clickButtonColor;
+    }
+
+    public void setClickButtonColor(String clickButtonColor) {
+        this.clickButtonColor = clickButtonColor;
+    }
+
+    public Integer getClickButtonEffects() {
+        return clickButtonEffects;
+    }
+
+    public void setClickButtonEffects(Integer clickButtonEffects) {
+        this.clickButtonEffects = clickButtonEffects;
+    }
+
+    public Integer getLandingPageType() {
+        return landingPageType;
+    }
+
+    public void setLandingPageType(Integer landingPageType) {
+        this.landingPageType = landingPageType;
+    }
+
+    public String getLandingPageAppid() {
+        return landingPageAppid;
+    }
+
+    public void setLandingPageAppid(String landingPageAppid) {
+        this.landingPageAppid = landingPageAppid;
+    }
+
+    public String getLandingPageAddress() {
+        return landingPageAddress;
+    }
+
+    public void setLandingPageAddress(String landingPageAddress) {
+        this.landingPageAddress = landingPageAddress;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCheckReason() {
+        return checkReason;
+    }
+
+    public void setCheckReason(String checkReason) {
+        this.checkReason = checkReason;
+    }
+
+    public Integer getWeight() {
+        return weight;
+    }
+
+    public void setWeight(Integer weight) {
+        this.weight = weight;
+    }
+
+    public Integer getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(Integer isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    public String getCreateUser() {
+        return createUser;
+    }
+
+    public void setCreateUser(String createUser) {
+        this.createUser = createUser;
+    }
+
+    public String getUpdateUser() {
+        return updateUser;
+    }
+
+    public void setUpdateUser(String updateUser) {
+        this.updateUser = updateUser;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getCreativeName() {
+        return creativeName;
+    }
+
+    public void setCreativeName(String creativeName) {
+        this.creativeName = creativeName;
+    }
+
+    public Integer getUrlCheckStatus() {
+        return urlCheckStatus;
+    }
+
+    public void setUrlCheckStatus(Integer urlCheckStatus) {
+        this.urlCheckStatus = urlCheckStatus;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", adId=").append(adId);
+        sb.append(", creativeCode=").append(creativeCode);
+        sb.append(", creativePattern=").append(creativePattern);
+        sb.append(", positionId=").append(positionId);
+        sb.append(", creativeTitle=").append(creativeTitle);
+        sb.append(", copywriting=").append(copywriting);
+        sb.append(", materialType=").append(materialType);
+        sb.append(", materialAddress=").append(materialAddress);
+        sb.append(", materialMd5=").append(materialMd5);
+        sb.append(", materialAddressTranscodeJobId=").append(materialAddressTranscodeJobId);
+        sb.append(", creativeLogoAddress=").append(creativeLogoAddress);
+        sb.append(", clickButtonText=").append(clickButtonText);
+        sb.append(", clickButtonColor=").append(clickButtonColor);
+        sb.append(", clickButtonEffects=").append(clickButtonEffects);
+        sb.append(", landingPageType=").append(landingPageType);
+        sb.append(", landingPageAppid=").append(landingPageAppid);
+        sb.append(", landingPageAddress=").append(landingPageAddress);
+        sb.append(", status=").append(status);
+        sb.append(", checkReason=").append(checkReason);
+        sb.append(", weight=").append(weight);
+        sb.append(", isDelete=").append(isDelete);
+        sb.append(", createUser=").append(createUser);
+        sb.append(", updateUser=").append(updateUser);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append(", creativeName=").append(creativeName);
+        sb.append(", urlCheckStatus=").append(urlCheckStatus);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 2052 - 0
src/main/java/com/tzld/piaoquan/featurestools/model/po/CreativeExample.java

@@ -0,0 +1,2052 @@
+package com.tzld.piaoquan.featurestools.model.po;
+
+import com.tzld.piaoquan.featurestools.util.page.Page;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class CreativeExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    protected Page page;
+
+    public CreativeExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    public void setPage(Page page) {
+        this.page=page;
+    }
+
+    public Page getPage() {
+        return page;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdIsNull() {
+            addCriterion("ad_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdIsNotNull() {
+            addCriterion("ad_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdEqualTo(Long value) {
+            addCriterion("ad_id =", value, "adId");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdNotEqualTo(Long value) {
+            addCriterion("ad_id <>", value, "adId");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdGreaterThan(Long value) {
+            addCriterion("ad_id >", value, "adId");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("ad_id >=", value, "adId");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdLessThan(Long value) {
+            addCriterion("ad_id <", value, "adId");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdLessThanOrEqualTo(Long value) {
+            addCriterion("ad_id <=", value, "adId");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdIn(List<Long> values) {
+            addCriterion("ad_id in", values, "adId");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdNotIn(List<Long> values) {
+            addCriterion("ad_id not in", values, "adId");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdBetween(Long value1, Long value2) {
+            addCriterion("ad_id between", value1, value2, "adId");
+            return (Criteria) this;
+        }
+
+        public Criteria andAdIdNotBetween(Long value1, Long value2) {
+            addCriterion("ad_id not between", value1, value2, "adId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeIsNull() {
+            addCriterion("creative_code is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeIsNotNull() {
+            addCriterion("creative_code is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeEqualTo(String value) {
+            addCriterion("creative_code =", value, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeNotEqualTo(String value) {
+            addCriterion("creative_code <>", value, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeGreaterThan(String value) {
+            addCriterion("creative_code >", value, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeGreaterThanOrEqualTo(String value) {
+            addCriterion("creative_code >=", value, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeLessThan(String value) {
+            addCriterion("creative_code <", value, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeLessThanOrEqualTo(String value) {
+            addCriterion("creative_code <=", value, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeLike(String value) {
+            addCriterion("creative_code like", value, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeNotLike(String value) {
+            addCriterion("creative_code not like", value, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeIn(List<String> values) {
+            addCriterion("creative_code in", values, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeNotIn(List<String> values) {
+            addCriterion("creative_code not in", values, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeBetween(String value1, String value2) {
+            addCriterion("creative_code between", value1, value2, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeCodeNotBetween(String value1, String value2) {
+            addCriterion("creative_code not between", value1, value2, "creativeCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternIsNull() {
+            addCriterion("creative_pattern is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternIsNotNull() {
+            addCriterion("creative_pattern is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternEqualTo(Integer value) {
+            addCriterion("creative_pattern =", value, "creativePattern");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternNotEqualTo(Integer value) {
+            addCriterion("creative_pattern <>", value, "creativePattern");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternGreaterThan(Integer value) {
+            addCriterion("creative_pattern >", value, "creativePattern");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternGreaterThanOrEqualTo(Integer value) {
+            addCriterion("creative_pattern >=", value, "creativePattern");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternLessThan(Integer value) {
+            addCriterion("creative_pattern <", value, "creativePattern");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternLessThanOrEqualTo(Integer value) {
+            addCriterion("creative_pattern <=", value, "creativePattern");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternIn(List<Integer> values) {
+            addCriterion("creative_pattern in", values, "creativePattern");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternNotIn(List<Integer> values) {
+            addCriterion("creative_pattern not in", values, "creativePattern");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternBetween(Integer value1, Integer value2) {
+            addCriterion("creative_pattern between", value1, value2, "creativePattern");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativePatternNotBetween(Integer value1, Integer value2) {
+            addCriterion("creative_pattern not between", value1, value2, "creativePattern");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdIsNull() {
+            addCriterion("position_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdIsNotNull() {
+            addCriterion("position_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdEqualTo(Integer value) {
+            addCriterion("position_id =", value, "positionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdNotEqualTo(Integer value) {
+            addCriterion("position_id <>", value, "positionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdGreaterThan(Integer value) {
+            addCriterion("position_id >", value, "positionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("position_id >=", value, "positionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdLessThan(Integer value) {
+            addCriterion("position_id <", value, "positionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdLessThanOrEqualTo(Integer value) {
+            addCriterion("position_id <=", value, "positionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdIn(List<Integer> values) {
+            addCriterion("position_id in", values, "positionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdNotIn(List<Integer> values) {
+            addCriterion("position_id not in", values, "positionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdBetween(Integer value1, Integer value2) {
+            addCriterion("position_id between", value1, value2, "positionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPositionIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("position_id not between", value1, value2, "positionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleIsNull() {
+            addCriterion("creative_title is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleIsNotNull() {
+            addCriterion("creative_title is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleEqualTo(String value) {
+            addCriterion("creative_title =", value, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleNotEqualTo(String value) {
+            addCriterion("creative_title <>", value, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleGreaterThan(String value) {
+            addCriterion("creative_title >", value, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleGreaterThanOrEqualTo(String value) {
+            addCriterion("creative_title >=", value, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleLessThan(String value) {
+            addCriterion("creative_title <", value, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleLessThanOrEqualTo(String value) {
+            addCriterion("creative_title <=", value, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleLike(String value) {
+            addCriterion("creative_title like", value, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleNotLike(String value) {
+            addCriterion("creative_title not like", value, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleIn(List<String> values) {
+            addCriterion("creative_title in", values, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleNotIn(List<String> values) {
+            addCriterion("creative_title not in", values, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleBetween(String value1, String value2) {
+            addCriterion("creative_title between", value1, value2, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeTitleNotBetween(String value1, String value2) {
+            addCriterion("creative_title not between", value1, value2, "creativeTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingIsNull() {
+            addCriterion("copywriting is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingIsNotNull() {
+            addCriterion("copywriting is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingEqualTo(String value) {
+            addCriterion("copywriting =", value, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingNotEqualTo(String value) {
+            addCriterion("copywriting <>", value, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingGreaterThan(String value) {
+            addCriterion("copywriting >", value, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingGreaterThanOrEqualTo(String value) {
+            addCriterion("copywriting >=", value, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingLessThan(String value) {
+            addCriterion("copywriting <", value, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingLessThanOrEqualTo(String value) {
+            addCriterion("copywriting <=", value, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingLike(String value) {
+            addCriterion("copywriting like", value, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingNotLike(String value) {
+            addCriterion("copywriting not like", value, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingIn(List<String> values) {
+            addCriterion("copywriting in", values, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingNotIn(List<String> values) {
+            addCriterion("copywriting not in", values, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingBetween(String value1, String value2) {
+            addCriterion("copywriting between", value1, value2, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andCopywritingNotBetween(String value1, String value2) {
+            addCriterion("copywriting not between", value1, value2, "copywriting");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeIsNull() {
+            addCriterion("material_type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeIsNotNull() {
+            addCriterion("material_type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeEqualTo(String value) {
+            addCriterion("material_type =", value, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeNotEqualTo(String value) {
+            addCriterion("material_type <>", value, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeGreaterThan(String value) {
+            addCriterion("material_type >", value, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeGreaterThanOrEqualTo(String value) {
+            addCriterion("material_type >=", value, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeLessThan(String value) {
+            addCriterion("material_type <", value, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeLessThanOrEqualTo(String value) {
+            addCriterion("material_type <=", value, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeLike(String value) {
+            addCriterion("material_type like", value, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeNotLike(String value) {
+            addCriterion("material_type not like", value, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeIn(List<String> values) {
+            addCriterion("material_type in", values, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeNotIn(List<String> values) {
+            addCriterion("material_type not in", values, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeBetween(String value1, String value2) {
+            addCriterion("material_type between", value1, value2, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialTypeNotBetween(String value1, String value2) {
+            addCriterion("material_type not between", value1, value2, "materialType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressIsNull() {
+            addCriterion("material_address is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressIsNotNull() {
+            addCriterion("material_address is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressEqualTo(String value) {
+            addCriterion("material_address =", value, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressNotEqualTo(String value) {
+            addCriterion("material_address <>", value, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressGreaterThan(String value) {
+            addCriterion("material_address >", value, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressGreaterThanOrEqualTo(String value) {
+            addCriterion("material_address >=", value, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressLessThan(String value) {
+            addCriterion("material_address <", value, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressLessThanOrEqualTo(String value) {
+            addCriterion("material_address <=", value, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressLike(String value) {
+            addCriterion("material_address like", value, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressNotLike(String value) {
+            addCriterion("material_address not like", value, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressIn(List<String> values) {
+            addCriterion("material_address in", values, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressNotIn(List<String> values) {
+            addCriterion("material_address not in", values, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressBetween(String value1, String value2) {
+            addCriterion("material_address between", value1, value2, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressNotBetween(String value1, String value2) {
+            addCriterion("material_address not between", value1, value2, "materialAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5IsNull() {
+            addCriterion("material_md5 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5IsNotNull() {
+            addCriterion("material_md5 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5EqualTo(String value) {
+            addCriterion("material_md5 =", value, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5NotEqualTo(String value) {
+            addCriterion("material_md5 <>", value, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5GreaterThan(String value) {
+            addCriterion("material_md5 >", value, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5GreaterThanOrEqualTo(String value) {
+            addCriterion("material_md5 >=", value, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5LessThan(String value) {
+            addCriterion("material_md5 <", value, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5LessThanOrEqualTo(String value) {
+            addCriterion("material_md5 <=", value, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5Like(String value) {
+            addCriterion("material_md5 like", value, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5NotLike(String value) {
+            addCriterion("material_md5 not like", value, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5In(List<String> values) {
+            addCriterion("material_md5 in", values, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5NotIn(List<String> values) {
+            addCriterion("material_md5 not in", values, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5Between(String value1, String value2) {
+            addCriterion("material_md5 between", value1, value2, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialMd5NotBetween(String value1, String value2) {
+            addCriterion("material_md5 not between", value1, value2, "materialMd5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdIsNull() {
+            addCriterion("material_address_transcode_job_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdIsNotNull() {
+            addCriterion("material_address_transcode_job_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdEqualTo(Long value) {
+            addCriterion("material_address_transcode_job_id =", value, "materialAddressTranscodeJobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdNotEqualTo(Long value) {
+            addCriterion("material_address_transcode_job_id <>", value, "materialAddressTranscodeJobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdGreaterThan(Long value) {
+            addCriterion("material_address_transcode_job_id >", value, "materialAddressTranscodeJobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("material_address_transcode_job_id >=", value, "materialAddressTranscodeJobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdLessThan(Long value) {
+            addCriterion("material_address_transcode_job_id <", value, "materialAddressTranscodeJobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdLessThanOrEqualTo(Long value) {
+            addCriterion("material_address_transcode_job_id <=", value, "materialAddressTranscodeJobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdIn(List<Long> values) {
+            addCriterion("material_address_transcode_job_id in", values, "materialAddressTranscodeJobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdNotIn(List<Long> values) {
+            addCriterion("material_address_transcode_job_id not in", values, "materialAddressTranscodeJobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdBetween(Long value1, Long value2) {
+            addCriterion("material_address_transcode_job_id between", value1, value2, "materialAddressTranscodeJobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMaterialAddressTranscodeJobIdNotBetween(Long value1, Long value2) {
+            addCriterion("material_address_transcode_job_id not between", value1, value2, "materialAddressTranscodeJobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressIsNull() {
+            addCriterion("creative_logo_address is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressIsNotNull() {
+            addCriterion("creative_logo_address is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressEqualTo(String value) {
+            addCriterion("creative_logo_address =", value, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressNotEqualTo(String value) {
+            addCriterion("creative_logo_address <>", value, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressGreaterThan(String value) {
+            addCriterion("creative_logo_address >", value, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressGreaterThanOrEqualTo(String value) {
+            addCriterion("creative_logo_address >=", value, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressLessThan(String value) {
+            addCriterion("creative_logo_address <", value, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressLessThanOrEqualTo(String value) {
+            addCriterion("creative_logo_address <=", value, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressLike(String value) {
+            addCriterion("creative_logo_address like", value, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressNotLike(String value) {
+            addCriterion("creative_logo_address not like", value, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressIn(List<String> values) {
+            addCriterion("creative_logo_address in", values, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressNotIn(List<String> values) {
+            addCriterion("creative_logo_address not in", values, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressBetween(String value1, String value2) {
+            addCriterion("creative_logo_address between", value1, value2, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeLogoAddressNotBetween(String value1, String value2) {
+            addCriterion("creative_logo_address not between", value1, value2, "creativeLogoAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextIsNull() {
+            addCriterion("click_button_text is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextIsNotNull() {
+            addCriterion("click_button_text is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextEqualTo(String value) {
+            addCriterion("click_button_text =", value, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextNotEqualTo(String value) {
+            addCriterion("click_button_text <>", value, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextGreaterThan(String value) {
+            addCriterion("click_button_text >", value, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextGreaterThanOrEqualTo(String value) {
+            addCriterion("click_button_text >=", value, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextLessThan(String value) {
+            addCriterion("click_button_text <", value, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextLessThanOrEqualTo(String value) {
+            addCriterion("click_button_text <=", value, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextLike(String value) {
+            addCriterion("click_button_text like", value, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextNotLike(String value) {
+            addCriterion("click_button_text not like", value, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextIn(List<String> values) {
+            addCriterion("click_button_text in", values, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextNotIn(List<String> values) {
+            addCriterion("click_button_text not in", values, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextBetween(String value1, String value2) {
+            addCriterion("click_button_text between", value1, value2, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonTextNotBetween(String value1, String value2) {
+            addCriterion("click_button_text not between", value1, value2, "clickButtonText");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorIsNull() {
+            addCriterion("click_button_color is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorIsNotNull() {
+            addCriterion("click_button_color is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorEqualTo(String value) {
+            addCriterion("click_button_color =", value, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorNotEqualTo(String value) {
+            addCriterion("click_button_color <>", value, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorGreaterThan(String value) {
+            addCriterion("click_button_color >", value, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorGreaterThanOrEqualTo(String value) {
+            addCriterion("click_button_color >=", value, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorLessThan(String value) {
+            addCriterion("click_button_color <", value, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorLessThanOrEqualTo(String value) {
+            addCriterion("click_button_color <=", value, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorLike(String value) {
+            addCriterion("click_button_color like", value, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorNotLike(String value) {
+            addCriterion("click_button_color not like", value, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorIn(List<String> values) {
+            addCriterion("click_button_color in", values, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorNotIn(List<String> values) {
+            addCriterion("click_button_color not in", values, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorBetween(String value1, String value2) {
+            addCriterion("click_button_color between", value1, value2, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonColorNotBetween(String value1, String value2) {
+            addCriterion("click_button_color not between", value1, value2, "clickButtonColor");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsIsNull() {
+            addCriterion("click_button_effects is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsIsNotNull() {
+            addCriterion("click_button_effects is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsEqualTo(Integer value) {
+            addCriterion("click_button_effects =", value, "clickButtonEffects");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsNotEqualTo(Integer value) {
+            addCriterion("click_button_effects <>", value, "clickButtonEffects");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsGreaterThan(Integer value) {
+            addCriterion("click_button_effects >", value, "clickButtonEffects");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsGreaterThanOrEqualTo(Integer value) {
+            addCriterion("click_button_effects >=", value, "clickButtonEffects");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsLessThan(Integer value) {
+            addCriterion("click_button_effects <", value, "clickButtonEffects");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsLessThanOrEqualTo(Integer value) {
+            addCriterion("click_button_effects <=", value, "clickButtonEffects");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsIn(List<Integer> values) {
+            addCriterion("click_button_effects in", values, "clickButtonEffects");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsNotIn(List<Integer> values) {
+            addCriterion("click_button_effects not in", values, "clickButtonEffects");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsBetween(Integer value1, Integer value2) {
+            addCriterion("click_button_effects between", value1, value2, "clickButtonEffects");
+            return (Criteria) this;
+        }
+
+        public Criteria andClickButtonEffectsNotBetween(Integer value1, Integer value2) {
+            addCriterion("click_button_effects not between", value1, value2, "clickButtonEffects");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeIsNull() {
+            addCriterion("landing_page_type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeIsNotNull() {
+            addCriterion("landing_page_type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeEqualTo(Integer value) {
+            addCriterion("landing_page_type =", value, "landingPageType");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeNotEqualTo(Integer value) {
+            addCriterion("landing_page_type <>", value, "landingPageType");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeGreaterThan(Integer value) {
+            addCriterion("landing_page_type >", value, "landingPageType");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("landing_page_type >=", value, "landingPageType");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeLessThan(Integer value) {
+            addCriterion("landing_page_type <", value, "landingPageType");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeLessThanOrEqualTo(Integer value) {
+            addCriterion("landing_page_type <=", value, "landingPageType");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeIn(List<Integer> values) {
+            addCriterion("landing_page_type in", values, "landingPageType");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeNotIn(List<Integer> values) {
+            addCriterion("landing_page_type not in", values, "landingPageType");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeBetween(Integer value1, Integer value2) {
+            addCriterion("landing_page_type between", value1, value2, "landingPageType");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageTypeNotBetween(Integer value1, Integer value2) {
+            addCriterion("landing_page_type not between", value1, value2, "landingPageType");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidIsNull() {
+            addCriterion("landing_page_appId is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidIsNotNull() {
+            addCriterion("landing_page_appId is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidEqualTo(String value) {
+            addCriterion("landing_page_appId =", value, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidNotEqualTo(String value) {
+            addCriterion("landing_page_appId <>", value, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidGreaterThan(String value) {
+            addCriterion("landing_page_appId >", value, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidGreaterThanOrEqualTo(String value) {
+            addCriterion("landing_page_appId >=", value, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidLessThan(String value) {
+            addCriterion("landing_page_appId <", value, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidLessThanOrEqualTo(String value) {
+            addCriterion("landing_page_appId <=", value, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidLike(String value) {
+            addCriterion("landing_page_appId like", value, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidNotLike(String value) {
+            addCriterion("landing_page_appId not like", value, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidIn(List<String> values) {
+            addCriterion("landing_page_appId in", values, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidNotIn(List<String> values) {
+            addCriterion("landing_page_appId not in", values, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidBetween(String value1, String value2) {
+            addCriterion("landing_page_appId between", value1, value2, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAppidNotBetween(String value1, String value2) {
+            addCriterion("landing_page_appId not between", value1, value2, "landingPageAppid");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressIsNull() {
+            addCriterion("landing_page_address is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressIsNotNull() {
+            addCriterion("landing_page_address is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressEqualTo(String value) {
+            addCriterion("landing_page_address =", value, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressNotEqualTo(String value) {
+            addCriterion("landing_page_address <>", value, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressGreaterThan(String value) {
+            addCriterion("landing_page_address >", value, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressGreaterThanOrEqualTo(String value) {
+            addCriterion("landing_page_address >=", value, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressLessThan(String value) {
+            addCriterion("landing_page_address <", value, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressLessThanOrEqualTo(String value) {
+            addCriterion("landing_page_address <=", value, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressLike(String value) {
+            addCriterion("landing_page_address like", value, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressNotLike(String value) {
+            addCriterion("landing_page_address not like", value, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressIn(List<String> values) {
+            addCriterion("landing_page_address in", values, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressNotIn(List<String> values) {
+            addCriterion("landing_page_address not in", values, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressBetween(String value1, String value2) {
+            addCriterion("landing_page_address between", value1, value2, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andLandingPageAddressNotBetween(String value1, String value2) {
+            addCriterion("landing_page_address not between", value1, value2, "landingPageAddress");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("`status` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("`status` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(String value) {
+            addCriterion("`status` =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(String value) {
+            addCriterion("`status` <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(String value) {
+            addCriterion("`status` >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(String value) {
+            addCriterion("`status` >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(String value) {
+            addCriterion("`status` <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(String value) {
+            addCriterion("`status` <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLike(String value) {
+            addCriterion("`status` like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotLike(String value) {
+            addCriterion("`status` not like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<String> values) {
+            addCriterion("`status` in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<String> values) {
+            addCriterion("`status` not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(String value1, String value2) {
+            addCriterion("`status` between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(String value1, String value2) {
+            addCriterion("`status` not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonIsNull() {
+            addCriterion("check_reason is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonIsNotNull() {
+            addCriterion("check_reason is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonEqualTo(String value) {
+            addCriterion("check_reason =", value, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonNotEqualTo(String value) {
+            addCriterion("check_reason <>", value, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonGreaterThan(String value) {
+            addCriterion("check_reason >", value, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonGreaterThanOrEqualTo(String value) {
+            addCriterion("check_reason >=", value, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonLessThan(String value) {
+            addCriterion("check_reason <", value, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonLessThanOrEqualTo(String value) {
+            addCriterion("check_reason <=", value, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonLike(String value) {
+            addCriterion("check_reason like", value, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonNotLike(String value) {
+            addCriterion("check_reason not like", value, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonIn(List<String> values) {
+            addCriterion("check_reason in", values, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonNotIn(List<String> values) {
+            addCriterion("check_reason not in", values, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonBetween(String value1, String value2) {
+            addCriterion("check_reason between", value1, value2, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andCheckReasonNotBetween(String value1, String value2) {
+            addCriterion("check_reason not between", value1, value2, "checkReason");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightIsNull() {
+            addCriterion("weight is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightIsNotNull() {
+            addCriterion("weight is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightEqualTo(Integer value) {
+            addCriterion("weight =", value, "weight");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightNotEqualTo(Integer value) {
+            addCriterion("weight <>", value, "weight");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightGreaterThan(Integer value) {
+            addCriterion("weight >", value, "weight");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightGreaterThanOrEqualTo(Integer value) {
+            addCriterion("weight >=", value, "weight");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightLessThan(Integer value) {
+            addCriterion("weight <", value, "weight");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightLessThanOrEqualTo(Integer value) {
+            addCriterion("weight <=", value, "weight");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightIn(List<Integer> values) {
+            addCriterion("weight in", values, "weight");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightNotIn(List<Integer> values) {
+            addCriterion("weight not in", values, "weight");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightBetween(Integer value1, Integer value2) {
+            addCriterion("weight between", value1, value2, "weight");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeightNotBetween(Integer value1, Integer value2) {
+            addCriterion("weight not between", value1, value2, "weight");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNull() {
+            addCriterion("is_delete is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNotNull() {
+            addCriterion("is_delete is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteEqualTo(Integer value) {
+            addCriterion("is_delete =", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotEqualTo(Integer value) {
+            addCriterion("is_delete <>", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThan(Integer value) {
+            addCriterion("is_delete >", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThanOrEqualTo(Integer value) {
+            addCriterion("is_delete >=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThan(Integer value) {
+            addCriterion("is_delete <", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThanOrEqualTo(Integer value) {
+            addCriterion("is_delete <=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIn(List<Integer> values) {
+            addCriterion("is_delete in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotIn(List<Integer> values) {
+            addCriterion("is_delete not in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteBetween(Integer value1, Integer value2) {
+            addCriterion("is_delete between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotBetween(Integer value1, Integer value2) {
+            addCriterion("is_delete not between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIsNull() {
+            addCriterion("create_user is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIsNotNull() {
+            addCriterion("create_user is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserEqualTo(String value) {
+            addCriterion("create_user =", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserNotEqualTo(String value) {
+            addCriterion("create_user <>", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserGreaterThan(String value) {
+            addCriterion("create_user >", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserGreaterThanOrEqualTo(String value) {
+            addCriterion("create_user >=", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserLessThan(String value) {
+            addCriterion("create_user <", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserLessThanOrEqualTo(String value) {
+            addCriterion("create_user <=", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserLike(String value) {
+            addCriterion("create_user like", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserNotLike(String value) {
+            addCriterion("create_user not like", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIn(List<String> values) {
+            addCriterion("create_user in", values, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserNotIn(List<String> values) {
+            addCriterion("create_user not in", values, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserBetween(String value1, String value2) {
+            addCriterion("create_user between", value1, value2, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserNotBetween(String value1, String value2) {
+            addCriterion("create_user not between", value1, value2, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserIsNull() {
+            addCriterion("update_user is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserIsNotNull() {
+            addCriterion("update_user is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserEqualTo(String value) {
+            addCriterion("update_user =", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserNotEqualTo(String value) {
+            addCriterion("update_user <>", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserGreaterThan(String value) {
+            addCriterion("update_user >", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserGreaterThanOrEqualTo(String value) {
+            addCriterion("update_user >=", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserLessThan(String value) {
+            addCriterion("update_user <", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserLessThanOrEqualTo(String value) {
+            addCriterion("update_user <=", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserLike(String value) {
+            addCriterion("update_user like", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserNotLike(String value) {
+            addCriterion("update_user not like", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserIn(List<String> values) {
+            addCriterion("update_user in", values, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserNotIn(List<String> values) {
+            addCriterion("update_user not in", values, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserBetween(String value1, String value2) {
+            addCriterion("update_user between", value1, value2, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserNotBetween(String value1, String value2) {
+            addCriterion("update_user not between", value1, value2, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameIsNull() {
+            addCriterion("creative_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameIsNotNull() {
+            addCriterion("creative_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameEqualTo(String value) {
+            addCriterion("creative_name =", value, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameNotEqualTo(String value) {
+            addCriterion("creative_name <>", value, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameGreaterThan(String value) {
+            addCriterion("creative_name >", value, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameGreaterThanOrEqualTo(String value) {
+            addCriterion("creative_name >=", value, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameLessThan(String value) {
+            addCriterion("creative_name <", value, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameLessThanOrEqualTo(String value) {
+            addCriterion("creative_name <=", value, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameLike(String value) {
+            addCriterion("creative_name like", value, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameNotLike(String value) {
+            addCriterion("creative_name not like", value, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameIn(List<String> values) {
+            addCriterion("creative_name in", values, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameNotIn(List<String> values) {
+            addCriterion("creative_name not in", values, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameBetween(String value1, String value2) {
+            addCriterion("creative_name between", value1, value2, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeNameNotBetween(String value1, String value2) {
+            addCriterion("creative_name not between", value1, value2, "creativeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusIsNull() {
+            addCriterion("url_check_status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusIsNotNull() {
+            addCriterion("url_check_status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusEqualTo(Integer value) {
+            addCriterion("url_check_status =", value, "urlCheckStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusNotEqualTo(Integer value) {
+            addCriterion("url_check_status <>", value, "urlCheckStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusGreaterThan(Integer value) {
+            addCriterion("url_check_status >", value, "urlCheckStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusGreaterThanOrEqualTo(Integer value) {
+            addCriterion("url_check_status >=", value, "urlCheckStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusLessThan(Integer value) {
+            addCriterion("url_check_status <", value, "urlCheckStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusLessThanOrEqualTo(Integer value) {
+            addCriterion("url_check_status <=", value, "urlCheckStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusIn(List<Integer> values) {
+            addCriterion("url_check_status in", values, "urlCheckStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusNotIn(List<Integer> values) {
+            addCriterion("url_check_status not in", values, "urlCheckStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusBetween(Integer value1, Integer value2) {
+            addCriterion("url_check_status between", value1, value2, "urlCheckStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlCheckStatusNotBetween(Integer value1, Integer value2) {
+            addCriterion("url_check_status not between", value1, value2, "urlCheckStatus");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 136 - 0
src/main/java/com/tzld/piaoquan/featurestools/model/po/CreativeVideoUnderstander.java

@@ -0,0 +1,136 @@
+package com.tzld.piaoquan.featurestools.model.po;
+
+import java.util.Date;
+
+public class CreativeVideoUnderstander {
+    private Long id;
+
+    private Long creativeId;
+
+    private String videoUrl;
+
+    private String videoFileName;
+
+    private String videoFileStatus;
+
+    private Date videoFileExpireTime;
+
+    private Integer retryCount;
+
+    private Integer status;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    private String understanderText;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getCreativeId() {
+        return creativeId;
+    }
+
+    public void setCreativeId(Long creativeId) {
+        this.creativeId = creativeId;
+    }
+
+    public String getVideoUrl() {
+        return videoUrl;
+    }
+
+    public void setVideoUrl(String videoUrl) {
+        this.videoUrl = videoUrl;
+    }
+
+    public String getVideoFileName() {
+        return videoFileName;
+    }
+
+    public void setVideoFileName(String videoFileName) {
+        this.videoFileName = videoFileName;
+    }
+
+    public String getVideoFileStatus() {
+        return videoFileStatus;
+    }
+
+    public void setVideoFileStatus(String videoFileStatus) {
+        this.videoFileStatus = videoFileStatus;
+    }
+
+    public Date getVideoFileExpireTime() {
+        return videoFileExpireTime;
+    }
+
+    public void setVideoFileExpireTime(Date videoFileExpireTime) {
+        this.videoFileExpireTime = videoFileExpireTime;
+    }
+
+    public Integer getRetryCount() {
+        return retryCount;
+    }
+
+    public void setRetryCount(Integer retryCount) {
+        this.retryCount = retryCount;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUnderstanderText() {
+        return understanderText;
+    }
+
+    public void setUnderstanderText(String understanderText) {
+        this.understanderText = understanderText;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", creativeId=").append(creativeId);
+        sb.append(", videoUrl=").append(videoUrl);
+        sb.append(", videoFileName=").append(videoFileName);
+        sb.append(", videoFileStatus=").append(videoFileStatus);
+        sb.append(", videoFileExpireTime=").append(videoFileExpireTime);
+        sb.append(", retryCount=").append(retryCount);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append(", understanderText=").append(understanderText);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 842 - 0
src/main/java/com/tzld/piaoquan/featurestools/model/po/CreativeVideoUnderstanderExample.java

@@ -0,0 +1,842 @@
+package com.tzld.piaoquan.featurestools.model.po;
+
+import com.tzld.piaoquan.featurestools.util.page.Page;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class CreativeVideoUnderstanderExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    protected Page page;
+
+    public CreativeVideoUnderstanderExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    public void setPage(Page page) {
+        this.page=page;
+    }
+
+    public Page getPage() {
+        return page;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdIsNull() {
+            addCriterion("creative_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdIsNotNull() {
+            addCriterion("creative_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdEqualTo(Long value) {
+            addCriterion("creative_id =", value, "creativeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdNotEqualTo(Long value) {
+            addCriterion("creative_id <>", value, "creativeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdGreaterThan(Long value) {
+            addCriterion("creative_id >", value, "creativeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("creative_id >=", value, "creativeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdLessThan(Long value) {
+            addCriterion("creative_id <", value, "creativeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdLessThanOrEqualTo(Long value) {
+            addCriterion("creative_id <=", value, "creativeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdIn(List<Long> values) {
+            addCriterion("creative_id in", values, "creativeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdNotIn(List<Long> values) {
+            addCriterion("creative_id not in", values, "creativeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdBetween(Long value1, Long value2) {
+            addCriterion("creative_id between", value1, value2, "creativeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreativeIdNotBetween(Long value1, Long value2) {
+            addCriterion("creative_id not between", value1, value2, "creativeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlIsNull() {
+            addCriterion("video_url is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlIsNotNull() {
+            addCriterion("video_url is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlEqualTo(String value) {
+            addCriterion("video_url =", value, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlNotEqualTo(String value) {
+            addCriterion("video_url <>", value, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlGreaterThan(String value) {
+            addCriterion("video_url >", value, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlGreaterThanOrEqualTo(String value) {
+            addCriterion("video_url >=", value, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlLessThan(String value) {
+            addCriterion("video_url <", value, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlLessThanOrEqualTo(String value) {
+            addCriterion("video_url <=", value, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlLike(String value) {
+            addCriterion("video_url like", value, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlNotLike(String value) {
+            addCriterion("video_url not like", value, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlIn(List<String> values) {
+            addCriterion("video_url in", values, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlNotIn(List<String> values) {
+            addCriterion("video_url not in", values, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlBetween(String value1, String value2) {
+            addCriterion("video_url between", value1, value2, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoUrlNotBetween(String value1, String value2) {
+            addCriterion("video_url not between", value1, value2, "videoUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameIsNull() {
+            addCriterion("video_file_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameIsNotNull() {
+            addCriterion("video_file_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameEqualTo(String value) {
+            addCriterion("video_file_name =", value, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameNotEqualTo(String value) {
+            addCriterion("video_file_name <>", value, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameGreaterThan(String value) {
+            addCriterion("video_file_name >", value, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameGreaterThanOrEqualTo(String value) {
+            addCriterion("video_file_name >=", value, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameLessThan(String value) {
+            addCriterion("video_file_name <", value, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameLessThanOrEqualTo(String value) {
+            addCriterion("video_file_name <=", value, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameLike(String value) {
+            addCriterion("video_file_name like", value, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameNotLike(String value) {
+            addCriterion("video_file_name not like", value, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameIn(List<String> values) {
+            addCriterion("video_file_name in", values, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameNotIn(List<String> values) {
+            addCriterion("video_file_name not in", values, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameBetween(String value1, String value2) {
+            addCriterion("video_file_name between", value1, value2, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileNameNotBetween(String value1, String value2) {
+            addCriterion("video_file_name not between", value1, value2, "videoFileName");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusIsNull() {
+            addCriterion("video_file_status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusIsNotNull() {
+            addCriterion("video_file_status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusEqualTo(String value) {
+            addCriterion("video_file_status =", value, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusNotEqualTo(String value) {
+            addCriterion("video_file_status <>", value, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusGreaterThan(String value) {
+            addCriterion("video_file_status >", value, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusGreaterThanOrEqualTo(String value) {
+            addCriterion("video_file_status >=", value, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusLessThan(String value) {
+            addCriterion("video_file_status <", value, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusLessThanOrEqualTo(String value) {
+            addCriterion("video_file_status <=", value, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusLike(String value) {
+            addCriterion("video_file_status like", value, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusNotLike(String value) {
+            addCriterion("video_file_status not like", value, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusIn(List<String> values) {
+            addCriterion("video_file_status in", values, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusNotIn(List<String> values) {
+            addCriterion("video_file_status not in", values, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusBetween(String value1, String value2) {
+            addCriterion("video_file_status between", value1, value2, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileStatusNotBetween(String value1, String value2) {
+            addCriterion("video_file_status not between", value1, value2, "videoFileStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeIsNull() {
+            addCriterion("video_file_expire_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeIsNotNull() {
+            addCriterion("video_file_expire_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeEqualTo(Date value) {
+            addCriterion("video_file_expire_time =", value, "videoFileExpireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeNotEqualTo(Date value) {
+            addCriterion("video_file_expire_time <>", value, "videoFileExpireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeGreaterThan(Date value) {
+            addCriterion("video_file_expire_time >", value, "videoFileExpireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("video_file_expire_time >=", value, "videoFileExpireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeLessThan(Date value) {
+            addCriterion("video_file_expire_time <", value, "videoFileExpireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeLessThanOrEqualTo(Date value) {
+            addCriterion("video_file_expire_time <=", value, "videoFileExpireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeIn(List<Date> values) {
+            addCriterion("video_file_expire_time in", values, "videoFileExpireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeNotIn(List<Date> values) {
+            addCriterion("video_file_expire_time not in", values, "videoFileExpireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeBetween(Date value1, Date value2) {
+            addCriterion("video_file_expire_time between", value1, value2, "videoFileExpireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoFileExpireTimeNotBetween(Date value1, Date value2) {
+            addCriterion("video_file_expire_time not between", value1, value2, "videoFileExpireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountIsNull() {
+            addCriterion("retry_count is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountIsNotNull() {
+            addCriterion("retry_count is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountEqualTo(Integer value) {
+            addCriterion("retry_count =", value, "retryCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountNotEqualTo(Integer value) {
+            addCriterion("retry_count <>", value, "retryCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountGreaterThan(Integer value) {
+            addCriterion("retry_count >", value, "retryCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountGreaterThanOrEqualTo(Integer value) {
+            addCriterion("retry_count >=", value, "retryCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountLessThan(Integer value) {
+            addCriterion("retry_count <", value, "retryCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountLessThanOrEqualTo(Integer value) {
+            addCriterion("retry_count <=", value, "retryCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountIn(List<Integer> values) {
+            addCriterion("retry_count in", values, "retryCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountNotIn(List<Integer> values) {
+            addCriterion("retry_count not in", values, "retryCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountBetween(Integer value1, Integer value2) {
+            addCriterion("retry_count between", value1, value2, "retryCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRetryCountNotBetween(Integer value1, Integer value2) {
+            addCriterion("retry_count not between", value1, value2, "retryCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("`status` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("`status` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(Integer value) {
+            addCriterion("`status` =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(Integer value) {
+            addCriterion("`status` <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(Integer value) {
+            addCriterion("`status` >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(Integer value) {
+            addCriterion("`status` >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(Integer value) {
+            addCriterion("`status` <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(Integer value) {
+            addCriterion("`status` <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<Integer> values) {
+            addCriterion("`status` in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<Integer> values) {
+            addCriterion("`status` not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(Integer value1, Integer value2) {
+            addCriterion("`status` between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(Integer value1, Integer value2) {
+            addCriterion("`status` not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 14 - 0
src/main/java/com/tzld/piaoquan/featurestools/model/vo/VideoUnderstandParam.java

@@ -0,0 +1,14 @@
+package com.tzld.piaoquan.featurestools.model.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class VideoUnderstandParam {
+
+    private String url;
+
+    private String fileName;
+
+}

+ 19 - 0
src/main/java/com/tzld/piaoquan/featurestools/model/vo/VideoUnderstandResult.java

@@ -0,0 +1,19 @@
+package com.tzld.piaoquan.featurestools.model.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class VideoUnderstandResult {
+
+    private String error;
+
+    private String fileName;
+
+    private String fileStatus;
+
+    private String expireTime;
+
+    private String understanderText;
+}

+ 9 - 0
src/main/java/com/tzld/piaoquan/featurestools/service/VideoUnderstandService.java

@@ -0,0 +1,9 @@
+package com.tzld.piaoquan.featurestools.service;
+
+import com.tzld.piaoquan.featurestools.model.vo.VideoUnderstandParam;
+import com.tzld.piaoquan.featurestools.model.vo.VideoUnderstandResult;
+
+public interface VideoUnderstandService {
+
+    VideoUnderstandResult getVideoUnderstandResult(VideoUnderstandParam videoUnderstandParam);
+}

+ 32 - 0
src/main/java/com/tzld/piaoquan/featurestools/service/impl/VideoUnderstandServiceImpl.java

@@ -0,0 +1,32 @@
+package com.tzld.piaoquan.featurestools.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.piaoquan.featurestools.model.vo.VideoUnderstandParam;
+import com.tzld.piaoquan.featurestools.model.vo.VideoUnderstandResult;
+import com.tzld.piaoquan.featurestools.service.VideoUnderstandService;
+import com.tzld.piaoquan.featurestools.util.HttpClientUtil;
+import com.tzld.piaoquan.featurestools.util.HttpPoolClientUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class VideoUnderstandServiceImpl implements VideoUnderstandService {
+
+    private static final HttpPoolClientUtil httpPoolClientUtil = HttpClientUtil.create(5000, 200000, 10, 20, 3, 3000);
+
+
+    @Override
+    public VideoUnderstandResult getVideoUnderstandResult(VideoUnderstandParam videoUnderstandParam) {
+        try {
+            String url = "http://47.84.45.73:5005/understander/video";
+            String post = httpPoolClientUtil.post(url, JSONObject.toJSONString(videoUnderstandParam));
+            JSONObject jsonObject = JSON.parseObject(post);
+            return jsonObject.toJavaObject(VideoUnderstandResult.class);
+        } catch (Exception e) {
+            log.error("getVideoUnderstandResult error", e);
+        }
+        return null;
+    }
+}

+ 33 - 0
src/main/java/com/tzld/piaoquan/featurestools/util/DateUtil.java

@@ -0,0 +1,33 @@
+package com.tzld.piaoquan.featurestools.util;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.time.Instant;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+import java.util.Locale;
+
+@Slf4j
+public class DateUtil {
+
+    // 调整日期格式模式,添加星期缩写和逗号
+    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);
+
+    public static Date parseDate(String dateString) {
+        try {
+            ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateString, FORMATTER);
+            Instant instant = zonedDateTime.toInstant();
+            return Date.from(instant);
+        } catch (Exception e) {
+            log.error("parseDate error", e);
+        }
+        return null;
+    }
+
+    public static void main(String[] args) {
+        String dateString = "Thu, 08 May 2025 06:34:46 GMT";
+        Date date = parseDate(dateString);
+        System.out.println(date);
+    }
+}

+ 90 - 0
src/main/java/com/tzld/piaoquan/featurestools/util/HttpClientUtil.java

@@ -0,0 +1,90 @@
+package com.tzld.piaoquan.featurestools.util;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * http util
+ *
+ * @author xueyiming
+ */
+public class HttpClientUtil {
+
+    private static final String DEFAULT_SHARED_KEY = "DEFAULT_SHARED_KEY";
+
+    /**
+     * 链接建立的超时时间 ms
+     */
+    private static final int DEFAULT_CONNECTION_TIMEOUT = 3000;
+    /**
+     * 响应超时时间 ms
+     */
+    private static final int DEFAULT_SOCKET_TIMEOUT = 3000;
+
+    /**
+     * 每个路由的最大连接数
+     */
+    private static final int DEFAULT_DEFAULT_MAX_PER_ROUTE = 50;
+
+    /**
+     * 最大连接数
+     */
+    private static final int DEFAULT_DEFAULT_MAX_TOTAL = 200;
+
+    /**
+     * 重试次数,默认0
+     */
+    private static final int DEFAULT_RETRY_COUNT = 5;
+
+    /**
+     * 从connection pool中获得一个connection的超时时间 ms
+     */
+    private static final int DEFAULT_CONNECTION_WAIT_TIMEOUT = 300;
+
+    private static final Map<String, HttpPoolClientUtil> CREATED_HTTP_CLIENTS = new HashMap<>();
+
+    private static final Lock LOCK = new ReentrantLock();
+
+    private HttpClientUtil() {
+    }
+
+    public static HttpPoolClientUtil useDefault() {
+        return createCached(DEFAULT_SHARED_KEY);
+    }
+
+
+    public static HttpPoolClientUtil createCached(String cachedKey) {
+        HttpPoolClientUtil httpPoolClientUtil = CREATED_HTTP_CLIENTS.get(cachedKey);
+        if (httpPoolClientUtil != null) {
+            return httpPoolClientUtil;
+        }
+        LOCK.lock();
+        try {
+            httpPoolClientUtil = CREATED_HTTP_CLIENTS.get(cachedKey);
+            if (httpPoolClientUtil == null) {
+                httpPoolClientUtil = create(DEFAULT_CONNECTION_TIMEOUT, DEFAULT_SOCKET_TIMEOUT, DEFAULT_DEFAULT_MAX_PER_ROUTE, DEFAULT_DEFAULT_MAX_TOTAL, DEFAULT_RETRY_COUNT, DEFAULT_CONNECTION_WAIT_TIMEOUT);
+                CREATED_HTTP_CLIENTS.put(cachedKey, httpPoolClientUtil);
+            }
+        } finally {
+            LOCK.unlock();
+        }
+        return httpPoolClientUtil;
+    }
+
+    /**
+     * 创建httpclient
+     *
+     * @param connectTimeout        连接超时时间 ms
+     * @param socketTimeout         读超时时间(等待数据超时时间)ms
+     * @param maxPerRoute           每个路由的最大连接数
+     * @param maxTotal              最大连接数
+     * @param retryCount            重试次数
+     * @param connectionWaitTimeout 连接等待超市时间 ms
+     * @return httpclient instance
+     */
+    public static HttpPoolClientUtil create(int connectTimeout, int socketTimeout, int maxPerRoute, int maxTotal, int retryCount, int connectionWaitTimeout) {
+        return HttpPoolClientUtil.create(connectTimeout, socketTimeout, maxPerRoute, maxTotal, retryCount, connectionWaitTimeout);
+    }
+}

+ 193 - 0
src/main/java/com/tzld/piaoquan/featurestools/util/HttpPoolClientUtil.java

@@ -0,0 +1,193 @@
+package com.tzld.piaoquan.featurestools.util;
+
+import com.google.common.collect.Lists;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpRequestInterceptor;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.*;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.HttpClientConnectionManager;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.ssl.SSLContexts;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+
+import javax.net.ssl.SSLContext;
+import java.io.File;
+import java.io.IOException;
+import java.net.SocketTimeoutException;
+import java.nio.charset.StandardCharsets;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.util.List;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * http client
+ *
+ * @author xueyiming
+ */
+public class HttpPoolClientUtil {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(HttpPoolClientUtil.class);
+
+    private static final ScheduledExecutorService SCHEDULED_CLOSED_EXECUTOR = new ScheduledThreadPoolExecutor(1,
+            new BasicThreadFactory.Builder().namingPattern("http conn-closed-thread-%s").priority(Thread.NORM_PRIORITY).daemon(false).build(), (r, e) -> LOGGER.error(" monitor push reject task error={}", e.toString()));
+
+    private static final List<HttpClientConnectionManager> HTTP_CLIENT_CONNECTION_MANAGERS = Lists.newArrayList();
+
+    static {
+        SCHEDULED_CLOSED_EXECUTOR.schedule(() -> HTTP_CLIENT_CONNECTION_MANAGERS.forEach(HttpClientConnectionManager::closeExpiredConnections), 5, TimeUnit.SECONDS);
+    }
+
+    private CloseableHttpClient closeableHttpClient;
+
+    private HttpPoolClientUtil(CloseableHttpClient closeableHttpClient) {
+        this.closeableHttpClient = closeableHttpClient;
+    }
+
+    private static HttpRequestInterceptor getInterceptor() {
+        HttpRequestInterceptor requestInterceptor = (request, context) -> {
+            try {
+                String missSpanId = MDC.get("missSpanId");
+                String missTraceId = MDC.get("request-id");
+                if (missTraceId != null && !"".equals(missTraceId.trim())) {
+                    request.setHeader("request-id", missTraceId);
+                }
+                if (missSpanId != null && !"".equals(missSpanId.trim())) {
+                    request.setHeader("missSpanId", missSpanId);
+                }
+            } catch (Exception e) {
+                LOGGER.error(e.getMessage(), e);
+            }
+        };
+        return requestInterceptor;
+    }
+
+
+    public String get(String url) throws IOException {
+        HttpGet httpGet = new HttpGet(url);
+        return request(httpGet);
+    }
+
+    public String post(String url) throws IOException {
+        HttpPost httpPost = new HttpPost(url);
+        return request(httpPost);
+    }
+
+
+    public String post(String url, String json) throws IOException {
+        HttpPost httpPost = new HttpPost(url);
+        if (StringUtils.isBlank(json)) {
+            return request(httpPost);
+        }
+        StringEntity entity = new StringEntity(json, StandardCharsets.UTF_8);
+        entity.setContentEncoding("UTF-8");
+        entity.setContentType("application/json");
+        httpPost.setEntity(entity);
+        return request(httpPost);
+    }
+
+    public String post(String url, File file) throws IOException {
+        HttpPost uploadFile = new HttpPost(url);
+        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+        builder.addBinaryBody("media", file);
+        uploadFile.setEntity(builder.build());
+        return request(uploadFile);
+    }
+
+    public String request(HttpRequestBase request) throws IOException {
+
+        if (LOGGER.isDebugEnabled()) {
+            String path = request.getURI().toString();
+            LOGGER.debug("http request url = {} ", path);
+        }
+        HttpEntity entity = null;
+        CloseableHttpResponse response = request((HttpUriRequest) request);
+        if (response == null) {
+            throw new RuntimeException("call api exception no response");
+        }
+        entity = response.getEntity();
+        String content = null;
+        if (entity != null) {
+            content = EntityUtils.toString(entity, "UTF-8");
+        }
+        int httpStatus = response.getStatusLine().getStatusCode();
+        if (httpStatus == HttpStatus.SC_OK) {
+            return content;
+        }
+        String path = request.getURI().toString();
+        LOGGER.error("http call api {} fail response status {} content {}", path, httpStatus, content);
+//            throw new HttpServiceException(httpStatus, content);
+        return null;
+    }
+
+
+    public CloseableHttpResponse request(HttpUriRequest request) {
+        try {
+            CloseableHttpResponse execute = closeableHttpClient.execute(request);
+            return execute;
+        } catch (Exception e) {
+            String path = request.getURI().toString();
+            if (e instanceof SocketTimeoutException) {
+                LOGGER.error(String.format("http timeout request url = %s .", path));
+//                throw new TimeoutException();
+            } else {
+            }
+            throw new RuntimeException(String.format("http exception request url = %s ", path), e);
+        }
+    }
+
+    /**
+     * @param connectTimeout 连接超时时间 ms
+     * @param socketTimeout  读超时时间(等待数据超时时间)ms
+     * @param maxPerRoute    每个路由的最大连接数
+     * @param maxTotal       最大连接数
+     * @param retryCount     重试次数
+     * @return httpclient instance
+     */
+    public static HttpPoolClientUtil create(int connectTimeout, int socketTimeout, int maxPerRoute, int maxTotal, int retryCount, int connectionWaitTimeout) {
+        try {
+            RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connectTimeout).setSocketTimeout(socketTimeout).setConnectionRequestTimeout(connectionWaitTimeout).build();
+            CloseableHttpClient client = HttpClientBuilder.create()
+                    .setDefaultRequestConfig(requestConfig)
+                    .setConnectionManager(createConnectionManager(maxPerRoute, maxTotal))
+                    .setRetryHandler(new DefaultHttpRequestRetryHandler(retryCount, false)).addInterceptorFirst(getInterceptor()).build();
+            return new HttpPoolClientUtil(client);
+        } catch (Throwable e) {
+            LOGGER.error("create HttpPoolClient exception", e);
+            throw new RuntimeException("create HttpPoolClient exception");
+        }
+    }
+
+    private static PoolingHttpClientConnectionManager createConnectionManager(int maxPerRoute, int maxTotal) throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
+        SSLContext sslContext = SSLContexts.custom().loadTrustMaterial((chain, authType) -> true).build();
+        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
+                .register("http", PlainConnectionSocketFactory.getSocketFactory())
+                .register("https", new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE)).build();
+        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(registry);
+        cm.setDefaultMaxPerRoute(maxPerRoute);
+        cm.setMaxTotal(maxTotal);
+        HTTP_CLIENT_CONNECTION_MANAGERS.add(cm);
+        return cm;
+    }
+
+}

+ 108 - 0
src/main/java/com/tzld/piaoquan/featurestools/util/page/Page.java

@@ -0,0 +1,108 @@
+package com.tzld.piaoquan.featurestools.util.page;
+
+import java.util.List;
+
+public class Page<T> {
+
+    public static final String DEFAULT_PAGE_SIZE = "20";
+    public static final String DEFAULT_CURRENT_PAGE = "1";
+
+    private int currentPage = Integer.valueOf(DEFAULT_CURRENT_PAGE);
+    private int totalSize;
+    private int pageSize = Integer.valueOf(DEFAULT_PAGE_SIZE);
+
+    private List<T> objs;
+
+    private T obj;
+
+    public Page() {
+    }
+
+    public Page(int currentPage) {
+        this.currentPage = currentPage;
+    }
+
+    public Page(int currentPage, int pageSize) {
+        setCurrentPage(currentPage);
+        setPageSize(pageSize);
+    }
+
+    public int getNextPage() {
+        return currentPage == getTotalPage() ? currentPage : currentPage + 1;
+    }
+
+    public int getPrePage() {
+        return currentPage > 1 ? currentPage - 1 : 1;
+    }
+
+    public int getOffset() {
+        return getCurPageFirstRecNum() - 1;
+    }
+
+    public int getCurPageFirstRecNum() {
+        return (getCurrentPage() - 1) * pageSize + 1;
+    }
+
+    public int getCurPageLastRecNum() {
+        return getCurrentPage() * pageSize;
+    }
+
+    public int getTotalPage() {
+        int t = totalSize % pageSize > 0 ? totalSize / pageSize + 1 : totalSize / pageSize;
+        if (t <= 0) {
+            t = 1;
+        }
+        return t;
+    }
+
+    public void setObjs(List<T> objs) {
+        this.objs = objs;
+    }
+
+    public List<T> getObjs() {
+        return objs;
+    }
+
+    public int getCurrentPage() {
+        return currentPage;
+    }
+
+    public void setCurrentPage(int currentPage) {
+        this.currentPage = currentPage;
+    }
+
+    public int getTotalSize() {
+        return totalSize;
+    }
+
+    public void setTotalSize(int totalSize) {
+        this.totalSize = totalSize;
+    }
+
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(int pageSize) {
+        if (pageSize > 0) {
+            this.pageSize = pageSize;
+        }
+    }
+
+    public boolean containData() {
+        return getTotalSize() > 0;
+    }
+    @Override
+    public String toString() {
+        return "Page [currentPage=" + getCurrentPage() + ", totalSize=" + getTotalSize() + ", pageSize=" + getPageSize()
+                + "]";
+    }
+
+    public T getObj() {
+        return obj;
+    }
+
+    public void setObj(T obj) {
+        this.obj = obj;
+    }
+}

+ 11 - 0
src/main/resources/application-prod.properties

@@ -0,0 +1,11 @@
+server.port=8080
+
+spring.datasource.username=wx2023_ad
+spring.datasource.password=wx2023_adP@assword1234
+spring.datasource.url=jdbc:mysql://rm-bp12k5fuh5zyx31d2.mysql.rds.aliyuncs.com:3306/adplatform?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true
+
+
+xxl.job.admin.addresses=http://xxl-job-internal.piaoquantv.com/xxl-job-admin
+
+
+logging.file.path=${datalog}/weblog/${spring.application.name}

+ 23 - 0
src/main/resources/application.properties

@@ -0,0 +1,23 @@
+spring.application.name=features-tools
+spring.profiles.active=prod
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.initialSize=5
+spring.datasource.maxActive=20
+spring.datasource.maxWait=60000
+spring.datasource.timeBetweenEvictionRunsMillis=60000
+spring.datasource.minEvictableIdleTimeMillis=300000
+spring.datasource.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.testWhileIdle=true
+spring.datasource.testOnBorrow=false
+spring.datasource.testOnReturn=false
+spring.datasource.poolPreparedStatements=true
+
+datalog=/datalog
+xxl.job.accessToken=
+xxl.job.executor.appname=${spring.application.name}
+xxl.job.executor.address=
+xxl.job.executor.ip=
+xxl.job.executor.port=9999
+xxl.job.executor.logpath=${datalog}/xxl-job/
+xxl.job.executor.logretentiondays=30

+ 580 - 0
src/main/resources/mapper/CreativeMapper.xml

@@ -0,0 +1,580 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tzld.piaoquan.featurestools.dao.mapper.CreativeMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.piaoquan.featurestools.model.po.Creative">
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="ad_id" jdbcType="BIGINT" property="adId" />
+    <result column="creative_code" jdbcType="VARCHAR" property="creativeCode" />
+    <result column="creative_pattern" jdbcType="INTEGER" property="creativePattern" />
+    <result column="position_id" jdbcType="INTEGER" property="positionId" />
+    <result column="creative_title" jdbcType="VARCHAR" property="creativeTitle" />
+    <result column="copywriting" jdbcType="VARCHAR" property="copywriting" />
+    <result column="material_type" jdbcType="VARCHAR" property="materialType" />
+    <result column="material_address" jdbcType="VARCHAR" property="materialAddress" />
+    <result column="material_md5" jdbcType="VARCHAR" property="materialMd5" />
+    <result column="material_address_transcode_job_id" jdbcType="BIGINT" property="materialAddressTranscodeJobId" />
+    <result column="creative_logo_address" jdbcType="VARCHAR" property="creativeLogoAddress" />
+    <result column="click_button_text" jdbcType="VARCHAR" property="clickButtonText" />
+    <result column="click_button_color" jdbcType="VARCHAR" property="clickButtonColor" />
+    <result column="click_button_effects" jdbcType="INTEGER" property="clickButtonEffects" />
+    <result column="landing_page_type" jdbcType="INTEGER" property="landingPageType" />
+    <result column="landing_page_appId" jdbcType="VARCHAR" property="landingPageAppid" />
+    <result column="landing_page_address" jdbcType="VARCHAR" property="landingPageAddress" />
+    <result column="status" jdbcType="VARCHAR" property="status" />
+    <result column="check_reason" jdbcType="VARCHAR" property="checkReason" />
+    <result column="weight" jdbcType="INTEGER" property="weight" />
+    <result column="is_delete" jdbcType="INTEGER" property="isDelete" />
+    <result column="create_user" jdbcType="VARCHAR" property="createUser" />
+    <result column="update_user" jdbcType="VARCHAR" property="updateUser" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="creative_name" jdbcType="VARCHAR" property="creativeName" />
+    <result column="url_check_status" jdbcType="INTEGER" property="urlCheckStatus" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, ad_id, creative_code, creative_pattern, position_id, creative_title, copywriting, 
+    material_type, material_address, material_md5, material_address_transcode_job_id, 
+    creative_logo_address, click_button_text, click_button_color, click_button_effects, 
+    landing_page_type, landing_page_appId, landing_page_address, `status`, check_reason, 
+    weight, is_delete, create_user, update_user, create_time, update_time, creative_name, 
+    url_check_status
+  </sql>
+  <select id="selectByExample" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from creative
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="page != null">
+      limit #{page.offset} , #{page.pageSize}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from creative
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    delete from creative
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeExample">
+    delete from creative
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.piaoquan.featurestools.model.po.Creative">
+    insert into creative (id, ad_id, creative_code, 
+      creative_pattern, position_id, creative_title, 
+      copywriting, material_type, material_address, 
+      material_md5, material_address_transcode_job_id, 
+      creative_logo_address, click_button_text, click_button_color, 
+      click_button_effects, landing_page_type, landing_page_appId, 
+      landing_page_address, `status`, check_reason, 
+      weight, is_delete, create_user, 
+      update_user, create_time, update_time, 
+      creative_name, url_check_status)
+    values (#{id,jdbcType=BIGINT}, #{adId,jdbcType=BIGINT}, #{creativeCode,jdbcType=VARCHAR}, 
+      #{creativePattern,jdbcType=INTEGER}, #{positionId,jdbcType=INTEGER}, #{creativeTitle,jdbcType=VARCHAR}, 
+      #{copywriting,jdbcType=VARCHAR}, #{materialType,jdbcType=VARCHAR}, #{materialAddress,jdbcType=VARCHAR}, 
+      #{materialMd5,jdbcType=VARCHAR}, #{materialAddressTranscodeJobId,jdbcType=BIGINT}, 
+      #{creativeLogoAddress,jdbcType=VARCHAR}, #{clickButtonText,jdbcType=VARCHAR}, #{clickButtonColor,jdbcType=VARCHAR}, 
+      #{clickButtonEffects,jdbcType=INTEGER}, #{landingPageType,jdbcType=INTEGER}, #{landingPageAppid,jdbcType=VARCHAR}, 
+      #{landingPageAddress,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, #{checkReason,jdbcType=VARCHAR}, 
+      #{weight,jdbcType=INTEGER}, #{isDelete,jdbcType=INTEGER}, #{createUser,jdbcType=VARCHAR}, 
+      #{updateUser,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, 
+      #{creativeName,jdbcType=VARCHAR}, #{urlCheckStatus,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.piaoquan.featurestools.model.po.Creative">
+    insert into creative
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="adId != null">
+        ad_id,
+      </if>
+      <if test="creativeCode != null">
+        creative_code,
+      </if>
+      <if test="creativePattern != null">
+        creative_pattern,
+      </if>
+      <if test="positionId != null">
+        position_id,
+      </if>
+      <if test="creativeTitle != null">
+        creative_title,
+      </if>
+      <if test="copywriting != null">
+        copywriting,
+      </if>
+      <if test="materialType != null">
+        material_type,
+      </if>
+      <if test="materialAddress != null">
+        material_address,
+      </if>
+      <if test="materialMd5 != null">
+        material_md5,
+      </if>
+      <if test="materialAddressTranscodeJobId != null">
+        material_address_transcode_job_id,
+      </if>
+      <if test="creativeLogoAddress != null">
+        creative_logo_address,
+      </if>
+      <if test="clickButtonText != null">
+        click_button_text,
+      </if>
+      <if test="clickButtonColor != null">
+        click_button_color,
+      </if>
+      <if test="clickButtonEffects != null">
+        click_button_effects,
+      </if>
+      <if test="landingPageType != null">
+        landing_page_type,
+      </if>
+      <if test="landingPageAppid != null">
+        landing_page_appId,
+      </if>
+      <if test="landingPageAddress != null">
+        landing_page_address,
+      </if>
+      <if test="status != null">
+        `status`,
+      </if>
+      <if test="checkReason != null">
+        check_reason,
+      </if>
+      <if test="weight != null">
+        weight,
+      </if>
+      <if test="isDelete != null">
+        is_delete,
+      </if>
+      <if test="createUser != null">
+        create_user,
+      </if>
+      <if test="updateUser != null">
+        update_user,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="updateTime != null">
+        update_time,
+      </if>
+      <if test="creativeName != null">
+        creative_name,
+      </if>
+      <if test="urlCheckStatus != null">
+        url_check_status,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="adId != null">
+        #{adId,jdbcType=BIGINT},
+      </if>
+      <if test="creativeCode != null">
+        #{creativeCode,jdbcType=VARCHAR},
+      </if>
+      <if test="creativePattern != null">
+        #{creativePattern,jdbcType=INTEGER},
+      </if>
+      <if test="positionId != null">
+        #{positionId,jdbcType=INTEGER},
+      </if>
+      <if test="creativeTitle != null">
+        #{creativeTitle,jdbcType=VARCHAR},
+      </if>
+      <if test="copywriting != null">
+        #{copywriting,jdbcType=VARCHAR},
+      </if>
+      <if test="materialType != null">
+        #{materialType,jdbcType=VARCHAR},
+      </if>
+      <if test="materialAddress != null">
+        #{materialAddress,jdbcType=VARCHAR},
+      </if>
+      <if test="materialMd5 != null">
+        #{materialMd5,jdbcType=VARCHAR},
+      </if>
+      <if test="materialAddressTranscodeJobId != null">
+        #{materialAddressTranscodeJobId,jdbcType=BIGINT},
+      </if>
+      <if test="creativeLogoAddress != null">
+        #{creativeLogoAddress,jdbcType=VARCHAR},
+      </if>
+      <if test="clickButtonText != null">
+        #{clickButtonText,jdbcType=VARCHAR},
+      </if>
+      <if test="clickButtonColor != null">
+        #{clickButtonColor,jdbcType=VARCHAR},
+      </if>
+      <if test="clickButtonEffects != null">
+        #{clickButtonEffects,jdbcType=INTEGER},
+      </if>
+      <if test="landingPageType != null">
+        #{landingPageType,jdbcType=INTEGER},
+      </if>
+      <if test="landingPageAppid != null">
+        #{landingPageAppid,jdbcType=VARCHAR},
+      </if>
+      <if test="landingPageAddress != null">
+        #{landingPageAddress,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null">
+        #{status,jdbcType=VARCHAR},
+      </if>
+      <if test="checkReason != null">
+        #{checkReason,jdbcType=VARCHAR},
+      </if>
+      <if test="weight != null">
+        #{weight,jdbcType=INTEGER},
+      </if>
+      <if test="isDelete != null">
+        #{isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="createUser != null">
+        #{createUser,jdbcType=VARCHAR},
+      </if>
+      <if test="updateUser != null">
+        #{updateUser,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="creativeName != null">
+        #{creativeName,jdbcType=VARCHAR},
+      </if>
+      <if test="urlCheckStatus != null">
+        #{urlCheckStatus,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeExample" resultType="java.lang.Long">
+    select count(*) from creative
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update creative
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=BIGINT},
+      </if>
+      <if test="record.adId != null">
+        ad_id = #{record.adId,jdbcType=BIGINT},
+      </if>
+      <if test="record.creativeCode != null">
+        creative_code = #{record.creativeCode,jdbcType=VARCHAR},
+      </if>
+      <if test="record.creativePattern != null">
+        creative_pattern = #{record.creativePattern,jdbcType=INTEGER},
+      </if>
+      <if test="record.positionId != null">
+        position_id = #{record.positionId,jdbcType=INTEGER},
+      </if>
+      <if test="record.creativeTitle != null">
+        creative_title = #{record.creativeTitle,jdbcType=VARCHAR},
+      </if>
+      <if test="record.copywriting != null">
+        copywriting = #{record.copywriting,jdbcType=VARCHAR},
+      </if>
+      <if test="record.materialType != null">
+        material_type = #{record.materialType,jdbcType=VARCHAR},
+      </if>
+      <if test="record.materialAddress != null">
+        material_address = #{record.materialAddress,jdbcType=VARCHAR},
+      </if>
+      <if test="record.materialMd5 != null">
+        material_md5 = #{record.materialMd5,jdbcType=VARCHAR},
+      </if>
+      <if test="record.materialAddressTranscodeJobId != null">
+        material_address_transcode_job_id = #{record.materialAddressTranscodeJobId,jdbcType=BIGINT},
+      </if>
+      <if test="record.creativeLogoAddress != null">
+        creative_logo_address = #{record.creativeLogoAddress,jdbcType=VARCHAR},
+      </if>
+      <if test="record.clickButtonText != null">
+        click_button_text = #{record.clickButtonText,jdbcType=VARCHAR},
+      </if>
+      <if test="record.clickButtonColor != null">
+        click_button_color = #{record.clickButtonColor,jdbcType=VARCHAR},
+      </if>
+      <if test="record.clickButtonEffects != null">
+        click_button_effects = #{record.clickButtonEffects,jdbcType=INTEGER},
+      </if>
+      <if test="record.landingPageType != null">
+        landing_page_type = #{record.landingPageType,jdbcType=INTEGER},
+      </if>
+      <if test="record.landingPageAppid != null">
+        landing_page_appId = #{record.landingPageAppid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.landingPageAddress != null">
+        landing_page_address = #{record.landingPageAddress,jdbcType=VARCHAR},
+      </if>
+      <if test="record.status != null">
+        `status` = #{record.status,jdbcType=VARCHAR},
+      </if>
+      <if test="record.checkReason != null">
+        check_reason = #{record.checkReason,jdbcType=VARCHAR},
+      </if>
+      <if test="record.weight != null">
+        weight = #{record.weight,jdbcType=INTEGER},
+      </if>
+      <if test="record.isDelete != null">
+        is_delete = #{record.isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="record.createUser != null">
+        create_user = #{record.createUser,jdbcType=VARCHAR},
+      </if>
+      <if test="record.updateUser != null">
+        update_user = #{record.updateUser,jdbcType=VARCHAR},
+      </if>
+      <if test="record.createTime != null">
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.updateTime != null">
+        update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.creativeName != null">
+        creative_name = #{record.creativeName,jdbcType=VARCHAR},
+      </if>
+      <if test="record.urlCheckStatus != null">
+        url_check_status = #{record.urlCheckStatus,jdbcType=INTEGER},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update creative
+    set id = #{record.id,jdbcType=BIGINT},
+      ad_id = #{record.adId,jdbcType=BIGINT},
+      creative_code = #{record.creativeCode,jdbcType=VARCHAR},
+      creative_pattern = #{record.creativePattern,jdbcType=INTEGER},
+      position_id = #{record.positionId,jdbcType=INTEGER},
+      creative_title = #{record.creativeTitle,jdbcType=VARCHAR},
+      copywriting = #{record.copywriting,jdbcType=VARCHAR},
+      material_type = #{record.materialType,jdbcType=VARCHAR},
+      material_address = #{record.materialAddress,jdbcType=VARCHAR},
+      material_md5 = #{record.materialMd5,jdbcType=VARCHAR},
+      material_address_transcode_job_id = #{record.materialAddressTranscodeJobId,jdbcType=BIGINT},
+      creative_logo_address = #{record.creativeLogoAddress,jdbcType=VARCHAR},
+      click_button_text = #{record.clickButtonText,jdbcType=VARCHAR},
+      click_button_color = #{record.clickButtonColor,jdbcType=VARCHAR},
+      click_button_effects = #{record.clickButtonEffects,jdbcType=INTEGER},
+      landing_page_type = #{record.landingPageType,jdbcType=INTEGER},
+      landing_page_appId = #{record.landingPageAppid,jdbcType=VARCHAR},
+      landing_page_address = #{record.landingPageAddress,jdbcType=VARCHAR},
+      `status` = #{record.status,jdbcType=VARCHAR},
+      check_reason = #{record.checkReason,jdbcType=VARCHAR},
+      weight = #{record.weight,jdbcType=INTEGER},
+      is_delete = #{record.isDelete,jdbcType=INTEGER},
+      create_user = #{record.createUser,jdbcType=VARCHAR},
+      update_user = #{record.updateUser,jdbcType=VARCHAR},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      creative_name = #{record.creativeName,jdbcType=VARCHAR},
+      url_check_status = #{record.urlCheckStatus,jdbcType=INTEGER}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.tzld.piaoquan.featurestools.model.po.Creative">
+    update creative
+    <set>
+      <if test="adId != null">
+        ad_id = #{adId,jdbcType=BIGINT},
+      </if>
+      <if test="creativeCode != null">
+        creative_code = #{creativeCode,jdbcType=VARCHAR},
+      </if>
+      <if test="creativePattern != null">
+        creative_pattern = #{creativePattern,jdbcType=INTEGER},
+      </if>
+      <if test="positionId != null">
+        position_id = #{positionId,jdbcType=INTEGER},
+      </if>
+      <if test="creativeTitle != null">
+        creative_title = #{creativeTitle,jdbcType=VARCHAR},
+      </if>
+      <if test="copywriting != null">
+        copywriting = #{copywriting,jdbcType=VARCHAR},
+      </if>
+      <if test="materialType != null">
+        material_type = #{materialType,jdbcType=VARCHAR},
+      </if>
+      <if test="materialAddress != null">
+        material_address = #{materialAddress,jdbcType=VARCHAR},
+      </if>
+      <if test="materialMd5 != null">
+        material_md5 = #{materialMd5,jdbcType=VARCHAR},
+      </if>
+      <if test="materialAddressTranscodeJobId != null">
+        material_address_transcode_job_id = #{materialAddressTranscodeJobId,jdbcType=BIGINT},
+      </if>
+      <if test="creativeLogoAddress != null">
+        creative_logo_address = #{creativeLogoAddress,jdbcType=VARCHAR},
+      </if>
+      <if test="clickButtonText != null">
+        click_button_text = #{clickButtonText,jdbcType=VARCHAR},
+      </if>
+      <if test="clickButtonColor != null">
+        click_button_color = #{clickButtonColor,jdbcType=VARCHAR},
+      </if>
+      <if test="clickButtonEffects != null">
+        click_button_effects = #{clickButtonEffects,jdbcType=INTEGER},
+      </if>
+      <if test="landingPageType != null">
+        landing_page_type = #{landingPageType,jdbcType=INTEGER},
+      </if>
+      <if test="landingPageAppid != null">
+        landing_page_appId = #{landingPageAppid,jdbcType=VARCHAR},
+      </if>
+      <if test="landingPageAddress != null">
+        landing_page_address = #{landingPageAddress,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null">
+        `status` = #{status,jdbcType=VARCHAR},
+      </if>
+      <if test="checkReason != null">
+        check_reason = #{checkReason,jdbcType=VARCHAR},
+      </if>
+      <if test="weight != null">
+        weight = #{weight,jdbcType=INTEGER},
+      </if>
+      <if test="isDelete != null">
+        is_delete = #{isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="createUser != null">
+        create_user = #{createUser,jdbcType=VARCHAR},
+      </if>
+      <if test="updateUser != null">
+        update_user = #{updateUser,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        update_time = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="creativeName != null">
+        creative_name = #{creativeName,jdbcType=VARCHAR},
+      </if>
+      <if test="urlCheckStatus != null">
+        url_check_status = #{urlCheckStatus,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.piaoquan.featurestools.model.po.Creative">
+    update creative
+    set ad_id = #{adId,jdbcType=BIGINT},
+      creative_code = #{creativeCode,jdbcType=VARCHAR},
+      creative_pattern = #{creativePattern,jdbcType=INTEGER},
+      position_id = #{positionId,jdbcType=INTEGER},
+      creative_title = #{creativeTitle,jdbcType=VARCHAR},
+      copywriting = #{copywriting,jdbcType=VARCHAR},
+      material_type = #{materialType,jdbcType=VARCHAR},
+      material_address = #{materialAddress,jdbcType=VARCHAR},
+      material_md5 = #{materialMd5,jdbcType=VARCHAR},
+      material_address_transcode_job_id = #{materialAddressTranscodeJobId,jdbcType=BIGINT},
+      creative_logo_address = #{creativeLogoAddress,jdbcType=VARCHAR},
+      click_button_text = #{clickButtonText,jdbcType=VARCHAR},
+      click_button_color = #{clickButtonColor,jdbcType=VARCHAR},
+      click_button_effects = #{clickButtonEffects,jdbcType=INTEGER},
+      landing_page_type = #{landingPageType,jdbcType=INTEGER},
+      landing_page_appId = #{landingPageAppid,jdbcType=VARCHAR},
+      landing_page_address = #{landingPageAddress,jdbcType=VARCHAR},
+      `status` = #{status,jdbcType=VARCHAR},
+      check_reason = #{checkReason,jdbcType=VARCHAR},
+      weight = #{weight,jdbcType=INTEGER},
+      is_delete = #{isDelete,jdbcType=INTEGER},
+      create_user = #{createUser,jdbcType=VARCHAR},
+      update_user = #{updateUser,jdbcType=VARCHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP},
+      creative_name = #{creativeName,jdbcType=VARCHAR},
+      url_check_status = #{urlCheckStatus,jdbcType=INTEGER}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>

+ 364 - 0
src/main/resources/mapper/CreativeVideoUnderstanderMapper.xml

@@ -0,0 +1,364 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tzld.piaoquan.featurestools.dao.mapper.CreativeVideoUnderstanderMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstander">
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="creative_id" jdbcType="BIGINT" property="creativeId" />
+    <result column="video_url" jdbcType="VARCHAR" property="videoUrl" />
+    <result column="video_file_name" jdbcType="VARCHAR" property="videoFileName" />
+    <result column="video_file_status" jdbcType="VARCHAR" property="videoFileStatus" />
+    <result column="video_file_expire_time" jdbcType="TIMESTAMP" property="videoFileExpireTime" />
+    <result column="retry_count" jdbcType="INTEGER" property="retryCount" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+  </resultMap>
+  <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstander">
+    <result column="understander_text" jdbcType="LONGVARCHAR" property="understanderText" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, creative_id, video_url, video_file_name, video_file_status, video_file_expire_time, 
+    retry_count, `status`, create_time, update_time
+  </sql>
+  <sql id="Blob_Column_List">
+    understander_text
+  </sql>
+  <select id="selectByExampleWithBLOBs" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstanderExample" resultMap="ResultMapWithBLOBs">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    ,
+    <include refid="Blob_Column_List" />
+    from creative_video_understander
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="page != null">
+      limit #{page.offset} , #{page.pageSize}
+    </if>
+  </select>
+  <select id="selectByExample" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstanderExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from creative_video_understander
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="page != null">
+      limit #{page.offset} , #{page.pageSize}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="ResultMapWithBLOBs">
+    select 
+    <include refid="Base_Column_List" />
+    ,
+    <include refid="Blob_Column_List" />
+    from creative_video_understander
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    delete from creative_video_understander
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstanderExample">
+    delete from creative_video_understander
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstander">
+    insert into creative_video_understander (id, creative_id, video_url, 
+      video_file_name, video_file_status, video_file_expire_time, 
+      retry_count, `status`, create_time, 
+      update_time, understander_text)
+    values (#{id,jdbcType=BIGINT}, #{creativeId,jdbcType=BIGINT}, #{videoUrl,jdbcType=VARCHAR}, 
+      #{videoFileName,jdbcType=VARCHAR}, #{videoFileStatus,jdbcType=VARCHAR}, #{videoFileExpireTime,jdbcType=TIMESTAMP}, 
+      #{retryCount,jdbcType=INTEGER}, #{status,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{updateTime,jdbcType=TIMESTAMP}, #{understanderText,jdbcType=LONGVARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstander">
+    insert into creative_video_understander
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="creativeId != null">
+        creative_id,
+      </if>
+      <if test="videoUrl != null">
+        video_url,
+      </if>
+      <if test="videoFileName != null">
+        video_file_name,
+      </if>
+      <if test="videoFileStatus != null">
+        video_file_status,
+      </if>
+      <if test="videoFileExpireTime != null">
+        video_file_expire_time,
+      </if>
+      <if test="retryCount != null">
+        retry_count,
+      </if>
+      <if test="status != null">
+        `status`,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="updateTime != null">
+        update_time,
+      </if>
+      <if test="understanderText != null">
+        understander_text,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="creativeId != null">
+        #{creativeId,jdbcType=BIGINT},
+      </if>
+      <if test="videoUrl != null">
+        #{videoUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="videoFileName != null">
+        #{videoFileName,jdbcType=VARCHAR},
+      </if>
+      <if test="videoFileStatus != null">
+        #{videoFileStatus,jdbcType=VARCHAR},
+      </if>
+      <if test="videoFileExpireTime != null">
+        #{videoFileExpireTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="retryCount != null">
+        #{retryCount,jdbcType=INTEGER},
+      </if>
+      <if test="status != null">
+        #{status,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="understanderText != null">
+        #{understanderText,jdbcType=LONGVARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstanderExample" resultType="java.lang.Long">
+    select count(*) from creative_video_understander
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update creative_video_understander
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=BIGINT},
+      </if>
+      <if test="record.creativeId != null">
+        creative_id = #{record.creativeId,jdbcType=BIGINT},
+      </if>
+      <if test="record.videoUrl != null">
+        video_url = #{record.videoUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="record.videoFileName != null">
+        video_file_name = #{record.videoFileName,jdbcType=VARCHAR},
+      </if>
+      <if test="record.videoFileStatus != null">
+        video_file_status = #{record.videoFileStatus,jdbcType=VARCHAR},
+      </if>
+      <if test="record.videoFileExpireTime != null">
+        video_file_expire_time = #{record.videoFileExpireTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.retryCount != null">
+        retry_count = #{record.retryCount,jdbcType=INTEGER},
+      </if>
+      <if test="record.status != null">
+        `status` = #{record.status,jdbcType=INTEGER},
+      </if>
+      <if test="record.createTime != null">
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.updateTime != null">
+        update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.understanderText != null">
+        understander_text = #{record.understanderText,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExampleWithBLOBs" parameterType="map">
+    update creative_video_understander
+    set id = #{record.id,jdbcType=BIGINT},
+      creative_id = #{record.creativeId,jdbcType=BIGINT},
+      video_url = #{record.videoUrl,jdbcType=VARCHAR},
+      video_file_name = #{record.videoFileName,jdbcType=VARCHAR},
+      video_file_status = #{record.videoFileStatus,jdbcType=VARCHAR},
+      video_file_expire_time = #{record.videoFileExpireTime,jdbcType=TIMESTAMP},
+      retry_count = #{record.retryCount,jdbcType=INTEGER},
+      `status` = #{record.status,jdbcType=INTEGER},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      understander_text = #{record.understanderText,jdbcType=LONGVARCHAR}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update creative_video_understander
+    set id = #{record.id,jdbcType=BIGINT},
+      creative_id = #{record.creativeId,jdbcType=BIGINT},
+      video_url = #{record.videoUrl,jdbcType=VARCHAR},
+      video_file_name = #{record.videoFileName,jdbcType=VARCHAR},
+      video_file_status = #{record.videoFileStatus,jdbcType=VARCHAR},
+      video_file_expire_time = #{record.videoFileExpireTime,jdbcType=TIMESTAMP},
+      retry_count = #{record.retryCount,jdbcType=INTEGER},
+      `status` = #{record.status,jdbcType=INTEGER},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      update_time = #{record.updateTime,jdbcType=TIMESTAMP}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstander">
+    update creative_video_understander
+    <set>
+      <if test="creativeId != null">
+        creative_id = #{creativeId,jdbcType=BIGINT},
+      </if>
+      <if test="videoUrl != null">
+        video_url = #{videoUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="videoFileName != null">
+        video_file_name = #{videoFileName,jdbcType=VARCHAR},
+      </if>
+      <if test="videoFileStatus != null">
+        video_file_status = #{videoFileStatus,jdbcType=VARCHAR},
+      </if>
+      <if test="videoFileExpireTime != null">
+        video_file_expire_time = #{videoFileExpireTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="retryCount != null">
+        retry_count = #{retryCount,jdbcType=INTEGER},
+      </if>
+      <if test="status != null">
+        `status` = #{status,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        update_time = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="understanderText != null">
+        understander_text = #{understanderText,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstander">
+    update creative_video_understander
+    set creative_id = #{creativeId,jdbcType=BIGINT},
+      video_url = #{videoUrl,jdbcType=VARCHAR},
+      video_file_name = #{videoFileName,jdbcType=VARCHAR},
+      video_file_status = #{videoFileStatus,jdbcType=VARCHAR},
+      video_file_expire_time = #{videoFileExpireTime,jdbcType=TIMESTAMP},
+      retry_count = #{retryCount,jdbcType=INTEGER},
+      `status` = #{status,jdbcType=INTEGER},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP},
+      understander_text = #{understanderText,jdbcType=LONGVARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.piaoquan.featurestools.model.po.CreativeVideoUnderstander">
+    update creative_video_understander
+    set creative_id = #{creativeId,jdbcType=BIGINT},
+      video_url = #{videoUrl,jdbcType=VARCHAR},
+      video_file_name = #{videoFileName,jdbcType=VARCHAR},
+      video_file_status = #{videoFileStatus,jdbcType=VARCHAR},
+      video_file_expire_time = #{videoFileExpireTime,jdbcType=TIMESTAMP},
+      retry_count = #{retryCount,jdbcType=INTEGER},
+      `status` = #{status,jdbcType=INTEGER},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>

+ 13 - 0
src/main/resources/mybatis-config.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+    <properties>
+        <property name="dialect" value="mysql"/>
+    </properties>
+    <settings>
+        <!--<setting name="logImpl" value="LOG4J"/>-->
+        <setting name="mapUnderscoreToCamelCase" value="true" />
+        <!--<setting name="logImpl" value="STDOUT_LOGGING" />-->
+    </settings>
+</configuration>

+ 57 - 0
src/main/resources/mybatis-generator-config.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE generatorConfiguration
+        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
+        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+<!-- 配置生成器 -->
+<generatorConfiguration>
+    <context id="mysql" defaultModelType="flat">
+        <property name="autoDelimitKeywords" value="true"/>
+        <!-- 生成的Java文件的编码 -->
+        <property name="javaFileEncoding" value="UTF-8"/>
+        <!-- 格式化java代码 -->
+        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
+        <!-- 格式化XML代码 -->
+        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
+        <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
+        <property name="beginningDelimiter" value="`"/>
+        <property name="endingDelimiter" value="`"/>
+
+        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
+        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
+        <plugin type="com.tzld.piaoquan.featurestools.dao.generator.PaginationPlugin"/>
+
+        <commentGenerator>
+<!--            <property name="addRemarkComments" value="true"/>-->
+            <property name="suppressDate" value="true"/>
+            <property name="suppressAllComments" value="true"/>
+        </commentGenerator>
+
+        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
+                        connectionURL="jdbc:mysql://rm-bp12k5fuh5zyx31d2.mysql.rds.aliyuncs.com:3306/adplatform?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false&amp;allowMultiQueries=true"
+                        userId="wx2023_ad" password="wx2023_adP@assword1234">
+        </jdbcConnection>
+
+        <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
+            <property name="forceBigDecimals" value="false"/>
+        </javaTypeResolver>
+
+        <javaModelGenerator targetPackage="com.tzld.piaoquan.featurestools.model.po" targetProject="/Users/shimeng/Desktop/project/features-tools/src/main/java">
+            <property name="constructorBased" value="false"/>
+            <property name="enableSubPackages" value="true"/>
+            <property name="immutable" value="false"/>
+        </javaModelGenerator>
+
+        <sqlMapGenerator targetPackage="mapper" targetProject="/Users/shimeng/Desktop/project/features-tools/src/main/resources">
+            <property name="enableSubPackages" value="true"/>
+        </sqlMapGenerator>
+
+        <javaClientGenerator targetPackage="com.tzld.piaoquan.featurestools.dao.mapper" type="XMLMAPPER"
+                             targetProject="/Users/shimeng/Desktop/project/features-tools/src/main/java">
+            <property name="enableSubPackages" value="true"/>
+        </javaClientGenerator>
+
+        <table tableName="creative_video_understander" domainObjectName="CreativeVideoUnderstander" alias=""/>
+
+    </context>
+
+</generatorConfiguration>

+ 13 - 0
src/test/java/com/tzld/piaoquan/featurestools/FeaturesToolsApplicationTests.java

@@ -0,0 +1,13 @@
+package com.tzld.piaoquan.featurestools;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class FeaturesToolsApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}