children;
+}
diff --git b/src/main/java/com/subsidy/vo/classdict/GetAllClassesVO.java a/src/main/java/com/subsidy/vo/classdict/GetAllClassesVO.java
new file mode 100644
index 0000000..33536a4
--- /dev/null
+++ a/src/main/java/com/subsidy/vo/classdict/GetAllClassesVO.java
@@ -0,0 +1,20 @@
+package com.subsidy.vo.classdict;
+
+import lombok.Data;
+
+@Data
+public class GetAllClassesVO {
+
+ private Integer id;
+
+ private String className;
+
+ private String courseName;
+
+ private String startDate;
+
+ private String endDate;
+
+ private Integer cnt;
+
+}
diff --git b/src/main/java/com/subsidy/vo/vod/GetContendVodsVO.java a/src/main/java/com/subsidy/vo/vod/GetContendVodsVO.java
new file mode 100644
index 0000000..e60f7b6
--- /dev/null
+++ a/src/main/java/com/subsidy/vo/vod/GetContendVodsVO.java
@@ -0,0 +1,11 @@
+package com.subsidy.vo.vod;
+
+import com.subsidy.model.VodDictDO;
+import lombok.Data;
+
+@Data
+public class GetContendVodsVO extends VodDictDO {
+
+ private String content;
+
+}
diff --git b/src/main/java/com/subsidy/vo/vod/SignatureVO.java a/src/main/java/com/subsidy/vo/vod/SignatureVO.java
new file mode 100644
index 0000000..591a90b
--- /dev/null
+++ a/src/main/java/com/subsidy/vo/vod/SignatureVO.java
@@ -0,0 +1,10 @@
+package com.subsidy.vo.vod;
+
+import lombok.Data;
+
+@Data
+public class SignatureVO {
+
+ private String sign;
+
+}
diff --git b/src/main/resources/application-dev.properties a/src/main/resources/application-dev.properties
new file mode 100644
index 0000000..2f0d750
--- /dev/null
+++ a/src/main/resources/application-dev.properties
@@ -0,0 +1,28 @@
+# 本地环境配置
+
+# 端口号
+server.port=23454
+
+# 数据源配置
+spring.datasource.url=jdbc:mysql://116.62.57.92:3306/shixiAI?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.username=devloper
+spring.datasource.password=dev@1553$
+
+spring.datasource.druid.initialSize=5
+spring.datasource.druid.minIdle=5
+spring.datasource.druid.maxActive=20
+spring.datasource.druid.maxWait=60000
+spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
+spring.datasource.druid.minEvictableIdleTimeMillis=300000
+spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.druid.testWhileIdle=true
+spring.datasource.druid.testOnBorrow=false
+spring.datasource.druid.testOnReturn=false
+spring.datasource.druid.poolPreparedStatements=true
+spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
+spring.datasource.druid.useGlobalDataSourceStat=true
+
+# 控制台日志打印
+mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
diff --git b/src/main/resources/application-prod.properties a/src/main/resources/application-prod.properties
new file mode 100644
index 0000000..8058924
--- /dev/null
+++ a/src/main/resources/application-prod.properties
@@ -0,0 +1,36 @@
+# 生产环境配置
+
+# 端口号
+server.port=23454
+
+# 数据源配置
+spring.datasource.url=jdbc:mysql://rm-uf69w46mo6agw0ahao.mysql.rds.aliyuncs.com:3306/shixi-ai?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.username=ykadmin_new
+spring.datasource.password=youkedb608@good
+
+spring.datasource.druid.initialSize=5
+spring.datasource.druid.minIdle=5
+spring.datasource.druid.maxActive=20
+spring.datasource.druid.maxWait=60000
+spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
+spring.datasource.druid.minEvictableIdleTimeMillis=300000
+spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.druid.testWhileIdle=true
+spring.datasource.druid.testOnBorrow=false
+spring.datasource.druid.testOnReturn=false
+spring.datasource.druid.poolPreparedStatements=true
+spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
+spring.datasource.druid.useGlobalDataSourceStat=true
+
+# 控制台日志打印
+mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+
+spring.servlet.multipart.max-file-size=2048KB
+spring.servlet.multipart.max-request-size=4098KB
+
+wechat.appId: wx7785293ff5e31f14
+wechat.appSecret: 25d57cad61fc1b45b3afa46d4c35e8f6
+wechat.msgUrl: https://teachai.youkehulian.com/login
+wechat.templateId: Z1HNPLOrKiHEjfR1KMP-cC-uH3BWqDJIHv365Ev20yQ
diff --git b/src/main/resources/application.properties a/src/main/resources/application.properties
new file mode 100644
index 0000000..cd7ba36
--- /dev/null
+++ a/src/main/resources/application.properties
@@ -0,0 +1,57 @@
+# 环境配置
+spring.profiles.active=dev
+
+# 文件编码 UTF8
+spring.mandatory-file-encoding=UTF-8
+spring.jackson.time-zone=GMT+8
+
+# 404 交给异常处理器处理
+spring.mvc.throw-exception-if-no-handler-found=true
+# 关闭静态资源的映射
+spring.resources.add-mappings=false
+
+# 关闭banner打印
+mybatis-plus.global-config.banner=false
+
+# mybatis-plus相关配置
+mybatis-plus.m/classSubjectTask/queryTaskDetailapper-locations=classpath:mapper/*.xml
+# 是否开启自动驼峰命名规则映射
+mybatis-plus.configuration.map-underscore-to-camel-case=true
+# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
+mybatis-plus.configuration.call-setters-on-nulls=true
+
+# 逻辑删除
+mybatis-plus.global-config.db-config.logic-delete-value=NOW()
+mybatis-plus.global-config.db-config.logic-not-delete-value=NULL
+
+#日志配置
+logging.config=classpath:logback-spring.xml
+
+# 阿里云短信
+sms.product=Dysmsapi
+sms.domain=dysmsapi.aliyuncs.com
+sms.accessKeyId=LTAIOrpFKrDqsQ2c
+sms.accessKeySecret=1Qp8huLETbWiBBJvHXJ7MOIhtKuA1G
+
+#wechat.app-id=wx7785293ff5e31f14
+#wechat.app-secret=25d57cad61fc1b45b3afa46d4c35e8f6
+#wechat.agentId=1000008
+
+vod.appId= 1302252447
+vod.secretId= AKIDOcePHvZ2C5VeYHQGSO5aqtlNxJQLqfz2
+vod.secretKey= vjHYRmrfDbw0rWxA7oFcj7F8lDPKCm8E
+vod.api= vod.tencentcloudapi.com
+vod.region= ap-shanghai
+
+# quartz
+# 数据持久化方式
+spring.quartz.job-store-type=jdbc
+# 初始化后是否自动启动计划程序
+spring.quartz.auto-startup=true
+# 初始化完成后启动计划程序的延迟时间
+spring.quartz.startup-delay=10s
+# 配置的作业是否应覆盖现有的作业定义
+spring.quartz.overwrite-existing-jobs=false
+# 自动建表,如果已经存在表请勿使用,会覆盖数据表
+#spring.quartz.jdbc.initialize-schema=always
+#spring.datasource.initialization-mode=embedded
diff --git b/src/main/resources/code.properties a/src/main/resources/code.properties
new file mode 100644
index 0000000..6ad881a
--- /dev/null
+++ a/src/main/resources/code.properties
@@ -0,0 +1,28 @@
+meishu.code-message[0]=成功
+
+meishu.code-message[1010]=无效的令牌
+
+meishu.code-message[10003]=验证码错误
+meishu.code-message[10004]=账号或密码错误
+meishu.code-message[10010]=学生信息不存在
+meishu.code-message[10011]=成员信息不存在
+meishu.code-message[10013]=账户已冻结,请联系账户管理员
+meishu.code-message[10014]=该成员已存在,请勿重复添加
+
+
+meishu.code-message[20001]=该课程已存在
+meishu.code-message[20002]=该成员已存在
+
+meishu.code-message[30001]=该部门已存在
+
+meishu.code-message[70010]=验证码错误
+meishu.code-message[70011]=验证码发送频繁
+meishu.code-message[70012]=手机号未注册
+meishu.code-message[70013]=您今天已报名了同类型的场次
+meishu.code-message[70014]=取消报名失败
+
+meishu.code-message[80001]=uuid已过期
+meishu.code-message[80002]=uuid验证失败
+
+meishu.code-message[90001]=该类目已存在
+
diff --git b/src/main/resources/logback-spring.xml a/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..dfd4cbb
--- /dev/null
+++ a/src/main/resources/logback-spring.xml
@@ -0,0 +1,72 @@
+
+
+
+
+ ${APP_NAME}
+
+
+
+
+ debug
+
+
+ %d [%t] %5p %c:%L - %m%n
+ UTF-8
+
+
+
+ ${LOG_PATH}${APP_NAME}-info.log
+
+ %d [%t] %5p %c:%L - %m%n
+
+
+
+ 100MB
+
+ ${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz
+
+ 30
+
+
+
+ ${LOG_PATH}${APP_NAME}-error.log
+
+ error
+
+
+ %d [%t] %5p %c:%L - %m%n
+
+
+
+ 256MB
+
+ ${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz
+
+ 30
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git b/src/main/resources/mybatis-plus.properties a/src/main/resources/mybatis-plus.properties
new file mode 100644
index 0000000..2e774c5
--- /dev/null
+++ a/src/main/resources/mybatis-plus.properties
@@ -0,0 +1,12 @@
+# 此处为本项目src所在路径(代码生成器输出路径)
+outputDir=/src/main/java
+author=DengMin
+# 父的包名
+setParent=com.subsidy
+# mapper.xml文件生成路径
+mapperPath=/src/main/resources/mapper/
+# 数据库地址
+url=jdbc:mysql://116.62.57.92:3306/subsidy?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true&useAffectedRows=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
+driverName=com.mysql.cj.jdbc.Driver
+userName=devloper
+password=dev@1553$
\ No newline at end of file
diff --git b/src/main/resources/mybatis.xml a/src/main/resources/mybatis.xml
new file mode 100644
index 0000000..f4495b4
--- /dev/null
+++ a/src/main/resources/mybatis.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git b/src/main/resources/templates/controller.java.ftl a/src/main/resources/templates/controller.java.ftl
new file mode 100644
index 0000000..28e7070
--- /dev/null
+++ a/src/main/resources/templates/controller.java.ftl
@@ -0,0 +1,41 @@
+package ${package.Controller};
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+<#if restControllerStyle>
+import org.springframework.web.bind.annotation.RestController;
+<#else>
+import org.springframework.stereotype.Controller;
+#if>
+<#if superControllerClassPackage??>
+import ${superControllerClassPackage};
+#if>
+import io.swagger.annotations.Api;
+
+/**
+ *
+ * ${table.comment!} 前端控制器
+ *
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+<#if restControllerStyle>
+@RestController
+@Api(tags = "${table.comment!}")
+<#else>
+@Controller
+#if>
+@RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}#if>/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}#if>")
+<#if kotlin>
+class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()#if>
+<#else>
+<#if superControllerClass??>
+public class ${table.controllerName} extends ${superControllerClass} {
+<#else>
+public class ${table.controllerName} {
+#if>
+
+}
+#if>
diff --git b/src/main/resources/templates/entity.java.ftl a/src/main/resources/templates/entity.java.ftl
new file mode 100644
index 0000000..c63bcc4
--- /dev/null
+++ a/src/main/resources/templates/entity.java.ftl
@@ -0,0 +1,156 @@
+package ${package.Entity};
+
+<#list table.importPackages as pkg>
+import ${pkg};
+#list>
+<#if swagger2>
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+#if>
+<#if entityLombokModel>
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+ <#if chainModel>
+import lombok.experimental.Accessors;
+ #if>
+#if>
+
+/**
+ *
+ * ${table.comment!}
+ *
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+<#if entityLombokModel>
+@Data
+ <#if superEntityClass??>
+@EqualsAndHashCode(callSuper = true)
+ <#else>
+@EqualsAndHashCode(callSuper = false)
+ #if>
+ <#if chainModel>
+@Accessors(chain = true)
+ #if>
+#if>
+<#if table.convert>
+@TableName("${table.name}")
+#if>
+<#if swagger2>
+@ApiModel(value="${entity}对象", description="${table.comment!}")
+#if>
+<#if superEntityClass??>
+public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}>#if> {
+<#elseif activeRecord>
+public class ${entity} extends Model<${entity}> {
+<#else>
+public class ${entity} implements Serializable {
+#if>
+
+<#if entitySerialVersionUID>
+ private static final long serialVersionUID = 1L;
+#if>
+<#-- ---------- BEGIN 字段循环遍历 ---------->
+<#list table.fields as field>
+ <#if field.keyFlag>
+ <#assign keyPropertyName="${field.propertyName}"/>
+ #if>
+
+ <#if field.comment!?length gt 0>
+ <#if swagger2>
+ @ApiModelProperty(value = "${field.comment}")
+ <#else>
+ /**
+ * ${field.comment}
+ */
+ #if>
+ #if>
+ <#if field.keyFlag>
+ <#-- 主键 -->
+ <#if field.keyIdentityFlag>
+ @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
+ <#elseif idType??>
+ @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
+ <#elseif field.convert>
+ @TableId("${field.annotationColumnName}")
+ #if>
+ <#-- 普通字段 -->
+ <#elseif field.fill??>
+ <#-- ----- 存在字段填充设置 ----->
+ <#if field.convert>
+ @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
+ <#else>
+ @TableField(fill = FieldFill.${field.fill})
+ #if>
+ <#elseif field.convert>
+ @TableField("${field.annotationColumnName}")
+ #if>
+ <#-- 乐观锁注解 -->
+ <#if (versionFieldName!"") == field.name>
+ @Version
+ #if>
+ <#-- 逻辑删除注解 -->
+ <#if (logicDeleteFieldName!"") == field.name>
+ @TableLogic
+ #if>
+ private ${field.propertyType} ${field.propertyName};
+#list>
+<#------------ END 字段循环遍历 ---------->
+
+<#if !entityLombokModel>
+ <#list table.fields as field>
+ <#if field.propertyType == "boolean">
+ <#assign getprefix="is"/>
+ <#else>
+ <#assign getprefix="get"/>
+ #if>
+ public ${field.propertyType} ${getprefix}${field.capitalName}() {
+ return ${field.propertyName};
+ }
+
+ <#if chainModel>
+ public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
+ <#else>
+ public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
+ #if>
+ this.${field.propertyName} = ${field.propertyName};
+ <#if chainModel>
+ return this;
+ #if>
+ }
+ #list>
+#if>
+
+<#if entityColumnConstant>
+ <#list table.fields as field>
+ public static final String ${field.name?upper_case} = "${field.name}";
+
+ #list>
+#if>
+<#if activeRecord>
+ @Override
+ protected Serializable pkVal() {
+ <#if keyPropertyName??>
+ return this.${keyPropertyName};
+ <#else>
+ return null;
+ #if>
+ }
+
+#if>
+<#if !entityLombokModel>
+ @Override
+ public String toString() {
+ return "${entity}{" +
+ <#list table.fields as field>
+ <#if field_index==0>
+ "${field.propertyName}=" + ${field.propertyName} +
+ <#else>
+ ", ${field.propertyName}=" + ${field.propertyName} +
+ #if>
+ #list>
+ "}";
+ }
+#if>
+}
diff --git b/src/main/resources/templates/mapper.java.ftl a/src/main/resources/templates/mapper.java.ftl
new file mode 100644
index 0000000..be08c59
--- /dev/null
+++ a/src/main/resources/templates/mapper.java.ftl
@@ -0,0 +1,22 @@
+package ${package.Mapper};
+
+import ${package.Entity}.${entity};
+import ${superMapperClassPackage};
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * ${table.comment!} Mapper 接口
+ *
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+<#if kotlin>
+interface ${table.mapperName} : ${superMapperClass}<${entity}>
+<#else>
+ @Repository
+public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
+
+}
+#if>
diff --git b/src/main/resources/templates/mapper.xml.ftl a/src/main/resources/templates/mapper.xml.ftl
new file mode 100644
index 0000000..04c2359
--- /dev/null
+++ a/src/main/resources/templates/mapper.xml.ftl
@@ -0,0 +1,39 @@
+
+
+
+
+<#if enableCache>
+
+
+
+#if>
+<#if baseResultMap>
+
+
+<#list table.fields as field>
+<#if field.keyFlag><#--生成主键排在第一位-->
+
+#if>
+#list>
+<#list table.commonFields as field><#--生成公共字段 -->
+
+#list>
+<#list table.fields as field>
+<#if !field.keyFlag><#--生成普通字段 -->
+
+#if>
+#list>
+
+
+#if>
+<#if baseColumnList>
+
+
+<#list table.commonFields as field>
+ ${field.columnName},
+#list>
+ ${table.fieldNames}
+
+
+#if>
+
diff --git b/src/main/resources/templates/service.java.ftl a/src/main/resources/templates/service.java.ftl
new file mode 100644
index 0000000..e3232f3
--- /dev/null
+++ a/src/main/resources/templates/service.java.ftl
@@ -0,0 +1,20 @@
+package ${package.Service};
+
+import ${package.Entity}.${entity};
+import ${superServiceClassPackage};
+
+/**
+ *
+ * ${table.comment!} 服务类
+ *
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+<#if kotlin>
+interface ${table.serviceName} : ${superServiceClass}<${entity}>
+<#else>
+public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
+
+}
+#if>
diff --git b/src/main/resources/templates/serviceImpl.java.ftl a/src/main/resources/templates/serviceImpl.java.ftl
new file mode 100644
index 0000000..aeebd14
--- /dev/null
+++ a/src/main/resources/templates/serviceImpl.java.ftl
@@ -0,0 +1,26 @@
+package ${package.ServiceImpl};
+
+import ${package.Entity}.${entity};
+import ${package.Mapper}.${table.mapperName};
+import ${package.Service}.${table.serviceName};
+import ${superServiceImplClassPackage};
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * ${table.comment!} 服务实现类
+ *
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+@Service
+<#if kotlin>
+open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} {
+
+}
+<#else>
+public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} {
+
+}
+#if>