yangdamao 2 лет назад
Родитель
Сommit
9848cae77e
59 измененных файлов с 5063 добавлено и 280 удалено
  1. 102 0
      zhongzheng-admin-data/pom.xml
  2. 18 0
      zhongzheng-admin-data/src/main/java/com/zhongzheng/ZhongZhengAdminDataServletInitializer.java
  3. 17 0
      zhongzheng-admin-data/src/main/java/com/zhongzheng/ZhongzhengAdminDataApplication.java
  4. 67 0
      zhongzheng-admin-data/src/main/java/com/zhongzheng/controller/ExamSubscribeController.java
  5. 41 0
      zhongzheng-admin-data/src/main/java/com/zhongzheng/controller/UserSubscribeController.java
  6. 150 0
      zhongzheng-admin-data/src/main/java/com/zhongzheng/core/config/SwaggerConfig.java
  7. 1 0
      zhongzheng-admin-data/src/main/resources/META-INF/spring-devtools.properties
  8. 145 0
      zhongzheng-admin-data/src/main/resources/application-dev.yml
  9. 178 0
      zhongzheng-admin-data/src/main/resources/application-pre.yml
  10. 178 0
      zhongzheng-admin-data/src/main/resources/application-prod.yml
  11. 150 0
      zhongzheng-admin-data/src/main/resources/application-trial.yml
  12. 305 0
      zhongzheng-admin-data/src/main/resources/application.yml
  13. 2 0
      zhongzheng-admin-data/src/main/resources/banner.txt
  14. 36 0
      zhongzheng-admin-data/src/main/resources/i18n/messages.properties
  15. 108 0
      zhongzheng-admin-data/src/main/resources/logback.xml
  16. 0 0
      zhongzheng-admin-data/src/main/resources/mybatis/mybatis-config.xml
  17. 2119 0
      zhongzheng-admin-data/src/main/resources/templates/word.ftl
  18. 118 0
      zhongzheng-admin-data/src/main/resources/templates/wordPhone.ftl
  19. 0 26
      zhongzheng-admin/pom.xml
  20. 1 1
      zhongzheng-admin/src/main/java/com/zhongzheng/ZhongZhengApplication.java
  21. 6 6
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/CommonController.java
  22. 45 79
      zhongzheng-admin/src/main/resources/application-dev.yml
  23. 45 79
      zhongzheng-admin/src/main/resources/application-pre.yml
  24. 45 79
      zhongzheng-admin/src/main/resources/application-prod.yml
  25. 4 4
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java
  26. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/bo/FileHandleBo.java
  27. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseHandoutsAddBo.java
  28. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseHandoutsEditBo.java
  29. 10 6
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseFileServiceImpl.java
  30. 47 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdExamRoomBo.java
  31. 24 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdExamRoomDetailBo.java
  32. 26 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdExamRoomQuery.java
  33. 45 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdExamRoomUpdateBo.java
  34. 33 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdUserExamSubscribeQueryBo.java
  35. 52 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdUserSubscribeBo.java
  36. 41 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdUserSubscribeUpdateBo.java
  37. 57 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/domain/CdExamRoom.java
  38. 48 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/domain/CdExamSite.java
  39. 69 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/domain/CdExamSubscribe.java
  40. 62 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/domain/CdUserSubscribe.java
  41. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/mapper/CdExamRoomMapper.java
  42. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/mapper/CdExamSiteMapper.java
  43. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/mapper/CdExamSubscribeMapper.java
  44. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/mapper/CdUserSubscribeMapper.java
  45. 25 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/ICdExamRoomService.java
  46. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/ICdExamSiteService.java
  47. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/ICdExamSubscribeService.java
  48. 13 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/ICdUserSubscribeService.java
  49. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/impl/CdCdExamSiteServiceImpl.java
  50. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/impl/CdCdExamSubscribeServiceImpl.java
  51. 100 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/impl/CdCdUserSubscribeServiceImpl.java
  52. 263 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/impl/CdExamRoomServiceImpl.java
  53. 46 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/vo/CdExamRoomDetailVo.java
  54. 28 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/vo/CdExamRoomVo.java
  55. 45 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/vo/CdUserExamSubscribeVo.java
  56. 40 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/tenant/domain/DataTenant.java
  57. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/tenant/mapper/DataTenantMapper.java
  58. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/tenant/service/IDataTenantService.java
  59. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/tenant/service/impl/DataTenantServiceImpl.java

+ 102 - 0
zhongzheng-admin-data/pom.xml

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>zhongzheng</artifactId>
+        <groupId>com.zhongzheng</groupId>
+        <version>3.4.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>jar</packaging>
+    <artifactId>zhongzheng-admin-data</artifactId>
+
+    <description>
+        web服务入口
+    </description>
+
+    <dependencies>
+
+        <!-- spring-boot-devtools -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional> <!-- 表示依赖不会传递 -->
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!-- Mysql驱动包 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <!-- 核心模块-->
+        <dependency>
+            <groupId>com.zhongzheng</groupId>
+            <artifactId>zhongzheng-framework</artifactId>
+        </dependency>
+
+        <!-- 定时任务-->
+        <dependency>
+            <groupId>com.zhongzheng</groupId>
+            <artifactId>zhongzheng-quartz</artifactId>
+        </dependency>
+
+        <!-- 代码生成-->
+        <dependency>
+            <groupId>com.zhongzheng</groupId>
+            <artifactId>zhongzheng-generator</artifactId>
+        </dependency>
+
+
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.1.RELEASE</version>
+                <configuration>
+                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>3.1.0</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <warName>${project.artifactId}</warName>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <configuration>
+                    <encoding>UTF-8</encoding>
+                    <nonFilteredFileExtensions>
+                        <nonFilteredFileExtension>pem</nonFilteredFileExtension>
+                        <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
+                        <nonFilteredFileExtension>p12</nonFilteredFileExtension>
+                    </nonFilteredFileExtensions>
+                </configuration>
+            </plugin>
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+
+</project>

+ 18 - 0
zhongzheng-admin-data/src/main/java/com/zhongzheng/ZhongZhengAdminDataServletInitializer.java

@@ -0,0 +1,18 @@
+package com.zhongzheng;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+ * web容器中进行部署
+ * 
+ * @author zhongzheng
+ */
+public class ZhongZhengAdminDataServletInitializer extends SpringBootServletInitializer
+{
+    @Override
+    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
+    {
+        return application.sources(ZhongzhengAdminDataApplication.class);
+    }
+}

+ 17 - 0
zhongzheng-admin-data/src/main/java/com/zhongzheng/ZhongzhengAdminDataApplication.java

@@ -0,0 +1,17 @@
+package com.zhongzheng;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class})
+@EnableScheduling
+public class ZhongzhengAdminDataApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ZhongzhengAdminDataApplication.class, args);
+        System.out.println("(♥◠‿◠)ノ゙  中正启动成功   ლ(´ڡ`ლ)゙"+"ZZDATA");
+    }
+
+}

+ 67 - 0
zhongzheng-admin-data/src/main/java/com/zhongzheng/controller/ExamSubscribeController.java

@@ -0,0 +1,67 @@
+package com.zhongzheng.controller;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.modules.middleground.record.bo.CdExamRoomBo;
+import com.zhongzheng.modules.middleground.record.bo.CdExamRoomQuery;
+import com.zhongzheng.modules.middleground.record.bo.CdExamRoomUpdateBo;
+import com.zhongzheng.modules.middleground.record.bo.CdUserExamSubscribeQueryBo;
+import com.zhongzheng.modules.middleground.record.service.ICdExamRoomService;
+import com.zhongzheng.modules.middleground.record.vo.CdExamRoomVo;
+import com.zhongzheng.modules.middleground.record.vo.CdUserExamSubscribeVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月11日 14:18
+ */
+@Api(value = "考场预约接口", tags = {"考场预约控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/exam")
+public class ExamSubscribeController extends BaseController {
+
+    private final ICdExamRoomService examSubscribeService;
+
+    @ApiOperation("新增考场信息")
+    @PostMapping("/save")
+    public AjaxResult<Void> saveExamRoom(@RequestBody CdExamRoomBo bo) {
+        return toAjax(examSubscribeService.saveExamRoom(bo)?1:0);
+    }
+
+    @ApiOperation("修改考场信息")
+    @PostMapping("/update")
+    public AjaxResult<Void> updateExamRoom(@RequestBody CdExamRoomUpdateBo bo) {
+        return toAjax(examSubscribeService.updateExamRoom(bo)?1:0);
+    }
+
+    @ApiOperation("删除考场信息")
+    @PostMapping("/delete")
+    public AjaxResult<Void> deleteExamRoom(@RequestBody CdExamRoomUpdateBo bo) {
+        return toAjax(examSubscribeService.deleteExamRoom(bo)?1:0);
+    }
+
+    @ApiOperation("获取考场信息")
+    @GetMapping("/list")
+    public AjaxResult<List<CdExamRoomVo>> getExamRoomList(CdExamRoomQuery bo) {
+        List<CdExamRoomVo> voList = examSubscribeService.getExamRoomList(bo);
+        return AjaxResult.success(voList);
+    }
+
+    @ApiOperation("可预约学员列表")
+    @GetMapping("/subscribe/list")
+    public TableDataInfo<CdUserExamSubscribeVo> getExamSubscribeList(CdUserExamSubscribeQueryBo bo) {
+        startPage();
+        List<CdUserExamSubscribeVo> list = examSubscribeService.getExamSubscribeList(bo);
+        return getDataTable(list);
+    }
+
+
+}

+ 41 - 0
zhongzheng-admin-data/src/main/java/com/zhongzheng/controller/UserSubscribeController.java

@@ -0,0 +1,41 @@
+package com.zhongzheng.controller;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.modules.middleground.record.bo.CdUserSubscribeBo;
+import com.zhongzheng.modules.middleground.record.bo.CdUserSubscribeUpdateBo;
+import com.zhongzheng.modules.middleground.record.service.ICdUserSubscribeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月11日 14:18
+ */
+@Api(value = "用户预约控制器", tags = {"用户预约控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/subscribe")
+public class UserSubscribeController extends BaseController {
+
+    private ICdUserSubscribeService userSubscribeService;
+
+    @ApiOperation("新增用户预约记录")
+    @PostMapping("/save")
+    public AjaxResult<Void> saveUserSubscribe(@RequestBody CdUserSubscribeBo bo) {
+        return toAjax(userSubscribeService.saveUserSubscribe(bo)?1:0);
+    }
+
+    @ApiOperation("修改用户预约记录")
+    @PostMapping("/update")
+    public AjaxResult<Void> updateUserSubscribe(@RequestBody CdUserSubscribeUpdateBo bo) {
+        return toAjax(userSubscribeService.updateUserSubscribe(bo)?1:0);
+    }
+
+}

+ 150 - 0
zhongzheng-admin-data/src/main/java/com/zhongzheng/core/config/SwaggerConfig.java

@@ -0,0 +1,150 @@
+package com.zhongzheng.core.config;
+
+import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
+import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
+import com.zhongzheng.common.config.RuoYiConfig;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.*;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Swagger2的接口配置
+ *
+ * @author zhongzheng
+ */
+@Configuration
+@EnableSwagger2WebMvc
+@EnableKnife4j
+public class SwaggerConfig
+{
+    /** 系统基础配置 */
+    @Autowired
+    private RuoYiConfig ruoyiConfig;
+
+    /** 是否开启swagger */
+    @Value("${swagger.enabled}")
+    private boolean enabled;
+
+    /** 设置请求的统一前缀 */
+    @Value("${swagger.pathMapping}")
+    private String pathMapping;
+
+    private final OpenApiExtensionResolver openApiExtensionResolver;
+
+    /**
+     * 创建API
+     */
+    @Bean
+    public Docket createRestApi()
+    {
+        return new Docket(DocumentationType.SWAGGER_2)
+                // 是否启用Swagger
+                .enable(enabled)
+                // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
+                .apiInfo(apiInfo())
+                // 设置哪些接口暴露给Swagger展示
+                .select()
+                // 扫描所有有注解的api,用这种方式更灵活
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                // 扫描指定包中的swagger注解
+                // .apis(RequestHandlerSelectors.basePackage("com.zhongzheng.project.tool.swagger"))
+                // 扫描所有 .apis(RequestHandlerSelectors.any())
+                .paths(PathSelectors.any())
+                .build()
+                /* 设置安全模式,swagger可以设置访问token */
+           //     .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts())
+                .pathMapping(pathMapping)
+                .globalOperationParameters(getGlobalOperationParameters())
+                .extensions(openApiExtensionResolver.buildSettingExtensions());
+    }
+
+    @Autowired
+    public SwaggerConfig(OpenApiExtensionResolver openApiExtensionResolver) {
+        this.openApiExtensionResolver = openApiExtensionResolver;
+    }
+
+    /**
+     * 安全模式,这里指定token通过AuthorizationToken头请求头传递
+     */
+    private List<ApiKey> securitySchemes()
+    {
+        List<ApiKey> apiKeyList = new ArrayList<ApiKey>();
+    //    apiKeyList.add(new ApiKey("AuthorizationToken", "AuthorizationToken", "header"));//强制全局参数
+        return apiKeyList;
+    }
+
+    /**
+     * 安全上下文
+     */
+    private List<SecurityContext> securityContexts()
+    {
+        List<SecurityContext> securityContexts = new ArrayList<>();
+        securityContexts.add(
+                SecurityContext.builder()
+                        .securityReferences(defaultAuth())
+                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
+                        .build());
+        return securityContexts;
+    }
+
+    /**
+     * 默认的安全上引用
+     */
+    private List<SecurityReference> defaultAuth()
+    {
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        List<SecurityReference> securityReferences = new ArrayList<>();
+        securityReferences.add(new SecurityReference("AuthorizationToken", authorizationScopes));
+        return securityReferences;
+    }
+
+    /**
+     * 添加摘要信息
+     */
+    private ApiInfo apiInfo()
+    {
+        // 用ApiInfoBuilder进行定制
+        return new ApiInfoBuilder()
+                // 设置标题
+                .title("标题:中正SAAS客户管理系统_接口文档")
+                // 描述
+                .description("描述:用于中正SAAS客户管理系统_接口文档")
+                // 作者信息
+                .contact(new Contact(ruoyiConfig.getName(), null, null))
+                // 版本
+                .version("版本号:0.0.1")
+
+                .build();
+    }
+
+    private List<Parameter> getGlobalOperationParameters() {
+        List<Parameter> pars = new ArrayList<>();
+        ParameterBuilder parameterBuilder = new ParameterBuilder();
+        // header query cookie
+        parameterBuilder.name("X-Auth-Token").description("token").modelRef(new ModelRef("string")).parameterType("header").defaultValue("test").required(false);
+        pars.add(parameterBuilder.build());
+        ParameterBuilder parameterBuilder1 = new ParameterBuilder();
+        parameterBuilder1.name("TenantId").description("TenantId").modelRef(new ModelRef("string")).parameterType("header").defaultValue("867735392558919680").required(false);
+        pars.add(parameterBuilder1.build());
+        return pars;
+    }
+
+}

+ 1 - 0
zhongzheng-admin-data/src/main/resources/META-INF/spring-devtools.properties

@@ -0,0 +1 @@
+restart.include.json=/com.alibaba.fastjson.*.jar

+ 145 - 0
zhongzheng-admin-data/src/main/resources/application-dev.yml

@@ -0,0 +1,145 @@
+# 数据源配置
+spring:
+    datasource:
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: com.mysql.cj.jdbc.Driver
+        druid:
+            url: jdbc:mysql://39.108.7.155:3306/zz_edu_data_dev?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+            username: root
+            password: gdxy2023#@#zzkj
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1 FROM DUAL
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            webStatFilter:
+                enabled: true
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username: ruoyi
+                login-password: 123456
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 1000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true
+    # redis 配置
+    redis:
+        # 地址
+        host: 192.168.1.222
+        # 端口,默认为6379
+        port: 6379
+        # 数据库索引
+        database: 0
+        # 密码
+        password: zhongzheng2021_redis
+        # 连接超时时间
+        timeout: 10s
+        lettuce:
+            pool:
+                # 连接池中的最小空闲连接
+                min-idle: 0
+                # 连接池中的最大空闲连接
+                max-idle: 8
+                # 连接池的最大数据库连接数
+                max-active: 8
+                # #连接池最大阻塞等待时间(使用负值表示没有限制)
+                max-wait: -1ms
+aliyun:
+    oss:
+        endpoint: https://file-dev.xyyxt.net # oss对外服务的访问域名
+        accessKeyId: LTAIgC8O2WUXvXuR  # 访问身份验证中用到用户标识
+        accessKeySecret: 1yyCazuT1M6MruBXzgFjP0p9gdMlwX # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhongzheng-test # oss的存储空间
+        policy:
+            expire: 30 # 签名有效期(S)
+        maxSize: 100 # 上传文件大小(M)
+        callback: http://120.79.166.78:19004/aliyun/oss/callback # 文件上传成功后的回调地址
+        dir:
+            prefix: oss/images/ # 上传文件夹路径前缀 `
+
+poliv:
+    token:
+        userid: d5f6d309fe
+        writetoken: 8f14a371-9d02-4ec1-922d-54d7b4f79dca
+        readtoken: f2c397b4-e2a3-46dc-9266-e6a43ac26a35
+        secretkey: xpPrYdcbA1
+
+wx:
+    small:
+        appid: wxd3c8ae80cf43a305
+        appsecret: 193a001ebfd46f227008a21e9d13e750
+    gzh:
+        appid: wx6f48f721d18244eb
+        appsecret: 2f8b2b4ff66e2f6adfb9f08ae22d7474
+        studyNoteTpId: DndIixcAp15Sqgb4KOGTMf73VLF09NlCUifPSel5Y_s
+        qdyTpId: s981yq3SyIODNUEXFzVSWn0OYj90E72aKdtKtSp05_E
+        qdySubTpId: gzE6zddD7OzDLUtOO4GfU-KPCxpMqWFhCj86uXExqB8
+        qdySubStatusTpId: 7oKaAHmc4P7jqfonuiM1wnjfNLh9T662Ywm1OAFaUFA
+        qdyExamTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+        qdyExamStatusTpId: J7nNogGhD38OD20gI-3CzwawfEMu7lOjR8fsi4LgJ5g
+        signatureTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+    wepay:
+        mchid: 1342013901
+        key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        notifyUrl: http://120.79.166.78:19012/wx/pay/callback
+    scanLogin:
+        host: https://testm.xyyxt.net/
+
+wisdomExamRoom:
+    mchid: 10001
+    appid: ZZ-YXT-GZ-20220820-0001
+    app_secret: mt70O1s/Xd5LwuH7yHLpj9R+tKUn5j9vTnCvmgBnbJDA11Hpl7+q4lEZliqPAjN+YHPn9bGmHkAbw5XwhhMiYg==
+    host:  http://bg.sam457.site:9020
+
+certificate:
+    host: http://192.168.1.38:8000/
+
+liveGotoURL: http://
+
+enCodeVersion: develop
+
+oldStudySys:
+    syncPath: http://gdxypx.xy.com/System/BussinessApi/PostUserStudyRecords
+    sharePath: http://192.168.1.210:8086/witsystem/dataapi/SaleOrder
+    shareCanclePath: http://192.168.1.210:8086/witsystem/dataapi/ordercance
+    searchGradeCount: http://gdxypx.xy.com/System/BussinessApi/OfficialGradeCount
+    pushGradeCount: http://gdxypx.xy.com/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: http://192.168.1.210/EduSystem/BusinessApi/NewYxtUserPrompt
+    classUserListPath: http://gdxypx.xy.com/System/BussinessApi/UserCourseCategoryListcno
+    classOpenPath: http://gdxypx.xy.com/System/BussinessApi/OpenClass
+    salePassword: http://gdxypx.xy.com/WitSystem/BussinessApi/GetSaleInfo
+
+officialPush:
+    infoPath: https://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan
+    periodPath: https://jypt-dev.gdcic.net/organjxjy/XueshiShenqing
+    infoAccount: peixunjigou
+    token: 0ca175b9c0f726a831d895e26933246
+
+
+distributionOldPay:
+    host: http://gdxypx.xy.com/System/BussinessApi/AddRedPackData

+ 178 - 0
zhongzheng-admin-data/src/main/resources/application-pre.yml

@@ -0,0 +1,178 @@
+# 数据源配置
+spring:
+    datasource:
+        #配置hikari连接池
+        hikari:
+            minimum-idle: 10
+            maximum-pool-size: 20
+            connection-timeout: 10000
+            idle-timeout: 30000
+            connection-init-sql: set names utf8mb4
+        #动态数据源配置
+        dynamic:
+            primary: slave #设置默认的数据源或者数据源组,默认值即为master
+            strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
+            datasource:
+                #数据源
+                master:
+                    driver-class-name: com.mysql.cj.jdbc.Driver
+                    url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas_top?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+                    username: root
+                    password: zhongzheng2021
+                #数据源
+                slave:
+                    driver-class-name: com.mysql.cj.jdbc.Driver
+                    url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+                    username: root
+                    password: zhongzheng2021
+#    datasource:
+#        type: com.alibaba.druid.pool.DruidDataSource
+#        driverClassName: com.mysql.cj.jdbc.Driver
+#        druid:
+#            # 主库数据源
+#            master:
+#                url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas_pre?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+#                username: root
+#                password:  zhongzheng2021
+#            # 从库数据源
+#            slave:
+#                # 从数据源开关/默认关闭
+#                enabled: false
+#                url:
+#                username:
+#                password:
+#            # 初始连接数
+#            initialSize: 5
+#            # 最小连接池数量
+#            minIdle: 10
+#            # 最大连接池数量
+#            maxActive: 20
+#            # 配置获取连接等待超时的时间
+#            maxWait: 60000
+#            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+#            timeBetweenEvictionRunsMillis: 60000
+#            # 配置一个连接在池中最小生存的时间,单位是毫秒
+#            minEvictableIdleTimeMillis: 300000
+#            # 配置一个连接在池中最大生存的时间,单位是毫秒
+#            maxEvictableIdleTimeMillis: 900000
+#            # 配置检测连接是否有效
+#            validationQuery: SELECT 1 FROM DUAL
+#            testWhileIdle: true
+#            testOnBorrow: false
+#            testOnReturn: false
+#            webStatFilter:
+#                enabled: true
+#            statViewServlet:
+#                enabled: true
+#                # 设置白名单,不填则允许所有访问
+#                allow:
+#                url-pattern: /druid/*
+#                # 控制台管理用户名和密码
+#                login-username: ruoyi
+#                login-password: 123456
+#            filter:
+#                stat:
+#                    enabled: true
+#                    # 慢SQL记录
+#                    log-slow-sql: true
+#                    slow-sql-millis: 2500
+#                    merge-sql: true
+#                wall:
+#                    config:
+#                        multi-statement-allow: true
+    # redis 配置
+    redis:
+        # 地址
+        host: 192.168.1.222
+        # 端口,默认为6379
+        port: 6379
+        # 数据库索引
+        database: 1
+        # 密码
+        password: zhongzheng2021_redis
+        # 连接超时时间
+        timeout: 10s
+        lettuce:
+            pool:
+                # 连接池中的最小空闲连接
+                min-idle: 0
+                # 连接池中的最大空闲连接
+                max-idle: 8
+                # 连接池的最大数据库连接数
+                max-active: 8
+                # #连接池最大阻塞等待时间(使用负值表示没有限制)
+                max-wait: -1ms
+aliyun:
+    oss:
+        endpoint: https://file-dev.xyyxt.net # oss对外服务的访问域名
+        accessKeyId: LTAIgC8O2WUXvXuR  # 访问身份验证中用到用户标识
+        accessKeySecret: 1yyCazuT1M6MruBXzgFjP0p9gdMlwX # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhongzheng-test # oss的存储空间
+        policy:
+            expire: 30 # 签名有效期(S)
+        maxSize: 100 # 上传文件大小(M)
+        callback: http://120.79.166.78:19004/aliyun/oss/callback # 文件上传成功后的回调地址
+        dir:
+            prefix: oss/images/ # 上传文件夹路径前缀 `
+
+poliv:
+    token:
+        userid: d5f6d309fe
+        writetoken: 8f14a371-9d02-4ec1-922d-54d7b4f79dca
+        readtoken: f2c397b4-e2a3-46dc-9266-e6a43ac26a35
+        secretkey: xpPrYdcbA1
+
+wx:
+    small:
+        appid: wxd3c8ae80cf43a305
+        appsecret: 193a001ebfd46f227008a21e9d13e750
+    gzh:
+        appid: wx6f48f721d18244eb
+        appsecret: 2f8b2b4ff66e2f6adfb9f08ae22d7474
+        studyNoteTpId: DndIixcAp15Sqgb4KOGTMf73VLF09NlCUifPSel5Y_s
+        qdyTpId: s981yq3SyIODNUEXFzVSWn0OYj90E72aKdtKtSp05_E
+        qdySubTpId: gzE6zddD7OzDLUtOO4GfU-KPCxpMqWFhCj86uXExqB8
+        qdySubStatusTpId: 7oKaAHmc4P7jqfonuiM1wnjfNLh9T662Ywm1OAFaUFA
+        qdyExamTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+        qdyExamStatusTpId: J7nNogGhD38OD20gI-3CzwawfEMu7lOjR8fsi4LgJ5g
+        signatureTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+    wepay:
+        mchid: 1342013901
+        key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        notifyUrl: http://120.79.166.78:19009/wx/pay/callback
+    scanLogin:
+        host: https://web.xyyxt.net/
+
+wisdomExamRoom:
+    mchid: 10001
+    appid: ZZ-YXT-GZ-20220820-0001
+    app_secret: mt70O1s/Xd5LwuH7yHLpj9R+tKUn5j9vTnCvmgBnbJDA11Hpl7+q4lEZliqPAjN+YHPn9bGmHkAbw5XwhhMiYg==
+    host: http://bg.sam457.site:9020
+
+certificate:
+    host: http://192.168.1.38:8000/
+
+liveGotoURL: http://
+
+enCodeVersion: trial
+
+oldStudySys:
+    syncPath: http://test.jqbao.net/System/BussinessApi/PostUserStudyRecords
+    sharePath: http://test.jqbao.net/witsystem/dataapi/SaleOrder
+    shareCanclePath: http://test.jqbao.net/witsystem/dataapi/ordercance
+    searchGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCount
+    pushGradeCount: http://test.jqbao.net/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: http://192.168.1.210/EduSystem/BusinessApi/NewYxtUserPrompt
+    classUserListPath: http://gdxypx.xy.com/System/BussinessApi/UserCourseCategoryListcno
+    classOpenPath: http://gdxypx.xy.com/System/BussinessApi/OpenClass
+    salePassword: http://gdxypx.xy.com/WitSystem/BussinessApi/GetSaleInfo
+
+officialPush:
+    infoPath: https://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan
+    periodPath: https://jypt-dev.gdcic.net/organjxjy/XueshiShenqing
+    infoAccount: peixunjigou
+    token: 0ca175b9c0f726a831d895e26933246
+
+distributionOldPay:
+    host: http://test.jqbao.net/System/BussinessApi/AddRedPackData

+ 178 - 0
zhongzheng-admin-data/src/main/resources/application-prod.yml

@@ -0,0 +1,178 @@
+# 数据源配置
+spring:
+    datasource:
+        #配置hikari连接池
+        hikari:
+            minimum-idle: 10
+            maximum-pool-size: 20
+            connection-timeout: 10000
+            idle-timeout: 30000
+            connection-init-sql: set names utf8mb4
+        #动态数据源配置
+        dynamic:
+            primary: slave #设置默认的数据源或者数据源组,默认值即为master
+            strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
+            datasource:
+                #数据源
+                master:
+                    driver-class-name: com.mysql.cj.jdbc.Driver
+                    url: jdbc:mysql://rm-wz950fu2v70864v85.mysql.rds.aliyuncs.com/zz_edu_saas_top?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+                    username: root
+                    password: gdxy2021!@#zzjykj
+                #数据源
+                slave:
+                    driver-class-name: com.mysql.cj.jdbc.Driver
+                    url: jdbc:mysql://rm-wz950fu2v70864v85.mysql.rds.aliyuncs.com/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+                    username: root
+                    password: gdxy2021!@#zzjykj
+#    datasource:
+#        type: com.alibaba.druid.pool.DruidDataSource
+#        driverClassName: com.mysql.cj.jdbc.Driver
+#        druid:
+#            # 主库数据源
+#            master:
+#                url: jdbc:mysql://rm-wz950fu2v70864v85.mysql.rds.aliyuncs.com/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+#                username: root
+#                password: gdxy2021!@#zzjykj
+#            # 从库数据源
+#            slave:
+#                # 从数据源开关/默认关闭
+#                enabled: false
+#                url:
+#                username:
+#                password:
+#            # 初始连接数
+#            initialSize: 5
+#            # 最小连接池数量
+#            minIdle: 10
+#            # 最大连接池数量
+#            maxActive: 20
+#            # 配置获取连接等待超时的时间
+#            maxWait: 60000
+#            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+#            timeBetweenEvictionRunsMillis: 60000
+#            # 配置一个连接在池中最小生存的时间,单位是毫秒
+#            minEvictableIdleTimeMillis: 300000
+#            # 配置一个连接在池中最大生存的时间,单位是毫秒
+#            maxEvictableIdleTimeMillis: 900000
+#            # 配置检测连接是否有效
+#            validationQuery: SELECT 1 FROM DUAL
+#            testWhileIdle: true
+#            testOnBorrow: false
+#            testOnReturn: false
+#            webStatFilter:
+#                enabled: true
+#            statViewServlet:
+#                enabled: true
+#                # 设置白名单,不填则允许所有访问
+#                allow:
+#                url-pattern: /druid/*
+#                # 控制台管理用户名和密码
+#                login-username: ruoyi
+#                login-password: 123456
+#            filter:
+#                stat:
+#                    enabled: true
+#                    # 慢SQL记录
+#                    log-slow-sql: true
+#                    slow-sql-millis: 4000
+#                    merge-sql: true
+#                wall:
+#                    config:
+#                        multi-statement-allow: true
+    # redis 配置
+    redis:
+        # 地址
+        host: 172.18.19.227
+        # 端口,默认为6379
+        port: 6379
+        # 数据库索引
+        database: 0
+        # 密码
+        password: zhongzheng2021_redis
+        # 连接超时时间
+        timeout: 10s
+        lettuce:
+            pool:
+                # 连接池中的最小空闲连接
+                min-idle: 0
+                # 连接池中的最大空闲连接
+                max-idle: 8
+                # 连接池的最大数据库连接数
+                max-active: 8
+                # #连接池最大阻塞等待时间(使用负值表示没有限制)
+                max-wait: -1ms
+aliyun:
+    oss:
+        endpoint: https://file.xyyxt.net # oss对外服务的访问域名
+        accessKeyId: LTAIgC8O2WUXvXuR  # 访问身份验证中用到用户标识
+        accessKeySecret: 1yyCazuT1M6MruBXzgFjP0p9gdMlwX # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhongzheng-prod # oss的存储空间
+        policy:
+            expire: 30 # 签名有效期(S)
+        maxSize: 100 # 上传文件大小(M)
+        callback: https://cloud.xyyxt.net/aliyun/oss/callback # 文件上传成功后的回调地址
+        dir:
+            prefix: oss/images/ # 上传文件夹路径前缀 `
+
+poliv:
+    token:
+        userid: d5f6d309fe
+        writetoken: 8f14a371-9d02-4ec1-922d-54d7b4f79dca
+        readtoken: f2c397b4-e2a3-46dc-9266-e6a43ac26a35
+        secretkey: xpPrYdcbA1
+
+wx:
+    small:
+        appid: wxd3c8ae80cf43a305
+        appsecret: 193a001ebfd46f227008a21e9d13e750
+    gzh:
+        appid: wx6f48f721d18244eb
+        appsecret: 2f8b2b4ff66e2f6adfb9f08ae22d7474
+        studyNoteTpId: DndIixcAp15Sqgb4KOGTMf73VLF09NlCUifPSel5Y_s
+        qdyTpId: s981yq3SyIODNUEXFzVSWn0OYj90E72aKdtKtSp05_E
+        qdySubTpId: gzE6zddD7OzDLUtOO4GfU-KPCxpMqWFhCj86uXExqB8
+        qdySubStatusTpId: 7oKaAHmc4P7jqfonuiM1wnjfNLh9T662Ywm1OAFaUFA
+        qdyExamTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+        qdyExamStatusTpId: J7nNogGhD38OD20gI-3CzwawfEMu7lOjR8fsi4LgJ5g
+        signatureTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+    wepay:
+        mchid: 1342013901
+        key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        notifyUrl: https://api.xyyxt.net/wx/pay/callback
+    scanLogin:
+        host: https://m.xyyxt.net/
+
+wisdomExamRoom:
+    mchid: 10001
+    appid: ZZ-YXT-GZ-20220820-0001
+    app_secret: mt70O1s/Xd5LwuH7yHLpj9R+tKUn5j9vTnCvmgBnbJDA11Hpl7+q4lEZliqPAjN+YHPn9bGmHkAbw5XwhhMiYg==
+    host: http://bg.sam457.site:9020
+
+certificate:
+    host: https://m.xyyxt.net/
+
+liveGotoURL: https://
+
+enCodeVersion: release
+
+oldStudySys:
+    syncPath: https://www.xyyxt.net/System/BussinessApi/PostUserStudyRecords
+    sharePath: https://www.xyyxt.net/witsystem/dataapi/SaleOrder
+    shareCanclePath: https://www.xyyxt.net/witsystem/dataapi/ordercance
+    searchGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCount
+    pushGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: https://zs.gdzzkj.net/EduSystem/BusinessApi/NewYxtUserPrompt
+    classUserListPath: https://www.xyyxt.net/System/BussinessApi/UserCourseCategoryListcno
+    classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
+    salePassword: http://www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
+
+officialPush:
+    infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan
+    periodPath: https://jypt.gdcic.net/organjxjy/XueshiShenqing
+    infoAccount: GDSXY
+    token: 01b5d9833987efdff54483cdc9720da6
+
+distributionOldPay:
+    host: https://www.xyyxt.net/System/BussinessApi/AddRedPackData

+ 150 - 0
zhongzheng-admin-data/src/main/resources/application-trial.yml

@@ -0,0 +1,150 @@
+# 数据源配置
+spring:
+    datasource:
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: com.mysql.cj.jdbc.Driver
+        druid:
+            # 主库数据源
+            master:
+                url: jdbc:mysql://rm-wz950fu2v70864v85.mysql.rds.aliyuncs.com/zz_edu_saas_trial?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+                username: root
+                password: gdxy2021!@#zzjykj
+            # 从库数据源
+            slave:
+                # 从数据源开关/默认关闭
+                enabled: false
+                url:
+                username:
+                password:
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1 FROM DUAL
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            webStatFilter:
+                enabled: true
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username: ruoyi
+                login-password: 123456
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 4000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true
+    # redis 配置
+    redis:
+        # 地址
+        host: 172.18.19.227
+        # 端口,默认为6379
+        port: 6379
+        # 数据库索引
+        database: 0
+        # 密码
+        password: zhongzheng2021_redis
+        # 连接超时时间
+        timeout: 10s
+        lettuce:
+            pool:
+                # 连接池中的最小空闲连接
+                min-idle: 0
+                # 连接池中的最大空闲连接
+                max-idle: 8
+                # 连接池的最大数据库连接数
+                max-active: 8
+                # #连接池最大阻塞等待时间(使用负值表示没有限制)
+                max-wait: -1ms
+aliyun:
+    oss:
+        endpoint: https://file.xyyxt.net # oss对外服务的访问域名
+        accessKeyId: LTAIgC8O2WUXvXuR  # 访问身份验证中用到用户标识
+        accessKeySecret: 1yyCazuT1M6MruBXzgFjP0p9gdMlwX # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhongzheng-prod # oss的存储空间
+        policy:
+            expire: 30 # 签名有效期(S)
+        maxSize: 100 # 上传文件大小(M)
+        callback: https://cloud.gdzzkj.net/aliyun/oss/callback # 文件上传成功后的回调地址
+        dir:
+            prefix: oss/images/ # 上传文件夹路径前缀 `
+
+poliv:
+    token:
+        userid: d5f6d309fe
+        writetoken: 8f14a371-9d02-4ec1-922d-54d7b4f79dca
+        readtoken: f2c397b4-e2a3-46dc-9266-e6a43ac26a35
+        secretkey: xpPrYdcbA1
+
+wx:
+    small:
+        appid: wxd3c8ae80cf43a305
+        appsecret: 193a001ebfd46f227008a21e9d13e750
+    gzh:
+        appid: wx6f48f721d18244eb
+        appsecret: 2f8b2b4ff66e2f6adfb9f08ae22d7474
+        studyNoteTpId: DndIixcAp15Sqgb4KOGTMf73VLF09NlCUifPSel5Y_s
+        qdyTpId: s981yq3SyIODNUEXFzVSWn0OYj90E72aKdtKtSp05_E
+        qdySubTpId: gzE6zddD7OzDLUtOO4GfU-KPCxpMqWFhCj86uXExqB8
+        qdySubStatusTpId: 7oKaAHmc4P7jqfonuiM1wnjfNLh9T662Ywm1OAFaUFA
+        qdyExamTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+        qdyExamStatusTpId: J7nNogGhD38OD20gI-3CzwawfEMu7lOjR8fsi4LgJ5g
+        signatureTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+    wepay:
+        mchid: 1342013901
+        key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        notifyUrl: https://api.xyyxt.net/wx/pay/callback
+    scanLogin:
+        host: https://m.xyyxt.net/
+
+wisdomExamRoom:
+    mchid: 10001
+    appid: ZZ-YXT-GZ-20220820-0001
+    app_secret: mt70O1s/Xd5LwuH7yHLpj9R+tKUn5j9vTnCvmgBnbJDA11Hpl7+q4lEZliqPAjN+YHPn9bGmHkAbw5XwhhMiYg==
+    host: http://bg.sam457.site:9020
+
+certificate:
+    host: https://m.xyyxt.net/
+
+liveGotoURL: https://
+
+enCodeVersion: release
+
+oldStudySys:
+    syncPath: https://www.xyyxt.net/System/BussinessApi/PostUserStudyRecords
+    sharePath: https://www.xyyxt.net/witsystem/dataapi/SaleOrder
+    shareCanclePath: https://www.xyyxt.net/witsystem/dataapi/ordercance
+    searchGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCount
+    pushGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: https://zs.gdzzkj.net/EduSystem/BusinessApi/NewYxtUserPrompt
+    classUserListPath: https://www.xyyxt.net/System/BussinessApi/UserCourseCategoryListcno
+    classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
+    salePassword: http:///www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
+
+officialPush:
+    infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan
+    periodPath: https://jypt.gdcic.net/organjxjy/XueshiShenqing
+    infoAccount: GDSXY
+    token: 01b5d9833987efdff54483cdc9720da6

+ 305 - 0
zhongzheng-admin-data/src/main/resources/application.yml

@@ -0,0 +1,305 @@
+# 项目相关配置
+zhongzheng:
+  # 名称
+  name: zhongzheng-data
+  # 版本
+  version: 3.4.0
+  # 版权年份
+  copyrightYear: 2021
+  # 实例演示开关
+  demoEnabled: true
+  # 文件路径,使用jvm系统变量,兼容windows和linux;
+  profile: ${user.dir}/zhongzheng/uploadPath
+  # 获取ip地址开关
+  addressEnabled: false
+
+captcha:
+  # 验证码类型 math 数组计算 char 字符验证
+  captchaType: math
+  # line 线段干扰 circle 圆圈干扰 shear 扭曲干扰
+  captchaCategory: circle
+  # 数字验证码位数
+  captchaNumberLength: 1
+  # 字符验证码长度
+  captchaCharLength: 4
+
+# 开发环境配置
+server:
+  # 服务器的HTTP端口,默认为8080
+  port: 9099
+  servlet:
+    # 应用的访问路径
+    context-path: /
+  # undertow 配置
+  undertow:
+    # HTTP post内容的最大大小。当值为-1时,默认值为大小是无限的
+    max-http-post-size: -1
+    # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
+    # 每块buffer的空间大小,越小的空间被利用越充分
+    buffer-size: 512
+    # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
+    io-threads: 8
+    # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
+    worker-threads: 256
+    # 是否分配的直接内存
+    direct-buffers: true
+#  # tomcat 配置
+#  tomcat:
+#    # tomcat的URI编码
+#    uri-encoding: UTF-8
+#    # tomcat最大线程数,默认为200
+#    max-threads: 500
+#    # Tomcat启动初始化的线程数,默认值25
+#    min-spare-threads: 30
+
+# 日志配置
+logging:
+  level:
+    com.zhongzheng: @logging.level@
+    org.springframework: warn
+  config: classpath:logback.xml
+
+# Spring配置
+spring:
+  mvc:
+    async:
+      request-timeout: 30000
+  main:
+    allow-bean-definition-overriding: true
+  # 资源信息
+  messages:
+    # 国际化资源文件路径
+    basename: i18n/messages
+  profiles:
+    active: @profiles.active@
+  # 文件上传
+  servlet:
+     multipart:
+       # 单个文件大小
+       max-file-size:  1024MB
+       # 设置总上传的文件大小
+       max-request-size:  1024MB
+  # 服务模块
+  devtools:
+    restart:
+      # 热部署开关
+      enabled: true
+  application:
+    name: zz_edu
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        # 设置 Spring Boot Admin Server 地址
+        url: http://localhost:${server.port}${spring.boot.admin.context-path}
+        instance:
+          prefer-ip: true # 注册实例时,优先使用 IP
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      base-path: /actuator
+      exposure:
+        # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+        include: '*'
+  endpoint:
+    logfile:
+      external-file: ./logs/sys-console.log
+
+# token配置
+token:
+    # 令牌自定义标识
+    header: AuthorizationToken
+    # 令牌密钥
+    secret: abcdefghijklmnopqrstuvwxyz
+    # 令牌有效期(默认30分钟)
+    expireTime: 360
+
+# MyBatis配置
+# https://baomidou.com/config/
+mybatis-plus:
+  # 对应的 XML 文件位置
+  mapperLocations: classpath*:mapper/**/*Mapper.xml
+  # 实体扫描,多个package用逗号或者分号分隔
+  typeAliasesPackage: com.zhongzheng.**.domain
+  # 针对 typeAliasesPackage,如果配置了该属性,则仅仅会扫描路径下以该类作为父类的域对象
+  #typeAliasesSuperType: Class<?>
+  # 如果配置了该属性,SqlSessionFactoryBean 会把该包下面的类注册为对应的 TypeHandler
+  #typeHandlersPackage: null
+  # 如果配置了该属性,会将路径下的枚举类进行注入,让实体类字段能够简单快捷的使用枚举属性
+  #typeEnumsPackage: null
+  # 启动时是否检查 MyBatis XML 文件的存在,默认不检查
+  checkConfigLocation: false
+  # 通过该属性可指定 MyBatis 的执行器,MyBatis 的执行器总共有三种:
+  # SIMPLE:该执行器类型不做特殊的事情,为每个语句的执行创建一个新的预处理语句(PreparedStatement)
+  # REUSE:该执行器类型会复用预处理语句(PreparedStatement)
+  # BATCH:该执行器类型会批量执行所有的更新语句
+  executorType: SIMPLE
+  # 指定外部化 MyBatis Properties 配置,通过该配置可以抽离配置,实现不同环境的配置部署
+  configurationProperties: null
+  typeHandlersPackage: com.zhongzheng.common.type
+  configuration:
+    # 自动驼峰命名规则(camel case)映射
+    # 如果您的数据库命名符合规则无需使用 @TableField 注解指定数据库字段名
+    mapUnderscoreToCamelCase: true
+    # 默认枚举处理类,如果配置了该属性,枚举将统一使用指定处理器进行处理
+    # org.apache.ibatis.type.EnumTypeHandler : 存储枚举的名称
+    # org.apache.ibatis.type.EnumOrdinalTypeHandler : 存储枚举的索引
+    # com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler : 枚举类需要实现IEnum接口或字段标记@EnumValue注解.
+    defaultEnumTypeHandler: org.apache.ibatis.type.EnumTypeHandler
+    # 当设置为 true 的时候,懒加载的对象可能被任何懒属性全部加载,否则,每个属性都按需加载。需要和 lazyLoadingEnabled 一起使用。
+    aggressiveLazyLoading: true
+    # MyBatis 自动映射策略
+    # NONE:不启用自动映射
+    # PARTIAL:只对非嵌套的 resultMap 进行自动映射
+    # FULL:对所有的 resultMap 都进行自动映射
+    autoMappingBehavior: PARTIAL
+    # MyBatis 自动映射时未知列或未知属性处理策
+    # NONE:不做任何处理 (默认值)
+    # WARNING:以日志的形式打印相关警告信息
+    # FAILING:当作映射失败处理,并抛出异常和详细信息
+    autoMappingUnknownColumnBehavior: NONE
+    # Mybatis一级缓存,默认为 SESSION
+    # SESSION session级别缓存,同一个session相同查询语句不会再次查询数据库
+    # STATEMENT 关闭一级缓存
+    localCacheScope: SESSION
+    # 开启Mybatis二级缓存,默认为 true
+    cacheEnabled: true
+  global-config:
+    # 是否打印 Logo banner
+    banner: true
+    # 是否初始化 SqlRunner
+    enableSqlRunner: false
+    dbConfig:
+      # 主键类型
+      # AUTO 数据库ID自增
+      # NONE 空
+      # INPUT 用户输入ID
+      # ASSIGN_ID 全局唯一ID
+      # ASSIGN_UUID 全局唯一ID UUID
+      idType: AUTO
+      # 表名前缀
+      tablePrefix: null
+      # 字段 format,例: %s,(对主键无效)
+      columnFormat: null
+      # 表名是否使用驼峰转下划线命名,只对表名生效
+      tableUnderline: true
+      # 大写命名,对表名和字段名均生效
+      capitalMode: false
+      # 全局的entity的逻辑删除字段属性名
+      logicDeleteField: null
+      # 逻辑已删除值
+      logicDeleteValue: 2
+      # 逻辑未删除值
+      logicNotDeleteValue: 0
+      # 字段验证策略之 insert,在 insert 的时候的字段验证策略
+      # IGNORED 忽略判断
+      # NOT_NULL 非NULL判断
+      # NOT_EMPTY 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断)
+      # DEFAULT 默认的,一般只用于注解里
+      # NEVER 不加入 SQL
+      insertStrategy: NOT_EMPTY
+      # 字段验证策略之 update,在 update 的时候的字段验证策略
+      updateStrategy: NOT_EMPTY
+      # 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
+      selectStrategy: NOT_EMPTY
+  # 开启多租户
+  tenant:
+    enabled-tenant: false
+# PageHelper分页插件
+pagehelper:
+  helperDialect: mysql
+  reasonable: true
+  supportMethodsArguments: true
+  params: count=countSql
+# Swagger配置
+swagger:
+  # 是否开启swagger
+  enabled: true
+  # 请求前缀
+  pathMapping:
+knife4j:
+  enable: true
+  setting:
+    enableFooter: false
+
+# 防止XSS攻击
+xss:
+  # 过滤开关
+  enabled: true
+  # 排除链接(多个用逗号分隔)
+  excludes: /system/notice/*
+  # 匹配链接
+  urlPatterns: /system/*,/monitor/*,/tool/*
+
+feign:
+  # 开启压缩
+  compression:
+    request:
+      enabled: true
+    response:
+      enabled: true
+  okhttp:
+    enabled: true
+  hystrix:
+    enabled: true
+
+poliv:
+  sdk:
+    userid: egsxlptzdq
+    appId: ezl5uy4zei
+    appSecret: 2bf5bb3c31d34531943df10284edd50b
+
+tencent:
+  cloud:
+    SecretId: AKIDd6XkjTw9D1atwkJceS2NSIuHPK1ThfOr
+    SecretKey: GG2ZqrdCWcS6Yx72h6F7k7E4ey2qPnwq
+
+aliyun:
+  sms:
+    signName: 中正科技
+    registerTemplateCode: SMS_228670004
+    loginTemplateCode: SMS_228670005
+    forgetTemplateCode: SMS_228685033
+    pwdTemplateCode: SMS_230220381
+    bindNewTelCode: SMS_232178371
+    accessKeyId: LTAIgC8O2WUXvXuR
+    accessKeySecret: 1yyCazuT1M6MruBXzgFjP0p9gdMlwX
+    OpenTheGoodsCode: SMS_230970155     #商品开通提醒
+    informationNotificationCode: SMS_230965149  #完善报名资料通知
+    materialReviewCode: SMS_230980165         #报名资料审核通过通知
+    NotificationOfFailureCode: SMS_230980172  #报名资料审核不通过通知
+    remainingDaysValidityCode: SMS_236566823  #开通班级有效期还剩天数
+    completionReminderCode: SMS_230965157   #学时学习完成提醒
+    schoolHoursCode: SMS_230970166    #学时机构审核通过提醒
+    auditFailedCode: SMS_230970167  #学时机构审核不通过提醒
+    ReminderApproval: SMS_231200314 #学时机构审核通过提醒
+    passTheReminder: SMS_230980180  #学时机构审核不通过提醒
+    bookingReminder: SMS_230980181  #考试预约提醒
+    cancellationReminder: SMS_230980183 #考试预约取消提醒
+    reservationSuccess: SMS_230980186 #考试预约成功提醒
+    examinationRemind: SMS_230960195  #考试提醒
+    newExamPass: SMS_230970179  #七大员新考考试通过提醒
+    newExamFail: SMS_235491082  #七大员新考考试不通过提醒
+    openingReminder: SMS_230970209  #七大员题库开通提醒(12-22
+    classRemind: SMS_230965224  #二建继教开班提醒
+    OverdueReminder: SMS_230980259  #班级过期提醒
+    OverdueReminderHave: SMS_230965228  #班级过期提醒有学习次数
+    planReminder: SMS_230970248     #学习计划提醒
+    commitmentCode: SMS_231190546     #承诺书审核通过通知
+    commitmentFailsCode: SMS_231215516     #承诺书审核不通过通知
+    mockBookingReminder: SMS_243430276     #模考预约提醒
+    mockRemind: SMS_243355276      #模考开始提醒
+    liveStartRemind: SMS_243345514      #直播开课提醒
+    buyNotStudyStudentRemind : SMS_247745294  #学生购买未学习
+    buyNotStudyTeacherRemind : SMS_247935257  #学生购买未学习老师
+    longNotStudyStudentRemind: SMS_247910221  #学生长时间未学习
+    longNotStudyTeacherRemind: SMS_247765294  #学生长时间未学习老师
+    signCommitmentRemind: SMS_250390195  #签署承诺书提醒
+    todayExamNotRecordWarn: SMS_257713140  #学员打卡提醒(每日一练)
+    todayExamNotRecordTeachWarn: SMS_257702971  #学员打卡教务提醒(每日一练)
+    noFinishExamNoteCode: SMS_262460267  #未做完试卷通知

+ 2 - 0
zhongzheng-admin-data/src/main/resources/banner.txt

@@ -0,0 +1,2 @@
+Application Version: ${zhongzheng.version}
+Spring Boot Version: ${spring-boot.version}

+ 36 - 0
zhongzheng-admin-data/src/main/resources/i18n/messages.properties

@@ -0,0 +1,36 @@
+#错误消息
+not.null=* 必须填写
+user.jcaptcha.error=验证码错误
+user.jcaptcha.expire=验证码已失效
+user.not.exists=用户不存在/密码错误
+user.password.not.match=用户不存在/密码错误
+user.password.retry.limit.count=密码输入错误{0}次
+user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟
+user.password.delete=对不起,您的账号已被删除
+user.blocked=用户已封禁,请联系管理员
+role.blocked=角色已封禁,请联系管理员
+user.logout.success=退出成功
+
+length.not.valid=长度必须在{min}到{max}个字符之间
+
+user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
+user.password.not.valid=* 5-50个字符
+ 
+user.email.not.valid=邮箱格式错误
+user.mobile.phone.number.not.valid=手机号格式错误
+user.login.success=登录成功
+user.notfound=请重新登录
+user.forcelogout=管理员强制退出,请重新登录
+user.unknown.error=未知错误,请重新登录
+
+##文件上传消息
+upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
+upload.filename.exceed.length=上传的文件名最长{0}个字符
+
+##权限
+no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
+no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
+no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
+no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
+no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
+no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]

+ 108 - 0
zhongzheng-admin-data/src/main/resources/logback.xml

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <property name="log.path" value="./logs"/>
+    <property name="console.log.pattern"
+              value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
+    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>
+
+	<!-- 控制台输出 -->
+	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>${console.log.pattern}</pattern>
+            <charset>utf-8</charset>
+		</encoder>
+	</appender>
+
+    <!-- 控制台输出 -->
+    <appender name="file_console" class="ch.qos.logback.core.FileAppender">
+        <file>${log.path}/sys-console.log</file>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+        </filter>
+    </appender>
+	
+	<!-- 系统日志输出 -->
+	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/sys-info.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+			<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 日志最大的历史 60天 -->
+			<maxHistory>60</maxHistory>
+		</rollingPolicy>
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+	</appender>
+	
+	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/sys-error.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 日志最大的历史 60天 -->
+			<maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>ERROR</level>
+			<!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+			<!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+	
+	<!-- 用户访问日志输出  -->
+    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${log.path}/sys-user.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+	
+	<!-- 系统模块日志级别控制  -->
+	<logger name="com.zhongzheng" level="info" />
+	<!-- Spring日志级别控制  -->
+	<logger name="org.springframework" level="warn" />
+
+	<root level="info">
+		<appender-ref ref="console" />
+	</root>
+	
+	<!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <appender-ref ref="file_error" />
+        <appender-ref ref="file_console" />
+    </root>
+	
+	<!--系统用户操作日志-->
+    <logger name="sys-user" level="info">
+        <appender-ref ref="sys-user"/>
+    </logger>
+</configuration> 

+ 0 - 0
zhongzheng-admin-data/src/main/resources/mybatis/mybatis-config.xml


+ 2119 - 0
zhongzheng-admin-data/src/main/resources/templates/word.ftl

@@ -0,0 +1,2119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?mso-application progid="Word.Document"?>
+<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml"
+                xmlns:w10="urn:schemas-microsoft-com:office:word"
+                xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
+                xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
+                xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
+                xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
+                w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"
+                xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData"><o:DocumentProperties>
+        <o:Author>Administrator</o:Author>
+        <o:LastAuthor>初學者</o:LastAuthor>
+        <o:Created>2021-11-16T06:37:00Z</o:Created>
+        <o:LastSaved>2021-12-20T12:06:39Z</o:LastSaved>
+        <o:TotalTime>0</o:TotalTime>
+        <o:Version>14</o:Version>
+    </o:DocumentProperties>
+    <o:CustomDocumentProperties>
+        <o:KSOProductBuildVer dt:dt="string">2052-11.1.0.11115</o:KSOProductBuildVer>
+        <o:ICV dt:dt="string">55C38C70D21F4CD2AA50247A169F90C6</o:ICV>
+    </o:CustomDocumentProperties>
+    <w:fonts>
+        <w:defaultFonts w:ascii="Times New Roman" w:fareast="宋体" w:h-ansi="Times New Roman" w:cs="Times New Roman"/>
+        <w:font w:name="Times New Roman">
+            <w:panose-1 w:val="02020603050405020304"/>
+            <w:charset w:val="00"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF"
+                   w:csb-1="FFFF0000"/>
+        </w:font>
+        <w:font w:name="宋体">
+            <w:panose-1 w:val="02010600030101010101"/>
+            <w:charset w:val="86"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="00000203" w:usb-1="288F0000" w:usb-2="00000006" w:usb-3="00000000" w:csb-0="00040001"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="Wingdings">
+            <w:panose-1 w:val="05000000000000000000"/>
+            <w:charset w:val="02"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="Arial">
+            <w:panose-1 w:val="020B0604020202020204"/>
+            <w:charset w:val="01"/>
+            <w:family w:val="SWiss"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF"
+                   w:csb-1="FFFF0000"/>
+        </w:font>
+        <w:font w:name="黑体">
+            <w:panose-1 w:val="02010609060101010101"/>
+            <w:charset w:val="86"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="Courier New">
+            <w:panose-1 w:val="02070309020205020404"/>
+            <w:charset w:val="01"/>
+            <w:family w:val="Modern"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="E0002EFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF"
+                   w:csb-1="FFFF0000"/>
+        </w:font>
+        <w:font w:name="Symbol">
+            <w:panose-1 w:val="05050102010706020507"/>
+            <w:charset w:val="02"/>
+            <w:family w:val="Roman"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="Calibri">
+            <w:panose-1 w:val="020F0502020204030204"/>
+            <w:charset w:val="00"/>
+            <w:family w:val="SWiss"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="E4002EFF" w:usb-1="C000247B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="200001FF"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="方正小标宋简体">
+            <w:altName w:val="方正舒体"/>
+            <w:panose-1 w:val="00000000000000000000"/>
+            <w:charset w:val="00"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="方正舒体">
+            <w:panose-1 w:val="02010601030101010101"/>
+            <w:charset w:val="86"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="00000003" w:usb-1="080E0000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00040000"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="微软雅黑">
+            <w:panose-1 w:val="020B0503020204020204"/>
+            <w:charset w:val="86"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="80000287" w:usb-1="2ACF3C50" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="0004001F"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="仿宋">
+            <w:panose-1 w:val="02010609060101010101"/>
+            <w:charset w:val="86"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="仿宋_GB2312">
+            <w:altName w:val="仿宋"/>
+            <w:panose-1 w:val="00000000000000000000"/>
+            <w:charset w:val="00"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="Arial">
+            <w:panose-1 w:val="020B0604020202020204"/>
+            <w:charset w:val="00"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF"
+                   w:csb-1="FFFF0000"/>
+        </w:font>
+    </w:fonts>
+    <w:styles>
+        <w:latentStyles w:defLockedState="off" w:latentStyleCount="260">
+            <w:lsdException w:name="Normal"/>
+            <w:lsdException w:name="heading 1"/>
+            <w:lsdException w:name="heading 2"/>
+            <w:lsdException w:name="heading 3"/>
+            <w:lsdException w:name="heading 4"/>
+            <w:lsdException w:name="heading 5"/>
+            <w:lsdException w:name="heading 6"/>
+            <w:lsdException w:name="heading 7"/>
+            <w:lsdException w:name="heading 8"/>
+            <w:lsdException w:name="heading 9"/>
+            <w:lsdException w:name="index 1"/>
+            <w:lsdException w:name="index 2"/>
+            <w:lsdException w:name="index 3"/>
+            <w:lsdException w:name="index 4"/>
+            <w:lsdException w:name="index 5"/>
+            <w:lsdException w:name="index 6"/>
+            <w:lsdException w:name="index 7"/>
+            <w:lsdException w:name="index 8"/>
+            <w:lsdException w:name="index 9"/>
+            <w:lsdException w:name="toc 1"/>
+            <w:lsdException w:name="toc 2"/>
+            <w:lsdException w:name="toc 3"/>
+            <w:lsdException w:name="toc 4"/>
+            <w:lsdException w:name="toc 5"/>
+            <w:lsdException w:name="toc 6"/>
+            <w:lsdException w:name="toc 7"/>
+            <w:lsdException w:name="toc 8"/>
+            <w:lsdException w:name="toc 9"/>
+            <w:lsdException w:name="Normal Indent"/>
+            <w:lsdException w:name="footnote text"/>
+            <w:lsdException w:name="annotation text"/>
+            <w:lsdException w:name="header"/>
+            <w:lsdException w:name="footer"/>
+            <w:lsdException w:name="index heading"/>
+            <w:lsdException w:name="caption"/>
+            <w:lsdException w:name="table of figures"/>
+            <w:lsdException w:name="envelope address"/>
+            <w:lsdException w:name="envelope return"/>
+            <w:lsdException w:name="footnote reference"/>
+            <w:lsdException w:name="annotation reference"/>
+            <w:lsdException w:name="line number"/>
+            <w:lsdException w:name="page number"/>
+            <w:lsdException w:name="endnote reference"/>
+            <w:lsdException w:name="endnote text"/>
+            <w:lsdException w:name="table of authorities"/>
+            <w:lsdException w:name="macro"/>
+            <w:lsdException w:name="toa heading"/>
+            <w:lsdException w:name="List"/>
+            <w:lsdException w:name="List Bullet"/>
+            <w:lsdException w:name="List Number"/>
+            <w:lsdException w:name="List 2"/>
+            <w:lsdException w:name="List 3"/>
+            <w:lsdException w:name="List 4"/>
+            <w:lsdException w:name="List 5"/>
+            <w:lsdException w:name="List Bullet 2"/>
+            <w:lsdException w:name="List Bullet 3"/>
+            <w:lsdException w:name="List Bullet 4"/>
+            <w:lsdException w:name="List Bullet 5"/>
+            <w:lsdException w:name="List Number 2"/>
+            <w:lsdException w:name="List Number 3"/>
+            <w:lsdException w:name="List Number 4"/>
+            <w:lsdException w:name="List Number 5"/>
+            <w:lsdException w:name="Title"/>
+            <w:lsdException w:name="Closing"/>
+            <w:lsdException w:name="Signature"/>
+            <w:lsdException w:name="Default Paragraph Font"/>
+            <w:lsdException w:name="Body Text"/>
+            <w:lsdException w:name="Body Text Indent"/>
+            <w:lsdException w:name="List Continue"/>
+            <w:lsdException w:name="List Continue 2"/>
+            <w:lsdException w:name="List Continue 3"/>
+            <w:lsdException w:name="List Continue 4"/>
+            <w:lsdException w:name="List Continue 5"/>
+            <w:lsdException w:name="Message Header"/>
+            <w:lsdException w:name="Subtitle"/>
+            <w:lsdException w:name="Salutation"/>
+            <w:lsdException w:name="Date"/>
+            <w:lsdException w:name="Body Text First Indent"/>
+            <w:lsdException w:name="Body Text First Indent 2"/>
+            <w:lsdException w:name="Note Heading"/>
+            <w:lsdException w:name="Body Text 2"/>
+            <w:lsdException w:name="Body Text 3"/>
+            <w:lsdException w:name="Body Text Indent 2"/>
+            <w:lsdException w:name="Body Text Indent 3"/>
+            <w:lsdException w:name="Block Text"/>
+            <w:lsdException w:name="Hyperlink"/>
+            <w:lsdException w:name="FollowedHyperlink"/>
+            <w:lsdException w:name="Strong"/>
+            <w:lsdException w:name="Emphasis"/>
+            <w:lsdException w:name="Document Map"/>
+            <w:lsdException w:name="Plain Text"/>
+            <w:lsdException w:name="E-mail Signature"/>
+            <w:lsdException w:name="Normal (Web)"/>
+            <w:lsdException w:name="HTML Acronym"/>
+            <w:lsdException w:name="HTML Address"/>
+            <w:lsdException w:name="HTML Cite"/>
+            <w:lsdException w:name="HTML Code"/>
+            <w:lsdException w:name="HTML Definition"/>
+            <w:lsdException w:name="HTML Keyboard"/>
+            <w:lsdException w:name="HTML Preformatted"/>
+            <w:lsdException w:name="HTML Sample"/>
+            <w:lsdException w:name="HTML Typewriter"/>
+            <w:lsdException w:name="HTML Variable"/>
+            <w:lsdException w:name="Normal Table"/>
+            <w:lsdException w:name="annotation subject"/>
+            <w:lsdException w:name="Table Simple 1"/>
+            <w:lsdException w:name="Table Simple 2"/>
+            <w:lsdException w:name="Table Simple 3"/>
+            <w:lsdException w:name="Table Classic 1"/>
+            <w:lsdException w:name="Table Classic 2"/>
+            <w:lsdException w:name="Table Classic 3"/>
+            <w:lsdException w:name="Table Classic 4"/>
+            <w:lsdException w:name="Table Colorful 1"/>
+            <w:lsdException w:name="Table Colorful 2"/>
+            <w:lsdException w:name="Table Colorful 3"/>
+            <w:lsdException w:name="Table Columns 1"/>
+            <w:lsdException w:name="Table Columns 2"/>
+            <w:lsdException w:name="Table Columns 3"/>
+            <w:lsdException w:name="Table Columns 4"/>
+            <w:lsdException w:name="Table Columns 5"/>
+            <w:lsdException w:name="Table Grid 1"/>
+            <w:lsdException w:name="Table Grid 2"/>
+            <w:lsdException w:name="Table Grid 3"/>
+            <w:lsdException w:name="Table Grid 4"/>
+            <w:lsdException w:name="Table Grid 5"/>
+            <w:lsdException w:name="Table Grid 6"/>
+            <w:lsdException w:name="Table Grid 7"/>
+            <w:lsdException w:name="Table Grid 8"/>
+            <w:lsdException w:name="Table List 1"/>
+            <w:lsdException w:name="Table List 2"/>
+            <w:lsdException w:name="Table List 3"/>
+            <w:lsdException w:name="Table List 4"/>
+            <w:lsdException w:name="Table List 5"/>
+            <w:lsdException w:name="Table List 6"/>
+            <w:lsdException w:name="Table List 7"/>
+            <w:lsdException w:name="Table List 8"/>
+            <w:lsdException w:name="Table 3D effects 1"/>
+            <w:lsdException w:name="Table 3D effects 2"/>
+            <w:lsdException w:name="Table 3D effects 3"/>
+            <w:lsdException w:name="Table Contemporary"/>
+            <w:lsdException w:name="Table Elegant"/>
+            <w:lsdException w:name="Table Professional"/>
+            <w:lsdException w:name="Table Subtle 1"/>
+            <w:lsdException w:name="Table Subtle 2"/>
+            <w:lsdException w:name="Table Web 1"/>
+            <w:lsdException w:name="Table Web 2"/>
+            <w:lsdException w:name="Table Web 3"/>
+            <w:lsdException w:name="Balloon Text"/>
+            <w:lsdException w:name="Table Grid"/>
+            <w:lsdException w:name="Table Theme"/>
+            <w:lsdException w:name="Light Shading"/>
+            <w:lsdException w:name="Light List"/>
+            <w:lsdException w:name="Light Grid"/>
+            <w:lsdException w:name="Medium Shading 1"/>
+            <w:lsdException w:name="Medium Shading 2"/>
+            <w:lsdException w:name="Medium List 1"/>
+            <w:lsdException w:name="Medium List 2"/>
+            <w:lsdException w:name="Medium Grid 1"/>
+            <w:lsdException w:name="Medium Grid 2"/>
+            <w:lsdException w:name="Medium Grid 3"/>
+            <w:lsdException w:name="Dark List"/>
+            <w:lsdException w:name="Colorful Shading"/>
+            <w:lsdException w:name="Colorful List"/>
+            <w:lsdException w:name="Colorful Grid"/>
+            <w:lsdException w:name="Light Shading Accent 1"/>
+            <w:lsdException w:name="Light List Accent 1"/>
+            <w:lsdException w:name="Light Grid Accent 1"/>
+            <w:lsdException w:name="Medium Shading 1 Accent 1"/>
+            <w:lsdException w:name="Medium Shading 2 Accent 1"/>
+            <w:lsdException w:name="Medium List 1 Accent 1"/>
+            <w:lsdException w:name="Medium List 2 Accent 1"/>
+            <w:lsdException w:name="Medium Grid 1 Accent 1"/>
+            <w:lsdException w:name="Medium Grid 2 Accent 1"/>
+            <w:lsdException w:name="Medium Grid 3 Accent 1"/>
+            <w:lsdException w:name="Dark List Accent 1"/>
+            <w:lsdException w:name="Colorful Shading Accent 1"/>
+            <w:lsdException w:name="Colorful List Accent 1"/>
+            <w:lsdException w:name="Colorful Grid Accent 1"/>
+            <w:lsdException w:name="Light Shading Accent 2"/>
+            <w:lsdException w:name="Light List Accent 2"/>
+            <w:lsdException w:name="Light Grid Accent 2"/>
+            <w:lsdException w:name="Medium Shading 1 Accent 2"/>
+            <w:lsdException w:name="Medium Shading 2 Accent 2"/>
+            <w:lsdException w:name="Medium List 1 Accent 2"/>
+            <w:lsdException w:name="Medium List 2 Accent 2"/>
+            <w:lsdException w:name="Medium Grid 1 Accent 2"/>
+            <w:lsdException w:name="Medium Grid 2 Accent 2"/>
+            <w:lsdException w:name="Medium Grid 3 Accent 2"/>
+            <w:lsdException w:name="Dark List Accent 2"/>
+            <w:lsdException w:name="Colorful Shading Accent 2"/>
+            <w:lsdException w:name="Colorful List Accent 2"/>
+            <w:lsdException w:name="Colorful Grid Accent 2"/>
+            <w:lsdException w:name="Light Shading Accent 3"/>
+            <w:lsdException w:name="Light List Accent 3"/>
+            <w:lsdException w:name="Light Grid Accent 3"/>
+            <w:lsdException w:name="Medium Shading 1 Accent 3"/>
+            <w:lsdException w:name="Medium Shading 2 Accent 3"/>
+            <w:lsdException w:name="Medium List 1 Accent 3"/>
+            <w:lsdException w:name="Medium List 2 Accent 3"/>
+            <w:lsdException w:name="Medium Grid 1 Accent 3"/>
+            <w:lsdException w:name="Medium Grid 2 Accent 3"/>
+            <w:lsdException w:name="Medium Grid 3 Accent 3"/>
+            <w:lsdException w:name="Dark List Accent 3"/>
+            <w:lsdException w:name="Colorful Shading Accent 3"/>
+            <w:lsdException w:name="Colorful List Accent 3"/>
+            <w:lsdException w:name="Colorful Grid Accent 3"/>
+            <w:lsdException w:name="Light Shading Accent 4"/>
+            <w:lsdException w:name="Light List Accent 4"/>
+            <w:lsdException w:name="Light Grid Accent 4"/>
+            <w:lsdException w:name="Medium Shading 1 Accent 4"/>
+            <w:lsdException w:name="Medium Shading 2 Accent 4"/>
+            <w:lsdException w:name="Medium List 1 Accent 4"/>
+            <w:lsdException w:name="Medium List 2 Accent 4"/>
+            <w:lsdException w:name="Medium Grid 1 Accent 4"/>
+            <w:lsdException w:name="Medium Grid 2 Accent 4"/>
+            <w:lsdException w:name="Medium Grid 3 Accent 4"/>
+            <w:lsdException w:name="Dark List Accent 4"/>
+            <w:lsdException w:name="Colorful Shading Accent 4"/>
+            <w:lsdException w:name="Colorful List Accent 4"/>
+            <w:lsdException w:name="Colorful Grid Accent 4"/>
+            <w:lsdException w:name="Light Shading Accent 5"/>
+            <w:lsdException w:name="Light List Accent 5"/>
+            <w:lsdException w:name="Light Grid Accent 5"/>
+            <w:lsdException w:name="Medium Shading 1 Accent 5"/>
+            <w:lsdException w:name="Medium Shading 2 Accent 5"/>
+            <w:lsdException w:name="Medium List 1 Accent 5"/>
+            <w:lsdException w:name="Medium List 2 Accent 5"/>
+            <w:lsdException w:name="Medium Grid 1 Accent 5"/>
+            <w:lsdException w:name="Medium Grid 2 Accent 5"/>
+            <w:lsdException w:name="Medium Grid 3 Accent 5"/>
+            <w:lsdException w:name="Dark List Accent 5"/>
+            <w:lsdException w:name="Colorful Shading Accent 5"/>
+            <w:lsdException w:name="Colorful List Accent 5"/>
+            <w:lsdException w:name="Colorful Grid Accent 5"/>
+            <w:lsdException w:name="Light Shading Accent 6"/>
+            <w:lsdException w:name="Light List Accent 6"/>
+            <w:lsdException w:name="Light Grid Accent 6"/>
+            <w:lsdException w:name="Medium Shading 1 Accent 6"/>
+            <w:lsdException w:name="Medium Shading 2 Accent 6"/>
+            <w:lsdException w:name="Medium List 1 Accent 6"/>
+            <w:lsdException w:name="Medium List 2 Accent 6"/>
+            <w:lsdException w:name="Medium Grid 1 Accent 6"/>
+            <w:lsdException w:name="Medium Grid 2 Accent 6"/>
+            <w:lsdException w:name="Medium Grid 3 Accent 6"/>
+            <w:lsdException w:name="Dark List Accent 6"/>
+            <w:lsdException w:name="Colorful Shading Accent 6"/>
+            <w:lsdException w:name="Colorful List Accent 6"/>
+            <w:lsdException w:name="Colorful Grid Accent 6"/>
+        </w:latentStyles>
+        <w:style w:type="paragraph" w:styleId="a1" w:default="on">
+            <w:name w:val="Normal"/>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Arial" w:hint="default"/>
+                <w:sz w:val="22"/>
+                <w:sz-cs w:val="22"/>
+                <w:lang w:val="ZH-CN" w:fareast="EN-US" w:bidi="AR-SA"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="paragraph" w:styleId="2">
+            <w:name w:val="heading 1"/>
+            <w:basedOn w:val="a1"/>
+            <w:next w:val="a1"/>
+            <w:pPr>
+                <w:keepNext/>
+                <w:keepLines/>
+                <w:spacing w:before="480" w:after="0"/>
+                <w:outlineLvl w:val="0"/>
+            </w:pPr>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:b/>
+                <w:b-cs/>
+                <w:color w:val="366091"/>
+                <w:sz w:val="28"/>
+                <w:sz-cs w:val="28"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="paragraph" w:styleId="3">
+            <w:name w:val="heading 2"/>
+            <w:basedOn w:val="a1"/>
+            <w:next w:val="a1"/>
+            <w:link w:val="a14"/>
+            <w:pPr>
+                <w:keepNext/>
+                <w:keepLines/>
+                <w:spacing w:before="200" w:after="0"/>
+                <w:outlineLvl w:val="1"/>
+            </w:pPr>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:b/>
+                <w:b-cs/>
+                <w:color w:val="4F81BD"/>
+                <w:sz w:val="26"/>
+                <w:sz-cs w:val="26"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="paragraph" w:styleId="4">
+            <w:name w:val="heading 3"/>
+            <w:basedOn w:val="a1"/>
+            <w:next w:val="a1"/>
+            <w:link w:val="a15"/>
+            <w:pPr>
+                <w:keepNext/>
+                <w:keepLines/>
+                <w:spacing w:before="200" w:after="0"/>
+                <w:outlineLvl w:val="2"/>
+            </w:pPr>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:b/>
+                <w:b-cs/>
+                <w:color w:val="4F81BD"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="paragraph" w:styleId="5">
+            <w:name w:val="heading 4"/>
+            <w:basedOn w:val="a1"/>
+            <w:next w:val="a1"/>
+            <w:link w:val="a16"/>
+            <w:pPr>
+                <w:keepNext/>
+                <w:keepLines/>
+                <w:spacing w:before="200" w:after="0"/>
+                <w:outlineLvl w:val="3"/>
+            </w:pPr>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:b/>
+                <w:b-cs/>
+                <w:i/>
+                <w:i-cs/>
+                <w:color w:val="4F81BD"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="paragraph" w:styleId="6">
+            <w:name w:val="heading 5"/>
+            <w:basedOn w:val="a1"/>
+            <w:next w:val="a1"/>
+            <w:link w:val="a17"/>
+            <w:pPr>
+                <w:keepNext/>
+                <w:keepLines/>
+                <w:spacing w:before="200" w:after="0"/>
+                <w:outlineLvl w:val="4"/>
+            </w:pPr>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:color w:val="243F61"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="paragraph" w:styleId="7">
+            <w:name w:val="heading 6"/>
+            <w:basedOn w:val="a1"/>
+            <w:next w:val="a1"/>
+            <w:link w:val="a18"/>
+            <w:pPr>
+                <w:keepNext/>
+                <w:keepLines/>
+                <w:spacing w:before="200" w:after="0"/>
+                <w:outlineLvl w:val="5"/>
+            </w:pPr>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:i/>
+                <w:i-cs/>
+                <w:color w:val="243F61"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="paragraph" w:styleId="8">
+            <w:name w:val="heading 7"/>
+            <w:basedOn w:val="a1"/>
+            <w:next w:val="a1"/>
+            <w:link w:val="a19"/>
+            <w:pPr>
+                <w:keepNext/>
+                <w:keepLines/>
+                <w:spacing w:before="200" w:after="0"/>
+                <w:outlineLvl w:val="6"/>
+            </w:pPr>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:i/>
+                <w:i-cs/>
+                <w:color w:val="3F3F3F"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="paragraph" w:styleId="9">
+            <w:name w:val="heading 8"/>
+            <w:basedOn w:val="a1"/>
+            <w:next w:val="a1"/>
+            <w:link w:val="a20"/>
+            <w:pPr>
+                <w:keepNext/>
+                <w:keepLines/>
+                <w:spacing w:before="200" w:after="0"/>
+                <w:outlineLvl w:val="7"/>
+            </w:pPr>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:color w:val="3F3F3F"/>
+                <w:sz w:val="20"/>
+                <w:sz-cs w:val="20"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="paragraph" w:styleId="10">
+            <w:name w:val="heading 9"/>
+            <w:basedOn w:val="a1"/>
+            <w:next w:val="a1"/>
+            <w:link w:val="a21"/>
+            <w:pPr>
+                <w:keepNext/>
+                <w:keepLines/>
+                <w:spacing w:before="200" w:after="0"/>
+                <w:outlineLvl w:val="8"/>
+            </w:pPr>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:i/>
+                <w:i-cs/>
+                <w:color w:val="3F3F3F"/>
+                <w:sz w:val="20"/>
+                <w:sz-cs w:val="20"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="character" w:styleId="a13" w:default="on">
+            <w:name w:val="Default Paragraph Font"/>
+            <w:semiHidden/>
+        </w:style>
+        <w:style w:type="table" w:styleId="a11" w:default="on">
+            <w:name w:val="Normal Table"/>
+            <w:semiHidden/>
+            <w:tblPr>
+                <w:tblCellMar>
+                    <w:top w:w="0" w:type="dxa"/>
+                    <w:left w:w="108" w:type="dxa"/>
+                    <w:bottom w:w="0" w:type="dxa"/>
+                    <w:right w:w="108" w:type="dxa"/>
+                </w:tblCellMar>
+            </w:tblPr>
+        </w:style>
+        <w:style w:type="table" w:styleId="a12">
+            <w:name w:val="Table Grid"/>
+            <w:basedOn w:val="a11"/>
+            <w:pPr>
+                <w:pStyle w:val="a11"/>
+                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+            </w:pPr>
+            <w:tblPr>
+                <w:tblBorders>
+                    <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
+                    <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
+                    <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
+                    <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
+                    <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
+                    <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
+                </w:tblBorders>
+                <w:tblCellMar>
+                    <w:top w:w="0" w:type="dxa"/>
+                    <w:left w:w="108" w:type="dxa"/>
+                    <w:bottom w:w="0" w:type="dxa"/>
+                    <w:right w:w="108" w:type="dxa"/>
+                </w:tblCellMar>
+            </w:tblPr>
+        </w:style>
+        <w:style w:type="character" w:styleId="a14">
+            <w:name w:val="Heading 2 Char"/>
+            <w:basedOn w:val="a13"/>
+            <w:link w:val="3"/>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:b/>
+                <w:b-cs/>
+                <w:color w:val="4F81BD"/>
+                <w:sz w:val="26"/>
+                <w:sz-cs w:val="26"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="character" w:styleId="a15">
+            <w:name w:val="Heading 3 Char"/>
+            <w:basedOn w:val="a13"/>
+            <w:link w:val="4"/>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:b/>
+                <w:b-cs/>
+                <w:color w:val="4F81BD"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="character" w:styleId="a16">
+            <w:name w:val="Heading 4 Char"/>
+            <w:basedOn w:val="a13"/>
+            <w:link w:val="5"/>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:b/>
+                <w:b-cs/>
+                <w:i/>
+                <w:i-cs/>
+                <w:color w:val="4F81BD"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="character" w:styleId="a17">
+            <w:name w:val="Heading 5 Char"/>
+            <w:basedOn w:val="a13"/>
+            <w:link w:val="6"/>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:color w:val="243F61"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="character" w:styleId="a18">
+            <w:name w:val="Heading 6 Char"/>
+            <w:basedOn w:val="a13"/>
+            <w:link w:val="7"/>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:i/>
+                <w:i-cs/>
+                <w:color w:val="243F61"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="character" w:styleId="a19">
+            <w:name w:val="Heading 7 Char"/>
+            <w:basedOn w:val="a13"/>
+            <w:link w:val="8"/>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:i/>
+                <w:i-cs/>
+                <w:color w:val="3F3F3F"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="character" w:styleId="a20">
+            <w:name w:val="Heading 8 Char"/>
+            <w:basedOn w:val="a13"/>
+            <w:link w:val="9"/>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:color w:val="3F3F3F"/>
+                <w:sz w:val="20"/>
+                <w:sz-cs w:val="20"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="character" w:styleId="a21">
+            <w:name w:val="Heading 9 Char"/>
+            <w:basedOn w:val="a13"/>
+            <w:link w:val="10"/>
+            <w:rPr>
+                <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:i/>
+                <w:i-cs/>
+                <w:color w:val="3F3F3F"/>
+                <w:sz w:val="20"/>
+                <w:sz-cs w:val="20"/>
+            </w:rPr>
+        </w:style>
+    </w:styles>
+    <w:bgPict>
+        <w:background/>
+        <v:background id="_x0000_s1025">
+            <v:fill on="f" focussize="0,0"/>
+        </v:background>
+    </w:bgPict>
+    <w:docPr>
+        <w:view w:val="print"/>
+        <w:zoom w:percent="110"/>
+        <w:characterSpacingControl w:val="DontCompress"/>
+        <w:documentProtection w:enforcement="off"/>
+        <w:doNotEmbedSystemFonts/>
+        <w:defaultTabStop w:val="720"/>
+        <w:displayHorizontalDrawingGridEvery w:val="1"/>
+        <w:displayVerticalDrawingGridEvery w:val="1"/>
+        <w:compat>
+            <w:doNotExpandShiftReturn/>
+            <w:useFELayout/>
+            <w:breakWrappedTables/>
+            <w:dontGrowAutofit/>
+            <w:useFELayout/>
+        </w:compat>
+    </w:docPr>
+    <w:body>
+        <wx:sect>
+            <w:p>
+                <w:pPr>
+                    <w:spacing w:line="440" w:line-rule="exact"/>
+                    <w:jc w:val="center"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:hint="default"/>
+                        <w:b/>
+                        <w:color w:val="000000"/>
+                        <w:sz w:val="36"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/>
+                    </w:rPr>
+                </w:pPr>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:hint="fareast"/>
+                        <w:b/>
+                        <w:color w:val="000000"/>
+                        <w:sz w:val="36"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/>
+                    </w:rPr>
+                    <w:t>住房和城乡建设领域施工现场专业人员</w:t>
+                </w:r>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:spacing w:line="440" w:line-rule="exact"/>
+                    <w:jc w:val="center"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="方正小标宋简体" w:h-ansi="微软雅黑" w:fareast="方正小标宋简体" w:hint="default"/>
+                        <w:color w:val="000000"/>
+                        <w:sz w:val="36"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/>
+                    </w:rPr>
+                </w:pPr>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:hint="fareast"/>
+                        <w:b/>
+                        <w:color w:val="000000"/>
+                        <w:sz w:val="36"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/>
+                    </w:rPr>
+                    <w:t>职业培训报名承诺书</w:t>
+                </w:r>
+            </w:p>
+            <w:tbl>
+                <w:tblPr>
+                    <w:tblStyle w:val="a12"/>
+                    <w:tblW w:w="8324" w:type="dxa"/>
+                    <w:jc w:val="center"/>
+                    <w:tblInd w:w="0" w:type="dxa"/>
+                    <w:tblBorders>
+                        <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                    </w:tblBorders>
+                    <w:tblLayout w:type="Fixed"/>
+                    <w:tblCellMar>
+                        <w:top w:w="0" w:type="dxa"/>
+                        <w:left w:w="108" w:type="dxa"/>
+                        <w:bottom w:w="0" w:type="dxa"/>
+                        <w:right w:w="108" w:type="dxa"/>
+                    </w:tblCellMar>
+                </w:tblPr>
+                <w:tblGrid>
+                    <w:gridCol w:w="1377"/>
+                    <w:gridCol w:w="1289"/>
+                    <w:gridCol w:w="13"/>
+                    <w:gridCol w:w="708"/>
+                    <w:gridCol w:w="701"/>
+                    <w:gridCol w:w="15"/>
+                    <w:gridCol w:w="1307"/>
+                    <w:gridCol w:w="1245"/>
+                    <w:gridCol w:w="33"/>
+                    <w:gridCol w:w="1636"/>
+                </w:tblGrid>
+                <w:tr>
+                    <w:tblPrEx>
+                        <w:tblBorders>
+                            <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        </w:tblBorders>
+                        <w:tblCellMar>
+                            <w:top w:w="0" w:type="dxa"/>
+                            <w:left w:w="108" w:type="dxa"/>
+                            <w:bottom w:w="0" w:type="dxa"/>
+                            <w:right w:w="108" w:type="dxa"/>
+                        </w:tblCellMar>
+                    </w:tblPrEx>
+                    <w:trPr>
+                        <w:trHeight w:val="510" w:h-rule="atLeast"/>
+                        <w:jc w:val="center"/>
+                    </w:trPr>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1377" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>姓 名</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1302" w:type="dxa"/>
+                            <w:gridSpan w:val="2"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="both"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${name}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="708" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>性别</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="716" w:type="dxa"/>
+                            <w:gridSpan w:val="2"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${s}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1307" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>培训岗位</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="2914" w:type="dxa"/>
+                            <w:gridSpan w:val="3"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${post}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                </w:tr>
+                <w:tr>
+                    <w:tblPrEx>
+                        <w:tblBorders>
+                            <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        </w:tblBorders>
+                        <w:tblCellMar>
+                            <w:top w:w="0" w:type="dxa"/>
+                            <w:left w:w="108" w:type="dxa"/>
+                            <w:bottom w:w="0" w:type="dxa"/>
+                            <w:right w:w="108" w:type="dxa"/>
+                        </w:tblCellMar>
+                    </w:tblPrEx>
+                    <w:trPr>
+                        <w:trHeight w:val="510" w:h-rule="atLeast"/>
+                        <w:jc w:val="center"/>
+                    </w:trPr>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1377" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>身份证号</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="2726" w:type="dxa"/>
+                            <w:gridSpan w:val="5"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${idcard}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1307" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>手机号码</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="2914" w:type="dxa"/>
+                            <w:gridSpan w:val="3"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${phone}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                </w:tr>
+                <w:tr>
+                    <w:tblPrEx>
+                        <w:tblBorders>
+                            <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        </w:tblBorders>
+                        <w:tblCellMar>
+                            <w:top w:w="0" w:type="dxa"/>
+                            <w:left w:w="108" w:type="dxa"/>
+                            <w:bottom w:w="0" w:type="dxa"/>
+                            <w:right w:w="108" w:type="dxa"/>
+                        </w:tblCellMar>
+                    </w:tblPrEx>
+                    <w:trPr>
+                        <w:trHeight w:val="510" w:h-rule="atLeast"/>
+                        <w:jc w:val="center"/>
+                    </w:trPr>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1377" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>毕业院校</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="4033" w:type="dxa"/>
+                            <w:gridSpan w:val="6"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${school}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1278" w:type="dxa"/>
+                            <w:gridSpan w:val="2"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>学历</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1636" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${edu}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                </w:tr>
+                <w:tr>
+                    <w:tblPrEx>
+                        <w:tblBorders>
+                            <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        </w:tblBorders>
+                        <w:tblCellMar>
+                            <w:top w:w="0" w:type="dxa"/>
+                            <w:left w:w="108" w:type="dxa"/>
+                            <w:bottom w:w="0" w:type="dxa"/>
+                            <w:right w:w="108" w:type="dxa"/>
+                        </w:tblCellMar>
+                    </w:tblPrEx>
+                    <w:trPr>
+                        <w:trHeight w:val="510" w:h-rule="atLeast"/>
+                        <w:jc w:val="center"/>
+                    </w:trPr>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1377" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>所学专业</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="2726" w:type="dxa"/>
+                            <w:gridSpan w:val="5"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${major}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1307" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>毕业时间</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="2914" w:type="dxa"/>
+                            <w:gridSpan w:val="3"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${time}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                </w:tr>
+                <w:tr>
+                    <w:tblPrEx>
+                        <w:tblBorders>
+                            <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        </w:tblBorders>
+                        <w:tblCellMar>
+                            <w:top w:w="0" w:type="dxa"/>
+                            <w:left w:w="108" w:type="dxa"/>
+                            <w:bottom w:w="0" w:type="dxa"/>
+                            <w:right w:w="108" w:type="dxa"/>
+                        </w:tblCellMar>
+                    </w:tblPrEx>
+                    <w:trPr>
+                        <w:trHeight w:val="510" w:h-rule="atLeast"/>
+                        <w:jc w:val="center"/>
+                    </w:trPr>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1377" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>工作年限</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1289" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${year}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1422" w:type="dxa"/>
+                            <w:gridSpan w:val="3"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>单位联系人</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1322" w:type="dxa"/>
+                            <w:gridSpan w:val="2"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${cname}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1245" w:type="dxa"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>联系电话</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="1669" w:type="dxa"/>
+                            <w:gridSpan w:val="2"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:jc w:val="center"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${cphone}</w:t>
+                            </w:r>
+                        </w:p>
+                    </w:tc>
+                </w:tr>
+                <w:tr>
+                    <w:tblPrEx>
+                        <w:tblBorders>
+                            <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        </w:tblBorders>
+                        <w:tblCellMar>
+                            <w:top w:w="0" w:type="dxa"/>
+                            <w:left w:w="108" w:type="dxa"/>
+                            <w:bottom w:w="0" w:type="dxa"/>
+                            <w:right w:w="108" w:type="dxa"/>
+                        </w:tblCellMar>
+                    </w:tblPrEx>
+                    <w:trPr>
+                        <w:trHeight w:val="636" w:h-rule="atLeast"/>
+                        <w:jc w:val="center"/>
+                    </w:trPr>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="8324" w:type="dxa"/>
+                            <w:gridSpan w:val="10"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:ind w:first-line="482" w:first-line-chars="200"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:b/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:ind w:first-line="482" w:first-line-chars="200"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋_GB2312" w:fareast="仿宋_GB2312" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:b/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>本人自愿做出如下承诺:</w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>本人已仔细阅读《广东省住房和城乡建设厅关于推进住房和城乡建设领域施工现场专业人员职业培训工作的通知〉的通知》全部内容并知晓和理解,本人的学历证书、身份证、工作年限、相片等所有资料完全真实、符合报名条件、资格审查要求和相关规定,本人在报名、审查、培训、测试等有关的事项中会严格遵守相关规定和要求,如有虚假或与实际规定不符等情况造成的一切后果由本人承担。
+                                </w:t>
+                            </w:r>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:ind w:first-line="480" w:first-line-chars="200"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>特此承诺!</w:t>
+                            </w:r>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:hint="fareast"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t></w:t>
+                            </w:r>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>承诺人(签字):</w:t>
+                            </w:r>
+                            <aml:annotation aml:id="0" w:type="Word.Bookmark.Start" w:name="signimg"/>
+                            <aml:annotation aml:id="0" w:type="Word.Bookmark.End"/>
+                            <w:r>
+                                <w:t></w:t>
+                            </w:r>
+                            <w:r>
+                                <w:pict>
+                                    <w:binData w:name="wordml://1.png">
+                                        ${image}
+                                    </w:binData>
+                                    <v:shape id="_x0000_s1026" o:spt="75" alt="" type="#_x0000_t75"
+                                             style="height:21.75pt;width:109.5pt;" filled="f" o:preferrelative="t"
+                                             stroked="f" coordsize="21600,21600">
+                                        <v:path/>
+                                        <v:fill on="f" focussize="0,0"/>
+                                        <v:stroke on="f"/>
+                                        <v:imagedata src="wordml://1.png" o:title=""/>
+                                        <o:lock v:ext="edit" aspectratio="t"/>
+                                        <w10:wrap type="none"/>
+                                        <w10:anchorlock/>
+                                    </v:shape>
+                                </w:pict>
+                            </w:r>
+                            <w:r>
+                                <w:t></w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:hint="fareast"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>       ${y}</w:t>
+                            </w:r>
+                            <w:r>
+                                <w:t>年</w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:hint="fareast"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${m}</w:t>
+                            </w:r>
+                            <w:r>
+                                <w:t>月</w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:hint="fareast"/>
+                                    <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                                </w:rPr>
+                                <w:t>${d}</w:t>
+                            </w:r>
+                            <w:r>
+                                <w:t>日</w:t>
+                            </w:r>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:ind w:first-line="480" w:first-line-chars="200"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                        </w:p>
+                    </w:tc>
+                </w:tr>
+                <w:tr>
+                    <w:tblPrEx>
+                        <w:tblBorders>
+                            <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                            <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
+                        </w:tblBorders>
+                        <w:tblCellMar>
+                            <w:top w:w="0" w:type="dxa"/>
+                            <w:left w:w="108" w:type="dxa"/>
+                            <w:bottom w:w="0" w:type="dxa"/>
+                            <w:right w:w="108" w:type="dxa"/>
+                        </w:tblCellMar>
+                    </w:tblPrEx>
+                    <w:trPr>
+                        <w:trHeight w:val="636" w:h-rule="atLeast"/>
+                        <w:jc w:val="center"/>
+                    </w:trPr>
+                    <w:tc>
+                        <w:tcPr>
+                            <w:tcW w:w="8324" w:type="dxa"/>
+                            <w:gridSpan w:val="10"/>
+                            <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
+                            <w:vAlign w:val="center"/>
+                        </w:tcPr>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:ind w:first-line="482" w:first-line-chars="200"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:b/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:ind w:first-line="482" w:first-line-chars="200"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:b/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>本单位自愿做出如下承诺:</w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>我单位已仔细阅读《广东省住房和城乡建设厅关于推进住房和城乡建设领域施工现场专业人员职业培训工作的通知〉的通知》全部内容并知晓和理解,以上人员为我单位工作人员,持有的学历证书、身份证、工作年限、相片等所有资料经我单位查验完全符合报名条件、资格审查要求和相关规定,以上人员在报名、审查、培训、测试等有关的事项中会严格遵守相关规定、通知和要求,如有虚假或与实际规定不符等情况,造成的一切后果由我单位承担。
+                                </w:t>
+                            </w:r>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:ind w:first-line="480" w:first-line-chars="200"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:b/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>特此承诺!</w:t>
+                            </w:r>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:ind w:first-line="480" w:first-line-chars="200"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:ind w:first-line="1680" w:first-line-chars="700"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t></w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t></w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>          单位(盖章):</w:t>
+                            </w:r>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:ind w:first-line="4920" w:first-line-chars="2050"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>20</w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>   年</w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t></w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>   月</w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t></w:t>
+                            </w:r>
+                            <w:r>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="fareast"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                                <w:t>   日</w:t>
+                            </w:r>
+                        </w:p>
+                        <w:p>
+                            <w:pPr>
+                                <w:spacing w:after="0" w:line="240" w:line-rule="auto"/>
+                                <w:ind w:first-line="5280" w:first-line-chars="2200"/>
+                                <w:rPr>
+                                    <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
+                                    <w:color w:val="000000"/>
+                                    <w:sz w:val="24"/>
+                                    <w:sz-cs w:val="24"/>
+                                </w:rPr>
+                            </w:pPr>
+                        </w:p>
+                    </w:tc>
+                </w:tr>
+            </w:tbl>
+            <w:p/>
+            <w:sectPr>
+                <w:pgSz w:w="11906" w:h="16838"/>
+                <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="708" w:footer="708"
+                         w:gutter="0"/>
+                <w:cols w:space="708"/>
+                <w:docGrid w:line-pitch="360"/>
+            </w:sectPr>
+        </wx:sect>
+    </w:body></w:wordDocument>

+ 118 - 0
zhongzheng-admin-data/src/main/resources/templates/wordPhone.ftl

@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+	<meta charset="UTF-8"></meta>
+	<meta http-equiv="X-UA-Compatible" content="IE=edge"></meta>
+	<meta name="viewport" content="width=device-width, initial-scale=1.0"></meta>
+	<title>Document</title>
+	<style>
+		* {
+			padding: 0;
+			margin: 0;
+			box-sizing: border-box;
+		}
+
+		#boxs {
+			margin: 20px auto;
+			width: 700px;
+			height: 900px;
+			padding: 15px;
+		}
+
+		.tabsty {
+			margin-top: 10px;
+			width: 100%;
+			border-collapse: collapse;
+		}
+
+		tr {
+			width: 100%;
+		}
+
+		td {
+			padding: 8px;
+			text-align: center;
+		}
+
+		.strong {
+			width: 100px;
+			font-weight: bold;
+		}
+	</style>
+</head>
+
+<body>
+	<div id="boxs">
+		<h2 style="text-align:center;">住房和城乡建设领域施工现场专业人员<br />
+			职业培训报名承诺书</h2>
+		<table border="1" class="tabsty">
+			<tr>
+				<td class="strong">姓 名</td>
+				<td>${name}</td>
+				<td class="strong">性别</td>
+				<td>${s}</td>
+				<td class="strong">培训岗位</td>
+				<td colspan="2">${post}</td>
+			</tr>
+			<tr>
+				<td class="strong">身份证号</td>
+				<td colspan="3">${idcard}</td>
+				<td class="strong">手机号码</td>
+				<td colspan="2">${phone}</td>
+			</tr>
+			<tr>
+				<td class="strong">毕业院校</td>
+				<td colspan="4">${school}</td>
+				<td class="strong">学历</td>
+				<td>${edu}</td>
+			</tr>
+			<tr>
+				<td class="strong">所学专业</td>
+				<td colspan="3">${major}</td>
+				<td class="strong">毕业时间</td>
+				<td colspan="2">${time}</td>
+			</tr>
+			<tr>
+				<td class="strong">工作年限</td>
+				<td>${year}</td>
+				<td class="strong">单位联系人</td>
+				<td>${cname}</td>
+				<td class="strong">联系电话</td>
+				<td colspan="2">${cphone}</td>
+			</tr>
+			<tr>
+				<td colspan="7" style="text-align: left;">
+					<div>
+						<span style="font-weight: bold;padding-left: 2em;">本人自愿做出如下承诺:</span>
+						本人已仔细阅读《广东省住房和城乡建设厅关于推进住房和城乡建设领域施工现场专业人员职业培训工作的通知〉的通知》全部内容并知晓和理解,本人的学历证书、身份证、工作年限、相片等所有资料完全真实、符合报名条件、资格审查要求和相关规定,本人在报名、审查、培训、测试等有关的事项中会严格遵守相关规定和要求,如有虚假或与实际规定不符等情况造成的一切后果由本人承担。
+						<br /><span style="padding: 2em;">特此承诺!</span>
+					</div>
+					<div style="margin:50px 0px 20px">
+						<strong style="display: inline-block;width: 59%;">承诺人(签名):<img style="width: 200px;height:100px;" src="${image}"></img> </strong>
+						<span style="display: inline-block;width: 39%;">${y} 年<span
+								style="display: inline-block;width: 40px;"></span>${m} 月<span
+								style="display: inline-block;width: 40px;"></span>${d} 日</span>
+					</div>
+				</td>
+			</tr>
+			<tr>
+				<td colspan="7" style="text-align: left;">
+					<div>
+						<span style="font-weight: bold;padding-left: 2em;">本单位自愿做出如下承诺:</span>
+						我单位已仔细阅读《广东省住房和城乡建设厅关于推进住房和城乡建设领域施工现场专业人员职业培训工作的通知〉的通知》全部内容并知晓和理解,以上人员为我单位工作人员,持有的学历证书、身份证、工作年限、相片等所有资料经我单位查验完全符合报名条件、资格审查要求和相关规定,以上人员在报名、审查、培训、测试等有关的事项中会严格遵守相关规定、通知和要求,如有虚假或与实际规定不符等情况,造成的一切后果由我单位承担。
+						<br /><span style="padding: 2em;">特此承诺!</span>
+					</div>
+					<div style="margin:50px 0px 20px">
+						<p style="text-align: center;">单位(盖章):</p>
+						<p style="text-align: right;padding-right: 50px;margin-top: 30px;"><span style="display: inline-block;width: 39%;">年<span
+							style="display: inline-block;width: 40px;"></span>月<span
+							style="display: inline-block;width: 40px;"></span>日</span></p>
+					</div>
+				</td>
+			</tr>
+		</table>
+	</div>
+</body>
+
+</html>

+ 0 - 26
zhongzheng-admin/pom.xml

@@ -24,32 +24,6 @@
             <optional>true</optional> <!-- 表示依赖不会传递 -->
         </dependency>
 
-
-
-<!--        &lt;!&ndash; swagger2&ndash;&gt;-->
-<!--        <dependency>-->
-<!--            <groupId>io.springfox</groupId>-->
-<!--            <artifactId>springfox-swagger2</artifactId>-->
-<!--        </dependency>-->
-
-<!--        &lt;!&ndash;防止进入swagger页面报类型转换错误,排除2.9.2中的引用,手动增加1.5.21版本&ndash;&gt;-->
-<!--        <dependency>-->
-<!--            <groupId>io.swagger</groupId>-->
-<!--            <artifactId>swagger-annotations</artifactId>-->
-<!--            <version>1.5.21</version>-->
-<!--        </dependency>-->
-
-<!--        <dependency>-->
-<!--            <groupId>io.swagger</groupId>-->
-<!--            <artifactId>swagger-models</artifactId>-->
-<!--            <version>1.5.21</version>-->
-<!--        </dependency>-->
-
-<!--        <dependency>-->
-<!--            <groupId>com.github.xiaoymin</groupId>-->
-<!--            <artifactId>swagger-bootstrap-ui</artifactId>-->
-<!--        </dependency>-->
-
         <dependency>
             <groupId>com.github.xiaoymin</groupId>
             <artifactId>knife4j-spring-boot-starter</artifactId>

+ 1 - 1
zhongzheng-admin/src/main/java/com/zhongzheng/ZhongZhengApplication.java

@@ -12,7 +12,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
  * @author zhongzheng
  */
 
-@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class })
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class})
 @EnableScheduling
 public class ZhongZhengApplication
 {

+ 6 - 6
zhongzheng-admin/src/main/java/com/zhongzheng/controller/CommonController.java

@@ -97,8 +97,8 @@ public class CommonController extends BaseController {
     @PostMapping("/common/decompression")
     public AjaxResult<List<String>> uploadDecompression(MultipartFile file, String param) throws Exception {
         String zhiyuan = System.getProperty("user.dir");
-        String path = zhiyuan + "/zhongzheng-admin/src/main/resources/fenpian";
         FileHandleBo bo = JSONObject.parseObject(param, FileHandleBo.class);
+        String path = zhiyuan + "/zhongzheng-admin/src/main/resources/fenpian"+bo.getTimeSign();
         String[] split = bo.getName().split("\\.");
         String fileName = bo.getFileMd5() + "_" + bo.getIndex()+"."+ split[split.length - 1];
         FileUploadUtils.uploadFragment(path, file, fileName);
@@ -133,9 +133,9 @@ public class CommonController extends BaseController {
     @PostMapping("/common/merge/file")
     public AjaxResult uploadDecompression(@RequestBody FileHandleBo bo) throws Exception {
         String zhiyuan = System.getProperty("user.dir");
-        String path = zhiyuan + "/zhongzheng-admin/src/main/resources/fenpian";
+        String path = zhiyuan + "/zhongzheng-admin/src/main/resources/fenpian"+bo.getTimeSign();
         //全部上传完成 合并文件返回文件名称
-        String toPath = zhiyuan + "/zhongzheng-admin/src/main/resources/zhiyuan";
+        String toPath = zhiyuan + "/zhongzheng-admin/src/main/resources/zhiyuan"+bo.getTimeSign();
         File file1 = new File(toPath);
         if (!file1.exists()) {
             file1.mkdirs();
@@ -149,12 +149,12 @@ public class CommonController extends BaseController {
                 //文件不一致,删除文件
                 ToFile.delete();
                 //删除分片资源
-                FileUtils.deleteFilePackage(zhiyuan + "/zhongzheng-admin/src/main/resources/fenpian");
+                FileUtils.deleteFilePackage(zhiyuan + "/zhongzheng-admin/src/main/resources/fenpian"+bo.getTimeSign());
                 throw new CustomException("文件上传失败!请重新上传");
             }
         }
         //删除分片资源
-        FileUtils.deleteFilePackage(zhiyuan + "/zhongzheng-admin/src/main/resources/fenpian");
+        FileUtils.deleteFilePackage(zhiyuan + "/zhongzheng-admin/src/main/resources/fenpian"+bo.getTimeSign());
         return AjaxResult.success();
     }
 
@@ -162,7 +162,7 @@ public class CommonController extends BaseController {
     public AjaxResult deleteDecompression(@RequestBody FileHandleBo bo) throws Exception {
         //删除合并文件
         String zhiyuan = System.getProperty("user.dir");
-        String toPath = zhiyuan + "/zhongzheng-admin/src/main/resources/zhiyuan";
+        String toPath = zhiyuan + "/zhongzheng-admin/src/main/resources/zhiyuan"+bo.getTimeSign();
         File file = new File(toPath);
         List<File> files = Arrays.stream(file.listFiles()).collect(Collectors.toList());
         if (!CollectionUtils.isEmpty(files)){

+ 45 - 79
zhongzheng-admin/src/main/resources/application-dev.yml

@@ -1,85 +1,51 @@
 # 数据源配置
 spring:
     datasource:
-        #配置hikari连接池
-        hikari:
-            minimum-idle: 10
-            maximum-pool-size: 20
-            connection-timeout: 10000
-            idle-timeout: 30000
-            connection-init-sql: set names utf8mb4
-        #动态数据源配置
-        dynamic:
-            primary: slave #设置默认的数据源或者数据源组,默认值即为master
-            strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
-            datasource:
-                #数据源
-                master:
-                    driver-class-name: com.mysql.cj.jdbc.Driver
-                    url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas_top?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
-                    username: root
-                    password: zhongzheng2021
-                #数据源
-                slave:
-                    driver-class-name: com.mysql.cj.jdbc.Driver
-                    url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
-                    username: root
-                    password: zhongzheng2021
-#    datasource:
-#        type: com.alibaba.druid.pool.DruidDataSource
-#        driverClassName: com.mysql.cj.jdbc.Driver
-#        druid:
-#            # 主库数据源
-#            master:
-#                url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
-#                username: root
-#                password:  zhongzheng2021
-#            # 从库数据源
-#            slave:
-#                # 从数据源开关/默认关闭
-#                enabled: false
-#                url:
-#                username:
-#                password:
-#            # 初始连接数
-#            initialSize: 5
-#            # 最小连接池数量
-#            minIdle: 10
-#            # 最大连接池数量
-#            maxActive: 20
-#            # 配置获取连接等待超时的时间
-#            maxWait: 60000
-#            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
-#            timeBetweenEvictionRunsMillis: 60000
-#            # 配置一个连接在池中最小生存的时间,单位是毫秒
-#            minEvictableIdleTimeMillis: 300000
-#            # 配置一个连接在池中最大生存的时间,单位是毫秒
-#            maxEvictableIdleTimeMillis: 900000
-#            # 配置检测连接是否有效
-#            validationQuery: SELECT 1 FROM DUAL
-#            testWhileIdle: true
-#            testOnBorrow: false
-#            testOnReturn: false
-#            webStatFilter:
-#                enabled: true
-#            statViewServlet:
-#                enabled: true
-#                # 设置白名单,不填则允许所有访问
-#                allow:
-#                url-pattern: /druid/*
-#                # 控制台管理用户名和密码
-#                login-username: ruoyi
-#                login-password: 123456
-#            filter:
-#                stat:
-#                    enabled: true
-#                    # 慢SQL记录
-#                    log-slow-sql: true
-#                    slow-sql-millis: 1000
-#                    merge-sql: true
-#                wall:
-#                    config:
-#                        multi-statement-allow: true
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: com.mysql.cj.jdbc.Driver
+        druid:
+            url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+            username: root
+            password: zhongzheng2021
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1 FROM DUAL
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            webStatFilter:
+                enabled: true
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username: ruoyi
+                login-password: 123456
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 1000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true
     # redis 配置
     redis:
         # 地址

+ 45 - 79
zhongzheng-admin/src/main/resources/application-pre.yml

@@ -1,85 +1,51 @@
 # 数据源配置
 spring:
     datasource:
-        #配置hikari连接池
-        hikari:
-            minimum-idle: 10
-            maximum-pool-size: 20
-            connection-timeout: 10000
-            idle-timeout: 30000
-            connection-init-sql: set names utf8mb4
-        #动态数据源配置
-        dynamic:
-            primary: slave #设置默认的数据源或者数据源组,默认值即为master
-            strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
-            datasource:
-                #数据源
-                master:
-                    driver-class-name: com.mysql.cj.jdbc.Driver
-                    url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas_top?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
-                    username: root
-                    password: zhongzheng2021
-                #数据源
-                slave:
-                    driver-class-name: com.mysql.cj.jdbc.Driver
-                    url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
-                    username: root
-                    password: zhongzheng2021
-#    datasource:
-#        type: com.alibaba.druid.pool.DruidDataSource
-#        driverClassName: com.mysql.cj.jdbc.Driver
-#        druid:
-#            # 主库数据源
-#            master:
-#                url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas_pre?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
-#                username: root
-#                password:  zhongzheng2021
-#            # 从库数据源
-#            slave:
-#                # 从数据源开关/默认关闭
-#                enabled: false
-#                url:
-#                username:
-#                password:
-#            # 初始连接数
-#            initialSize: 5
-#            # 最小连接池数量
-#            minIdle: 10
-#            # 最大连接池数量
-#            maxActive: 20
-#            # 配置获取连接等待超时的时间
-#            maxWait: 60000
-#            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
-#            timeBetweenEvictionRunsMillis: 60000
-#            # 配置一个连接在池中最小生存的时间,单位是毫秒
-#            minEvictableIdleTimeMillis: 300000
-#            # 配置一个连接在池中最大生存的时间,单位是毫秒
-#            maxEvictableIdleTimeMillis: 900000
-#            # 配置检测连接是否有效
-#            validationQuery: SELECT 1 FROM DUAL
-#            testWhileIdle: true
-#            testOnBorrow: false
-#            testOnReturn: false
-#            webStatFilter:
-#                enabled: true
-#            statViewServlet:
-#                enabled: true
-#                # 设置白名单,不填则允许所有访问
-#                allow:
-#                url-pattern: /druid/*
-#                # 控制台管理用户名和密码
-#                login-username: ruoyi
-#                login-password: 123456
-#            filter:
-#                stat:
-#                    enabled: true
-#                    # 慢SQL记录
-#                    log-slow-sql: true
-#                    slow-sql-millis: 2500
-#                    merge-sql: true
-#                wall:
-#                    config:
-#                        multi-statement-allow: true
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: com.mysql.cj.jdbc.Driver
+        druid:
+            url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+            username: root
+            password: zhongzheng2021
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1 FROM DUAL
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            webStatFilter:
+                enabled: true
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username: ruoyi
+                login-password: 123456
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 1000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true
     # redis 配置
     redis:
         # 地址

+ 45 - 79
zhongzheng-admin/src/main/resources/application-prod.yml

@@ -1,85 +1,51 @@
 # 数据源配置
 spring:
     datasource:
-        #配置hikari连接池
-        hikari:
-            minimum-idle: 10
-            maximum-pool-size: 20
-            connection-timeout: 10000
-            idle-timeout: 30000
-            connection-init-sql: set names utf8mb4
-        #动态数据源配置
-        dynamic:
-            primary: slave #设置默认的数据源或者数据源组,默认值即为master
-            strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
-            datasource:
-                #数据源
-                master:
-                    driver-class-name: com.mysql.cj.jdbc.Driver
-                    url: jdbc:mysql://rm-wz950fu2v70864v85.mysql.rds.aliyuncs.com/zz_edu_saas_top?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
-                    username: root
-                    password: gdxy2021!@#zzjykj
-                #数据源
-                slave:
-                    driver-class-name: com.mysql.cj.jdbc.Driver
-                    url: jdbc:mysql://rm-wz950fu2v70864v85.mysql.rds.aliyuncs.com/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
-                    username: root
-                    password: gdxy2021!@#zzjykj
-#    datasource:
-#        type: com.alibaba.druid.pool.DruidDataSource
-#        driverClassName: com.mysql.cj.jdbc.Driver
-#        druid:
-#            # 主库数据源
-#            master:
-#                url: jdbc:mysql://rm-wz950fu2v70864v85.mysql.rds.aliyuncs.com/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
-#                username: root
-#                password: gdxy2021!@#zzjykj
-#            # 从库数据源
-#            slave:
-#                # 从数据源开关/默认关闭
-#                enabled: false
-#                url:
-#                username:
-#                password:
-#            # 初始连接数
-#            initialSize: 5
-#            # 最小连接池数量
-#            minIdle: 10
-#            # 最大连接池数量
-#            maxActive: 20
-#            # 配置获取连接等待超时的时间
-#            maxWait: 60000
-#            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
-#            timeBetweenEvictionRunsMillis: 60000
-#            # 配置一个连接在池中最小生存的时间,单位是毫秒
-#            minEvictableIdleTimeMillis: 300000
-#            # 配置一个连接在池中最大生存的时间,单位是毫秒
-#            maxEvictableIdleTimeMillis: 900000
-#            # 配置检测连接是否有效
-#            validationQuery: SELECT 1 FROM DUAL
-#            testWhileIdle: true
-#            testOnBorrow: false
-#            testOnReturn: false
-#            webStatFilter:
-#                enabled: true
-#            statViewServlet:
-#                enabled: true
-#                # 设置白名单,不填则允许所有访问
-#                allow:
-#                url-pattern: /druid/*
-#                # 控制台管理用户名和密码
-#                login-username: ruoyi
-#                login-password: 123456
-#            filter:
-#                stat:
-#                    enabled: true
-#                    # 慢SQL记录
-#                    log-slow-sql: true
-#                    slow-sql-millis: 4000
-#                    merge-sql: true
-#                wall:
-#                    config:
-#                        multi-statement-allow: true
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: com.mysql.cj.jdbc.Driver
+        druid:
+            url: jdbc:mysql://rm-wz950fu2v70864v85.mysql.rds.aliyuncs.com/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+            username: root
+            password: gdxy2021!@#zzjykj
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1 FROM DUAL
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            webStatFilter:
+                enabled: true
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username: ruoyi
+                login-password: 123456
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 1000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true
     # redis 配置
     redis:
         # 地址

+ 4 - 4
zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java

@@ -20,8 +20,8 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {
 	public void insertFill(MetaObject metaObject) {
 		//根据属性名字设置要填充的值
 		if (metaObject.hasGetter("createTime")) {
-			if (metaObject.getValue("createTime") == null && enabledTenant) {
-				this.setFieldValByName("createTime", DateUtils.getNowDate(), metaObject);
+			if (metaObject.getValue("createTime") == null ) {
+				this.setFieldValByName("createTime", DateUtils.getNowTime(), metaObject);
 			}
 		}
 		if (metaObject.hasGetter("createBy")) {
@@ -39,8 +39,8 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {
 			}
 		}
 		if (metaObject.hasGetter("updateTime")) {
-			if (metaObject.getValue("updateTime") == null && enabledTenant) {
-				this.setFieldValByName("updateTime", DateUtils.getNowDate(), metaObject);
+			if (metaObject.getValue("updateTime") == null ) {
+				this.setFieldValByName("updateTime", DateUtils.getNowTime(), metaObject);
 			}
 		}
 	}

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/bo/FileHandleBo.java

@@ -27,4 +27,7 @@ public class FileHandleBo implements Serializable {
     @ApiModelProperty("完整文件的MD5值")
     private String fileMd5;
 
+    @ApiModelProperty("时间戳标识")
+    private Long timeSign;
+
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseHandoutsAddBo.java

@@ -52,4 +52,6 @@ public class CourseHandoutsAddBo {
     private List<CourseHandoutsBusinessAddBo> courseHandoutsBusinessAddBos;
     @ApiModelProperty("文件列表")
     private List<CourseFileAddBo> fileList;
+    @ApiModelProperty("时间戳标识")
+    private Long timeSign;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseHandoutsEditBo.java

@@ -62,4 +62,6 @@ public class CourseHandoutsEditBo {
 
     @ApiModelProperty("新增文件名称")
     private List<String> addFileNames;
+    @ApiModelProperty("时间戳标识")
+    private Long timeSign;
 }

+ 10 - 6
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseFileServiceImpl.java

@@ -65,14 +65,15 @@ public class CourseFileServiceImpl extends ServiceImpl<CourseFileMapper, CourseF
 
     @Override
     public boolean editHandouts(CourseHandoutsEditBo bo) {
+        log.error("修改讲义开始:"+ DateUtils.getNowTime());
         String zhiyuan = System.getProperty("user.dir");
-        String fromPath = zhiyuan+"/zhongzheng-admin/src/main/resources/zhiyuan";
+        String fromPath = zhiyuan+"/zhongzheng-admin/src/main/resources/zhiyuan"+bo.getTimeSign();
         File f = new File(fromPath);
         if (f.isDirectory()) {
             //解压压缩包
             List<File> collect = Arrays.stream(f.listFiles()).filter(x -> x.getName().contains(".zip")).collect(Collectors.toList());
             if (!CollectionUtils.isEmpty(collect)){
-                decompressingFiles(collect);
+                decompressingFiles(collect,bo.getTimeSign());
             }
         }
 
@@ -86,20 +87,22 @@ public class CourseFileServiceImpl extends ServiceImpl<CourseFileMapper, CourseF
         }catch (IOException e) {
             log.error("讲义删除本地资源失败:"+ DateUtils.getNowTime());
         }
+        log.error("修改讲义结束:"+ DateUtils.getNowTime());
         return true;
     }
 
 
     @Override
     public boolean addHandouts(CourseHandoutsAddBo bo) {
+        log.error("新增讲义开始:"+ DateUtils.getNowTime());
         String zhiyuan = System.getProperty("user.dir");
-        String fromPath = zhiyuan+"/zhongzheng-admin/src/main/resources/zhiyuan";
+        String fromPath = zhiyuan+"/zhongzheng-admin/src/main/resources/zhiyuan"+bo.getTimeSign();
         File f = new File(fromPath);
         if (f.isDirectory()) {
             //解压压缩包
             List<File> collect = Arrays.stream(f.listFiles()).filter(x -> x.getName().contains(".zip")).collect(Collectors.toList());
             if (!CollectionUtils.isEmpty(collect)){
-                decompressingFiles(collect);
+                decompressingFiles(collect,bo.getTimeSign());
             }
         }
         iCourseHandoutsService.addHandouts(fromPath,bo);
@@ -111,14 +114,15 @@ public class CourseFileServiceImpl extends ServiceImpl<CourseFileMapper, CourseF
         }catch (IOException e) {
             log.error("讲义删除本地资源失败:"+ DateUtils.getNowTime());
         }
+        log.error("新增讲义结束:"+ DateUtils.getNowTime());
         return true;
     }
 
-    private void decompressingFiles(List<File> files){
+    private void decompressingFiles(List<File> files,Long timeSign){
         String zhiyuan = System.getProperty("user.dir");
         files.forEach(file -> {
             try {
-                String destDirPath = zhiyuan+"/zhongzheng-admin/src/main/resources/zhiyuan";
+                String destDirPath = zhiyuan+"/zhongzheng-admin/src/main/resources/zhiyuan"+timeSign;
                 String substring = file.getName().substring(0, file.getName().indexOf("."));
                 File dirw = new File(destDirPath+"/"+substring);
                 if (!dirw.exists()){

+ 47 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdExamRoomBo.java

@@ -0,0 +1,47 @@
+package com.zhongzheng.modules.middleground.record.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月11日 16:53
+ */
+@Data
+public class CdExamRoomBo implements Serializable {
+
+    @ApiModelProperty("标识ID")
+    private Long signId;
+
+    @ApiModelProperty("考场类型:1普通场 2专场")
+    private Integer examType;
+
+    @ApiModelProperty("考试日期")
+    private Long examTime;
+
+    @ApiModelProperty("考试开始时间段")
+    private String examStartTime;
+
+    @ApiModelProperty("考试结束时间段")
+    private String examEndTime;
+
+    @ApiModelProperty("考试地点名称")
+    private String examSite;
+
+    @ApiModelProperty("考场人数")
+    private Integer examNum;
+
+    @ApiModelProperty("已约人数")
+    private Integer scheduledNum;
+
+    @ApiModelProperty("数据来源:1新系统 2旧系统 ")
+    private Integer dataFrom;
+
+    @ApiModelProperty("机构ID")
+    private Long tenantId;
+    @ApiModelProperty("类型:1七大员新考")
+    private Integer type;
+
+}

+ 24 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdExamRoomDetailBo.java

@@ -0,0 +1,24 @@
+package com.zhongzheng.modules.middleground.record.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月12日 16:24
+ */
+@Data
+public class CdExamRoomDetailBo implements Serializable {
+
+    /** 标识ID */
+    private Long sign;
+    /** 考场类型:1普通场 2专场 */
+    private Integer applyType;
+    /** 考场人数 */
+    private Integer examNum;
+    /** 已约人数 */
+    private Integer scheduledNum;
+    /** 数据来源:1新系统 2旧系统 */
+    private Integer dataFrom;
+}

+ 26 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdExamRoomQuery.java

@@ -0,0 +1,26 @@
+package com.zhongzheng.modules.middleground.record.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月11日 16:53
+ */
+@Data
+public class CdExamRoomQuery implements Serializable {
+
+    @ApiModelProperty("机构ID")
+    private Long tenantId;
+
+    @ApiModelProperty("考试日期")
+    private Long applyTime;
+
+    @ApiModelProperty("考试开始时间")
+    private String applyStartTime;
+
+    @ApiModelProperty("考试结束时间")
+    private String applyEndTime;
+}

+ 45 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdExamRoomUpdateBo.java

@@ -0,0 +1,45 @@
+package com.zhongzheng.modules.middleground.record.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月11日 16:53
+ */
+@Data
+public class CdExamRoomUpdateBo implements Serializable {
+
+    @ApiModelProperty("标识ID")
+    private Long signId;
+
+    @ApiModelProperty("考场类型:1普通场 2专场")
+    private Integer examType;
+
+    @ApiModelProperty("机构ID")
+    private Long tenantId;
+
+    @ApiModelProperty("考试日期")
+    private Long examTime;
+
+    @ApiModelProperty("考试开始时间段")
+    private String examStartTime;
+
+    @ApiModelProperty("考试结束时间段")
+    private String examEndTime;
+
+    @ApiModelProperty("考场人数")
+    private Integer examNum;
+
+    @ApiModelProperty("已约人数")
+    private Integer scheduledNum;
+
+    @ApiModelProperty("数据来源:1新系统 2旧系统 ")
+    private Integer dataFrom;
+
+    @ApiModelProperty("考试地点名称")
+    private String examSite;
+
+}

+ 33 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdUserExamSubscribeQueryBo.java

@@ -0,0 +1,33 @@
+package com.zhongzheng.modules.middleground.record.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月17日 11:37
+ */
+@Data
+public class CdUserExamSubscribeQueryBo implements Serializable {
+
+    @ApiModelProperty("用户名称")
+    private String userName;
+
+    @ApiModelProperty("预约状态:1正常 2取消 3过期 4未约")
+    private Integer subscribeStatus;
+
+    @ApiModelProperty("是否新考")
+    private Integer newApply;
+
+    @ApiModelProperty("证书编号")
+    private String certificateCode;
+
+    /** 分页大小 */
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+}

+ 52 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdUserSubscribeBo.java

@@ -0,0 +1,52 @@
+package com.zhongzheng.modules.middleground.record.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月17日 8:59
+ */
+@Data
+public class CdUserSubscribeBo implements Serializable {
+
+    /** 用户ID */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+    /** 用户姓名 */
+    @ApiModelProperty("用户姓名")
+    private String userName;
+    /** 用户身份证 */
+    @ApiModelProperty("用户身份证")
+    private String userCard;
+    /** 用户手机号码 */
+    @ApiModelProperty("用户手机号码")
+    private String userPhone;
+    /** 商品名称 */
+    @ApiModelProperty("商品名称")
+    private String goodsName;
+    /** 业务层次名称 */
+    @ApiModelProperty("业务层次名称")
+    private String businessName;
+    /** 考试次数 */
+    @ApiModelProperty("考试次数")
+    private Integer examNum;
+    /** 补考次数 */
+    @ApiModelProperty("补考次数")
+    private Integer replenishExamNum;
+    /** 刷题次数 */
+    @ApiModelProperty("刷题次数")
+    private Integer doQuestionNum;
+    /** 题库商家名称 */
+    @ApiModelProperty("题库商家名称")
+    private String questionMerchant;
+    /** 机构Id */
+    @ApiModelProperty("机构Id")
+    private Long tenantId;
+    @ApiModelProperty("数据来源:1新系统 2旧系统")
+    private Long dataFrom;
+    @ApiModelProperty("类型:1七大员新考")
+    private Integer type;
+}

+ 41 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/bo/CdUserSubscribeUpdateBo.java

@@ -0,0 +1,41 @@
+package com.zhongzheng.modules.middleground.record.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月17日 8:59
+ */
+@Data
+public class CdUserSubscribeUpdateBo implements Serializable {
+
+    /** 用户ID */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+    /** 用户身份证 */
+    @ApiModelProperty("用户身份证")
+    private String userCard;
+    /** 考试次数 */
+    @ApiModelProperty("考试次数")
+    private Integer examNum;
+    /** 补考次数 */
+    @ApiModelProperty("补考次数")
+    private Integer replenishExamNum;
+    /** 刷题次数 */
+    @ApiModelProperty("刷题次数")
+    private Integer doQuestionNum;
+    /** 题库商家名称 */
+    @ApiModelProperty("题库商家名称")
+    private String questionMerchant;
+    /** 机构Id */
+    @ApiModelProperty("机构Id")
+    private Long tenantId;
+    @ApiModelProperty("数据来源:1新系统 2旧系统")
+    private Long dataFrom;
+    @ApiModelProperty("类型:1七大员新考")
+    private Integer type;
+
+}

+ 57 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/domain/CdExamRoom.java

@@ -0,0 +1,57 @@
+package com.zhongzheng.modules.middleground.record.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月11日 16:53
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("cd_exam_room")
+public class CdExamRoom implements Serializable {
+
+    @TableId(value = "exam_id")
+    private Long examId;
+
+    /** 考试日期 */
+    private Long examTime;
+    /** 考试开始时间段 */
+    private String examStartTime;
+    /** 考试结束时间段 */
+    private String examEndTime;
+    /** 考场类型:1普通场 2专场 */
+    private Integer examType;
+    /** 考场人数 */
+    private Integer examNum;
+    /** 已约人数 */
+    private Integer scheduledNum;
+    /** 新系统标识ID */
+    private Long newSignId;
+    /** 旧系统标识ID */
+    private Long oldSignId;
+    /** 添加时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 0 失效 1启用 */
+    private Integer status;
+    /** 机构Id */
+    private Long tenantId;
+    /** 类型:1七大员新考 */
+    private Integer type;
+    /** 考点ID */
+    private Long examSiteId;
+
+}

+ 48 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/domain/CdExamSite.java

@@ -0,0 +1,48 @@
+package com.zhongzheng.modules.middleground.record.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 考试地点对象 exam_site
+ *
+ * @author ruoyi
+ * @date 2021-12-06
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("cd_exam_site")
+public class CdExamSite implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "site_id")
+    private Long siteId;
+    /** 编码 */
+    private String code;
+    /** 地址 */
+    private String siteAddress;
+    /** 1启用 0关闭 -1删除 */
+    private Integer status;
+    /** 添加时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 1云学堂*/
+    private Integer fromPlat;
+    /** 商户ID*/
+    private Long tenantId;
+    /** 是否默认标签:1是 0否*/
+    private Long sign;
+}

+ 69 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/domain/CdExamSubscribe.java

@@ -0,0 +1,69 @@
+package com.zhongzheng.modules.middleground.record.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月17日 8:59
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("cd_exam_subscribe")
+public class CdExamSubscribe implements Serializable {
+
+    @TableId(value = "id")
+    private Long id;
+    /** 考试ID */
+    private Long examId;
+    /** 用户ID */
+    private Long userId;
+    /** 用户姓名 */
+    private String userName;
+    /** 用户身份证 */
+    private String userCard;
+    /** 用户手机号码 */
+    private String userPhone;
+    /** 预约状态:1正常 2取消 3过期 */
+    private Integer subscribeStatus;
+    /** 报送时间 */
+    private Long submissionTime;
+    /** 是否签署承诺书 0 未签署 1已签署 */
+    private Integer reportStatus;
+    /** 0 待登记 1正常 2缺考 3作弊 4替考 */
+    private Integer examStatus;
+    /** 成绩 */
+    private BigDecimal performance;
+    /** 成绩回填时间 */
+    private Long performanceTime;
+    /** 1通过 0不通过 */
+    private Integer result;
+    /** 证书编号 */
+    private String certificateCode;
+    /** 登记补充 */
+    private String remark;
+    /** 添加时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 0 失效 1启用 */
+    private Integer status;
+    /** 机构Id */
+    private Long tenantId;
+    /** 数据来源:1新系统 2旧系统 */
+    private Integer dataFrom;
+    /** 类型:1七大员新考 */
+    private Integer type;
+
+}

+ 62 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/domain/CdUserSubscribe.java

@@ -0,0 +1,62 @@
+package com.zhongzheng.modules.middleground.record.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月17日 8:59
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("cd_user_subscribe")
+public class CdUserSubscribe implements Serializable {
+
+    @TableId(value = "id")
+    private Long id;
+    /** 用户ID */
+    private Long userId;
+    /** 用户姓名 */
+    private String userName;
+    /** 用户身份证 */
+    private String userCard;
+    /** 用户手机号码 */
+    private String userPhone;
+    /** 商品名称 */
+    private String goodsName;
+    /** 业务层次名称 */
+    private String businessName;
+    /** 考试次数 */
+    private Integer examNum;
+    /** 补考次数 */
+    private Integer replenishExamNum;
+    /** 刷题次数 */
+    private Integer doQuestionNum;
+    /** 题库商家名称 */
+    private String questionMerchant;
+    /** 添加时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 0 失效 1启用 */
+    private Integer status;
+    /** 机构名称 */
+    private String tenantName;
+    /** 数据来源:1新系统 2旧系统 */
+    private Integer dataFrom;
+    /** 机构Id */
+    private Long tenantId;
+    /** 类型:1七大员新考 */
+    private Integer type;
+
+}

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/mapper/CdExamRoomMapper.java

@@ -0,0 +1,7 @@
+package com.zhongzheng.modules.middleground.record.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.middleground.record.domain.CdExamRoom;
+
+public interface CdExamRoomMapper extends BaseMapper<CdExamRoom> {
+}

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/mapper/CdExamSiteMapper.java

@@ -0,0 +1,7 @@
+package com.zhongzheng.modules.middleground.record.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.middleground.record.domain.CdExamSite;
+
+public interface CdExamSiteMapper extends BaseMapper<CdExamSite> {
+}

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/mapper/CdExamSubscribeMapper.java

@@ -0,0 +1,7 @@
+package com.zhongzheng.modules.middleground.record.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.middleground.record.domain.CdExamSubscribe;
+
+public interface CdExamSubscribeMapper extends BaseMapper<CdExamSubscribe> {
+}

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/mapper/CdUserSubscribeMapper.java

@@ -0,0 +1,7 @@
+package com.zhongzheng.modules.middleground.record.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.middleground.record.domain.CdUserSubscribe;
+
+public interface CdUserSubscribeMapper extends BaseMapper<CdUserSubscribe> {
+}

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/ICdExamRoomService.java

@@ -0,0 +1,25 @@
+package com.zhongzheng.modules.middleground.record.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.middleground.record.bo.CdExamRoomBo;
+import com.zhongzheng.modules.middleground.record.bo.CdExamRoomQuery;
+import com.zhongzheng.modules.middleground.record.bo.CdExamRoomUpdateBo;
+import com.zhongzheng.modules.middleground.record.bo.CdUserExamSubscribeQueryBo;
+import com.zhongzheng.modules.middleground.record.domain.CdExamRoom;
+import com.zhongzheng.modules.middleground.record.vo.CdExamRoomVo;
+import com.zhongzheng.modules.middleground.record.vo.CdUserExamSubscribeVo;
+
+import java.util.List;
+
+public interface ICdExamRoomService extends IService<CdExamRoom> {
+
+    boolean saveExamRoom(CdExamRoomBo bo);
+
+    List<CdExamRoomVo> getExamRoomList(CdExamRoomQuery bo);
+
+    boolean updateExamRoom(CdExamRoomUpdateBo bo);
+
+    boolean deleteExamRoom(CdExamRoomUpdateBo bo);
+
+    List<CdUserExamSubscribeVo> getExamSubscribeList(CdUserExamSubscribeQueryBo bo);
+}

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/ICdExamSiteService.java

@@ -0,0 +1,7 @@
+package com.zhongzheng.modules.middleground.record.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.middleground.record.domain.CdExamSite;
+
+public interface ICdExamSiteService extends IService<CdExamSite> {
+}

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/ICdExamSubscribeService.java

@@ -0,0 +1,7 @@
+package com.zhongzheng.modules.middleground.record.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.middleground.record.domain.CdExamSubscribe;
+
+public interface ICdExamSubscribeService extends IService<CdExamSubscribe> {
+}

+ 13 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/ICdUserSubscribeService.java

@@ -0,0 +1,13 @@
+package com.zhongzheng.modules.middleground.record.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.middleground.record.bo.CdUserSubscribeBo;
+import com.zhongzheng.modules.middleground.record.bo.CdUserSubscribeUpdateBo;
+import com.zhongzheng.modules.middleground.record.domain.CdUserSubscribe;
+
+public interface ICdUserSubscribeService extends IService<CdUserSubscribe> {
+
+    boolean saveUserSubscribe(CdUserSubscribeBo bo);
+
+    boolean updateUserSubscribe(CdUserSubscribeUpdateBo bo);
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/impl/CdCdExamSiteServiceImpl.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.middleground.record.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.modules.middleground.record.domain.CdExamSite;
+import com.zhongzheng.modules.middleground.record.mapper.CdExamSiteMapper;
+import com.zhongzheng.modules.middleground.record.service.ICdExamSiteService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月17日 9:44
+ */
+@Service
+public class CdCdExamSiteServiceImpl extends ServiceImpl<CdExamSiteMapper, CdExamSite> implements ICdExamSiteService {
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/impl/CdCdExamSubscribeServiceImpl.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.middleground.record.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.modules.middleground.record.domain.CdExamSubscribe;
+import com.zhongzheng.modules.middleground.record.mapper.CdExamSubscribeMapper;
+import com.zhongzheng.modules.middleground.record.service.ICdExamSubscribeService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月17日 9:44
+ */
+@Service
+public class CdCdExamSubscribeServiceImpl extends ServiceImpl<CdExamSubscribeMapper, CdExamSubscribe> implements ICdExamSubscribeService {
+}

+ 100 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/impl/CdCdUserSubscribeServiceImpl.java

@@ -0,0 +1,100 @@
+package com.zhongzheng.modules.middleground.record.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.modules.middleground.record.bo.CdUserSubscribeBo;
+import com.zhongzheng.modules.middleground.record.bo.CdUserSubscribeUpdateBo;
+import com.zhongzheng.modules.middleground.record.domain.CdUserSubscribe;
+import com.zhongzheng.modules.middleground.record.mapper.CdUserSubscribeMapper;
+import com.zhongzheng.modules.middleground.record.service.ICdUserSubscribeService;
+import com.zhongzheng.modules.middleground.tenant.domain.DataTenant;
+import com.zhongzheng.modules.middleground.tenant.service.IDataTenantService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月17日 9:44
+ */
+@Service
+public class CdCdUserSubscribeServiceImpl extends ServiceImpl<CdUserSubscribeMapper, CdUserSubscribe> implements ICdUserSubscribeService {
+
+    @Autowired
+    private IDataTenantService dataTenantService;
+
+    @Override
+    public boolean saveUserSubscribe(CdUserSubscribeBo bo) {
+        CdUserSubscribe cdUserSubscribe = BeanUtil.toBean(bo, CdUserSubscribe.class);
+        //机构信息
+        cdUserSubscribe.setTenantId(getNewTenantId(bo.getTenantId()));
+        return save(cdUserSubscribe);
+    }
+
+    @Override
+    public boolean updateUserSubscribe(CdUserSubscribeUpdateBo bo) {
+        CdUserSubscribe cdUserSubscribe = getOne(new LambdaQueryWrapper<CdUserSubscribe>()
+                .eq(ObjectUtils.isNotNull(bo.getUserId()), CdUserSubscribe::getUserId, bo.getUserId())
+                .eq(StringUtils.isNotBlank(bo.getUserCard()), CdUserSubscribe::getUserCard, bo.getUserCard())
+                .eq(CdUserSubscribe::getTenantId, getNewTenantId(bo.getTenantId()))
+                .eq(CdUserSubscribe::getDataFrom, bo.getDataFrom())
+                .eq(CdUserSubscribe::getType,bo.getType())
+                .last("limit 1"));
+        if (ObjectUtils.isNull(cdUserSubscribe)){
+            throw new CustomException("用户信息不匹配,请检查!");
+        }
+        if (ObjectUtils.isNotNull(bo.getExamNum())){
+            cdUserSubscribe.setExamNum(bo.getExamNum());
+        }
+        if (ObjectUtils.isNotNull(bo.getReplenishExamNum())){
+            cdUserSubscribe.setReplenishExamNum(bo.getReplenishExamNum());
+        }
+        if (ObjectUtils.isNotNull(bo.getDoQuestionNum())){
+            cdUserSubscribe.setDoQuestionNum(bo.getDoQuestionNum());
+        }
+        if (ObjectUtils.isNotNull(bo.getQuestionMerchant())){
+            cdUserSubscribe.setQuestionMerchant(bo.getQuestionMerchant());
+        }
+
+        return updateById(cdUserSubscribe);
+    }
+
+    /**
+     * 获取机构ID
+     * @author change
+     * @date 2023/7/17 10:13
+     * @param tenantId
+     * @return java.lang.Long
+     */
+    private Long getNewTenantId(Long tenantId){
+        DataTenant tenant = dataTenantService.getOne(new LambdaQueryWrapper<DataTenant>()
+                .eq(DataTenant::getNewId, tenantId)
+                .or().eq(DataTenant::getOldId, tenantId)
+                .last("limit 1"));
+        if (ObjectUtils.isNull(tenant)){
+            throw new CustomException("机构信息不匹配,请检查!");
+        }
+        return tenant.getTenantId();
+    }
+
+    /**
+     * 获取机构信息
+     * @author change
+     * @date 2023/7/17 10:13
+     * @param tenantId
+     * @return java.lang.Long
+     */
+    private DataTenant getNewTenant(Long tenantId){
+        DataTenant tenant = dataTenantService.getOne(new LambdaQueryWrapper<DataTenant>()
+                .eq(DataTenant::getNewId, tenantId)
+                .or().eq(DataTenant::getOldId, tenantId)
+                .last("limit 1"));
+        if (ObjectUtils.isNull(tenant)){
+            throw new CustomException("机构信息不匹配,请检查!");
+        }
+        return tenant;
+    }
+}

+ 263 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/service/impl/CdExamRoomServiceImpl.java

@@ -0,0 +1,263 @@
+package com.zhongzheng.modules.middleground.record.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.modules.middleground.record.bo.CdExamRoomBo;
+import com.zhongzheng.modules.middleground.record.bo.CdExamRoomQuery;
+import com.zhongzheng.modules.middleground.record.bo.CdExamRoomUpdateBo;
+import com.zhongzheng.modules.middleground.record.bo.CdUserExamSubscribeQueryBo;
+import com.zhongzheng.modules.middleground.record.domain.CdExamRoom;
+import com.zhongzheng.modules.middleground.record.domain.CdExamSite;
+import com.zhongzheng.modules.middleground.record.mapper.CdExamRoomMapper;
+import com.zhongzheng.modules.middleground.record.service.ICdExamRoomService;
+import com.zhongzheng.modules.middleground.record.service.ICdExamSiteService;
+import com.zhongzheng.modules.middleground.record.vo.CdExamRoomDetailVo;
+import com.zhongzheng.modules.middleground.record.vo.CdExamRoomVo;
+import com.zhongzheng.modules.middleground.record.vo.CdUserExamSubscribeVo;
+import com.zhongzheng.modules.middleground.tenant.domain.DataTenant;
+import com.zhongzheng.modules.middleground.tenant.service.IDataTenantService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamRoom> implements ICdExamRoomService {
+
+    @Autowired
+    private IDataTenantService dataTenantService;
+
+    @Autowired
+    private ICdExamSiteService examSiteService;
+
+
+    @Override
+    public boolean saveExamRoom(CdExamRoomBo bo) {
+        Long siteId = null;
+        //考试地址
+        if(StringUtils.isNotBlank(bo.getExamSite())){
+            CdExamSite cdExamSite = examSiteService
+                    .getOne(new LambdaQueryWrapper<CdExamSite>().eq(CdExamSite::getSiteAddress, bo.getExamSite()).eq(CdExamSite::getStatus, 1).last("limit 1"));
+            if (ObjectUtils.isNull(cdExamSite)){
+                //不存在(新增考试地点)
+                CdExamSite site = new CdExamSite();
+                site.setCode(ServletUtils.getEncoded("DD"));
+                site.setSiteAddress(bo.getExamSite());
+                site.setTenantId(getNewTenantId(bo.getTenantId()));
+                examSiteService.save(site);
+                siteId = site.getSiteId();
+            }else {
+                siteId = cdExamSite.getSiteId();
+            }
+        }
+
+        //查询考场是否存在
+        CdExamRoom cdExamRoom = getOne(new LambdaQueryWrapper<CdExamRoom>()
+                .eq(CdExamRoom::getTenantId, getNewTenantId(bo.getTenantId()))
+                .eq(CdExamRoom::getExamTime, bo.getExamTime())
+                .eq(CdExamRoom::getExamStartTime, bo.getExamStartTime())
+                .eq(ObjectUtils.isNotNull(siteId), CdExamRoom::getExamSiteId, siteId)
+                .eq(CdExamRoom::getExamEndTime, bo.getExamEndTime()));
+        if (ObjectUtils.isNotNull(cdExamRoom)) {
+            if (bo.getDataFrom() == 1) {
+                cdExamRoom.setNewSignId(bo.getSignId());
+            } else {
+                cdExamRoom.setOldSignId(bo.getSignId());
+            }
+            if (ObjectUtils.isNotNull(bo.getScheduledNum())) {
+                Integer num = cdExamRoom.getScheduledNum() + bo.getScheduledNum();
+                cdExamRoom.setScheduledNum(num);
+            }
+            cdExamRoom.setExamNum(bo.getExamNum());
+            return updateById(cdExamRoom);
+        }
+        //新增
+        CdExamRoom entity = BeanUtil.toBean(bo, CdExamRoom.class);
+        if (bo.getDataFrom() == 1) {
+            entity.setNewSignId(bo.getSignId());
+        } else {
+            entity.setOldSignId(bo.getSignId());
+        }
+        entity.setStatus(1);
+        entity.setTenantId(getNewTenantId(bo.getTenantId()));
+        if (ObjectUtils.isNull(siteId)){
+            //获取默认的
+            CdExamSite site = examSiteService.getOne(new LambdaQueryWrapper<CdExamSite>().eq(CdExamSite::getSign, 1).last("limit 1"));
+            if (ObjectUtils.isNotNull(site)){
+                entity.setExamSiteId(site.getSiteId());
+            }
+        }else {
+            entity.setExamSiteId(siteId);
+        }
+        return save(entity);
+    }
+
+    @Override
+    public List<CdExamRoomVo> getExamRoomList(CdExamRoomQuery bo) {
+        List<CdExamRoomVo> result = new ArrayList<>();
+        List<CdExamRoom> cdExamRoomList = list(new LambdaQueryWrapper<CdExamRoom>()
+                .eq(ObjectUtils.isNotNull(bo.getTenantId()), CdExamRoom::getTenantId, getNewTenantId(bo.getTenantId()))
+                .eq(ObjectUtils.isNotNull(bo.getApplyTime()), CdExamRoom::getExamTime, bo.getApplyTime())
+                .eq(CdExamRoom::getType,1)
+                .eq(ObjectUtils.isNotNull(bo.getApplyStartTime()), CdExamRoom::getExamStartTime, bo.getApplyStartTime())
+                .eq(ObjectUtils.isNotNull(bo.getApplyEndTime()), CdExamRoom::getExamEndTime, bo.getApplyEndTime()));
+        if (CollectionUtils.isEmpty(cdExamRoomList)) {
+            return result;
+        }
+        String tenantName = getNewTenant(bo.getTenantId()).getTenantName();
+        Map<Long, List<CdExamRoom>> map = cdExamRoomList.stream().collect(Collectors.groupingBy(CdExamRoom::getExamTime));
+        map.forEach((k, v) -> {
+            CdExamRoomVo cdExamRoomVo = new CdExamRoomVo();
+            cdExamRoomVo.setTenantName(tenantName);
+            cdExamRoomVo.setExamTime(k);
+
+            List<CdExamRoomDetailVo> voList = v.stream().map(item -> {
+                CdExamRoomDetailVo detailVo = BeanUtil.toBean(item, CdExamRoomDetailVo.class);
+                //考试地点
+                CdExamSite site = examSiteService.getById(item.getExamSiteId());
+                //考试标识
+                String examName = String.format("%s-%s %s (%s)(%s)", item.getExamStartTime(), item.getExamEndTime(),
+                        ObjectUtils.isNotNull(item.getExamType()) && item.getExamType() == 2 ? "专场" : "普通场",
+                        item.getExamNum(),site.getSiteAddress());
+                detailVo.setExamName(examName);
+                detailVo.setExamSiteId(site.getSiteId());
+                detailVo.setExamSiteName(site.getSiteAddress());
+                return detailVo;
+            }).collect(Collectors.toList());
+            cdExamRoomVo.setDetailVos(voList);
+            result.add(cdExamRoomVo);
+        });
+        return result;
+    }
+
+    @Override
+    public boolean updateExamRoom(CdExamRoomUpdateBo bo) {
+        //查询考场是否存在
+        LambdaQueryWrapper<CdExamRoom> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CdExamRoom::getTenantId,getNewTenantId(bo.getTenantId()));
+        if (bo.getDataFrom() == 1) {
+            wrapper.eq(CdExamRoom::getNewSignId,bo.getSignId());
+        } else {
+            wrapper.eq(CdExamRoom::getOldSignId,bo.getSignId());
+        }
+
+        CdExamRoom cdExamRoom = getOne(wrapper);
+        if (ObjectUtils.isNull(cdExamRoom)) {
+            throw new CustomException("考场信息获取有误!");
+        }
+        if (ObjectUtils.isNotNull(bo.getExamTime())) {
+            cdExamRoom.setExamTime(bo.getExamTime());
+        }
+        if (ObjectUtils.isNotNull(bo.getExamNum())) {
+            cdExamRoom.setExamNum(bo.getExamNum());
+        }
+        if (StringUtils.isNotBlank(bo.getExamStartTime())) {
+            cdExamRoom.setExamStartTime(bo.getExamStartTime());
+        }
+        if (StringUtils.isNotBlank(bo.getExamEndTime())) {
+            cdExamRoom.setExamEndTime(bo.getExamEndTime());
+        }
+        //修改预约人数
+        if (ObjectUtils.isNotNull(bo.getScheduledNum())) {
+            Integer num = cdExamRoom.getScheduledNum() + bo.getScheduledNum();
+            cdExamRoom.setScheduledNum(num);
+        }
+        //修改考试地点
+        if (StringUtils.isNotBlank(bo.getExamSite())){
+            CdExamSite cdExamSite = examSiteService
+                    .getOne(new LambdaQueryWrapper<CdExamSite>().eq(CdExamSite::getSiteAddress, bo.getExamSite()).eq(CdExamSite::getStatus, 1).last("limit 1"));
+            if (ObjectUtils.isNull(cdExamSite)){
+                //不存在(新增考试地点)
+                CdExamSite site = new CdExamSite();
+                site.setCode(ServletUtils.getEncoded("DD"));
+                site.setSiteAddress(bo.getExamSite());
+                site.setTenantId(getNewTenantId(bo.getTenantId()));
+                examSiteService.save(site);
+                cdExamRoom.setExamSiteId(site.getSiteId());
+            }else {
+                cdExamRoom.setExamSiteId(cdExamSite.getSiteId());
+            }
+        }
+        return updateById(cdExamRoom);
+    }
+
+    @Override
+    public boolean deleteExamRoom(CdExamRoomUpdateBo bo) {
+        //查询考场是否存在
+        LambdaQueryWrapper<CdExamRoom> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CdExamRoom::getTenantId,getNewTenantId(bo.getTenantId()));
+        if (bo.getDataFrom() == 1) {
+            wrapper.eq(CdExamRoom::getNewSignId,bo.getSignId());
+        } else {
+            wrapper.eq(CdExamRoom::getOldSignId,bo.getSignId());
+        }
+
+        CdExamRoom cdExamRoom = getOne(wrapper);
+        if (ObjectUtils.isNull(cdExamRoom)) {
+            throw new CustomException("考场信息获取有误!");
+        }
+        return removeById(cdExamRoom);
+    }
+
+    /**
+     * 可预约学员列表
+     * @author change
+     * @date 2023/7/17 11:42
+     * @param bo
+     * @return java.util.List<com.zhongzheng.modules.middleground.record.vo.UserExamSubscribeVo>
+     */
+    @Override
+    public List<CdUserExamSubscribeVo> getExamSubscribeList(CdUserExamSubscribeQueryBo bo) {
+
+
+        return null;
+    }
+
+
+    /**
+     * 获取机构ID
+     * @author change
+     * @date 2023/7/17 10:13
+     * @param tenantId
+     * @return java.lang.Long
+     */
+    private Long getNewTenantId(Long tenantId){
+        DataTenant tenant = dataTenantService.getOne(new LambdaQueryWrapper<DataTenant>()
+                .eq(DataTenant::getNewId, tenantId)
+                .or().eq(DataTenant::getOldId, tenantId)
+                .last("limit 1"));
+        if (ObjectUtils.isNull(tenant)){
+            throw new CustomException("机构信息不匹配,请检查!");
+        }
+        return tenant.getTenantId();
+    }
+
+    /**
+     * 获取机构信息
+     * @author change
+     * @date 2023/7/17 10:13
+     * @param tenantId
+     * @return java.lang.Long
+     */
+    private DataTenant getNewTenant(Long tenantId){
+        DataTenant tenant = dataTenantService.getOne(new LambdaQueryWrapper<DataTenant>()
+                .eq(DataTenant::getNewId, tenantId)
+                .or().eq(DataTenant::getOldId, tenantId)
+                .last("limit 1"));
+        if (ObjectUtils.isNull(tenant)){
+            throw new CustomException("机构信息不匹配,请检查!");
+        }
+        return tenant;
+    }
+
+
+}

+ 46 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/vo/CdExamRoomDetailVo.java

@@ -0,0 +1,46 @@
+package com.zhongzheng.modules.middleground.record.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月11日 16:53
+ */
+@Data
+public class CdExamRoomDetailVo implements Serializable {
+
+    @ApiModelProperty("id")
+    private String id;
+
+    @ApiModelProperty("考试标识")
+    private String examName;
+
+    @ApiModelProperty("考试开始时间段")
+    private String examStartTime;
+
+    @ApiModelProperty("考试结束时间段")
+    private String examEndTime;
+
+    @ApiModelProperty("考场人数")
+    private Integer examNum;
+
+    @ApiModelProperty("已约人数")
+    private Integer scheduledNum;
+
+    @ApiModelProperty("新系统标识ID")
+    private Long newSignId;
+
+    @ApiModelProperty("旧系统标识ID")
+    private Long oldSignId;
+
+    @ApiModelProperty("考试地点ID")
+    private Long examSiteId;
+
+    @ApiModelProperty("考试地点名称")
+    private String examSiteName;
+
+
+}

+ 28 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/vo/CdExamRoomVo.java

@@ -0,0 +1,28 @@
+package com.zhongzheng.modules.middleground.record.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月11日 16:53
+ */
+@Data
+public class CdExamRoomVo implements Serializable {
+
+    @ApiModelProperty("机构ID")
+    private String tenantId;
+
+    @ApiModelProperty("机构名称")
+    private String tenantName;
+
+    @ApiModelProperty("考试日期")
+    private Long examTime;
+
+    @ApiModelProperty("考试时间段")
+    private List<CdExamRoomDetailVo> detailVos;
+
+}

+ 45 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/record/vo/CdUserExamSubscribeVo.java

@@ -0,0 +1,45 @@
+package com.zhongzheng.modules.middleground.record.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月17日 11:21
+ */
+@ApiModel("用户预约Vo")
+@Data
+public class CdUserExamSubscribeVo implements Serializable {
+
+    private Long id;
+    @ApiModelProperty("")
+    private Long userId;
+    @ApiModelProperty("用户姓名")
+    private String userName;
+    @ApiModelProperty("用户身份证")
+    private String userCard;
+    @ApiModelProperty("用户手机号码")
+    private String userPhone;
+    @ApiModelProperty("预约状态:1正常 2取消 3过期 4未约")
+    private Integer subscribeStatus;
+    @ApiModelProperty("报送时间")
+    private Long submissionTime;
+    @ApiModelProperty("提醒时间")
+    private Long applyRemindTime;
+    @ApiModelProperty("是否签署承诺书 0 未签署 1已签署")
+    private Integer reportStatus;
+    @ApiModelProperty("证书编号")
+    private String certificateCode;
+    @ApiModelProperty("证书名称")
+    private String certificateName;
+    @ApiModelProperty("预约结果")
+    private String subscribeResult;
+    @ApiModelProperty("是否新考")
+    private Integer newApply;
+
+    private Integer dataFrom;
+    private Long tenantId;
+}

+ 40 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/tenant/domain/DataTenant.java

@@ -0,0 +1,40 @@
+package com.zhongzheng.modules.middleground.tenant.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月17日 9:58
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("cd_data_tenant")
+public class DataTenant implements Serializable {
+
+    @TableId(value = "tenant_id")
+    private Long tenantId;
+    /** 机构名称 */
+    private String tenantName;
+    /** 添加时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 0 失效 1启用 */
+    private Integer status;
+    /** 新系统机构ID */
+    private Long newId;
+    /** 旧机构ID */
+    private Long oldId;
+
+}

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/tenant/mapper/DataTenantMapper.java

@@ -0,0 +1,7 @@
+package com.zhongzheng.modules.middleground.tenant.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.middleground.tenant.domain.DataTenant;
+
+public interface DataTenantMapper extends BaseMapper<DataTenant> {
+}

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/tenant/service/IDataTenantService.java

@@ -0,0 +1,7 @@
+package com.zhongzheng.modules.middleground.tenant.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.middleground.tenant.domain.DataTenant;
+
+public interface IDataTenantService extends IService<DataTenant> {
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/middleground/tenant/service/impl/DataTenantServiceImpl.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.middleground.tenant.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.modules.middleground.tenant.domain.DataTenant;
+import com.zhongzheng.modules.middleground.tenant.mapper.DataTenantMapper;
+import com.zhongzheng.modules.middleground.tenant.service.IDataTenantService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月17日 10:05
+ */
+@Service
+public class DataTenantServiceImpl extends ServiceImpl<DataTenantMapper, DataTenant> implements IDataTenantService {
+}