From e181c084902aee7d7701865bd86cc6fc54e28e2f Mon Sep 17 00:00:00 2001
From: liyj <1003249715@qq.com>
Date: Thu, 05 Sep 2024 11:06:20 +0800
Subject: [PATCH] 1、新增一期综治中心数据对接微服务

---
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/controller/BuildCodeController.java |   62 +
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/config/MybatisPlusConfig.java                 |   49 +
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/service/BuildCodeService.java       |  683 +++++++++++++++++
 dyh-service/dyh-ssim/src/test/java/cn/huge/module/DyhSsimApplicationTest.java                   |   17 
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/UtilsClient.java                   |   25 
 dyh-service/dyh-ssim/src/test/java/cn/huge/base/common/base/BaseServiceTest.java                |   30 
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/CustClient.java                    |   46 +
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/domain/bo/UserTabColsBO.java        |  218 +++++
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/dao/mapper/BuildCodeMapper.java     |   48 +
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java           |  102 ++
 dyh-service/dyh-ssim/src/test/java/cn/huge/module/BuildCodeServiceTest.java                     |   79 +
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/DyhSsimApplication.java                       |   21 
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/impl/UtilsClientImpl.java          |   53 +
 dyh-service/dyh-ssim/src/main/resources/config/application-dev.yml                              |   96 ++
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/utils/ConfigUtils.java                        |   35 
 dyh-service/dyh-ssim/src/main/resources/config/application.yml                                  |   63 +
 dyh-service/dyh-ssim/src/main/resources/logback-spring.xml                                      |  149 +++
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/dao/mapper/xml/BuildCodeMapper.xml  |   32 
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/constant/CacheConsts.java                     |   35 
 dyh-service/dyh-ssim/src/main/resources/config/application-prod.yml                             |   96 ++
 dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/utils/DbDataTypeToJavaType.java     |   71 +
 dyh-service/dyh-ssim/src/main/assembly/assembly.xml                                             |   68 +
 dyh-service/dyh-ssim/src/main/resources/config/application-test.yml                             |   96 ++
 dyh-service/dyh-ssim/pom.xml                                                                    |  224 +++++
 24 files changed, 2,398 insertions(+), 0 deletions(-)

diff --git a/dyh-service/dyh-ssim/pom.xml b/dyh-service/dyh-ssim/pom.xml
new file mode 100644
index 0000000..5ba9793
--- /dev/null
+++ b/dyh-service/dyh-ssim/pom.xml
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>cn.huge</groupId>
+    <artifactId>dyh-ssim</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>jar</packaging>
+
+    <name>dyh-ssim</name>
+    <description>广州市综治中心应用平台矛调模块-一期综治中心数据对接微服务</description>
+
+    <parent>
+        <groupId>cn.huge</groupId>
+        <artifactId>dyh-service</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <properties>
+
+    </properties>
+
+    <dependencies>
+		<!-- 公共框架mybatisPlus版 -->
+        <dependency>
+            <groupId>cn.huge</groupId>
+            <artifactId>dyh-base</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+		<!-- 公共框架mybatisPlus版 end -->
+
+		<!-- springboot test -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+		<!-- springboot test end -->
+
+        <!-- lombok -->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <!-- lombok end -->
+
+        <!-- junit -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <!-- junit end -->
+    </dependencies>
+
+    <build>
+        <finalName>dyh-ssim</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <!--重写包含依赖,包含不存在的依赖,jar里没有pom里的依赖 -->
+                    <includes>
+                        <include>
+                            <groupId>null</groupId>
+                            <artifactId>null</artifactId>
+                        </include>
+                    </includes>
+                    <layout>ZIP</layout>
+                    <!--使用外部配置文件,jar包里没有资源文件 -->
+                    <addResources>true</addResources>
+                    <outputDirectory>${project.build.directory}</outputDirectory>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                        <configuration>
+                            <!--配置jar包特殊标识 配置后,保留原文件,生成新文件 *-run.jar -->
+                            <!--配置jar包特殊标识 不配置,原文件命名为 *.jar.original,生成新文件 *.jar -->
+                            <!--<classifier>run</classifier> -->
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <!--不打包资源文件 注意这玩意从编译结果目录开始算目录结构 -->
+                    <excludes>
+                        <!-- 选择性过滤 -->
+                        <exclude>/**/*.yml</exclude>
+                        <exclude>/src/main/resources/*.xml</exclude>
+                        <exclude>/src/main/resources/config/*.xml</exclude>
+                        <exclude>/**/*.properties</exclude>
+                        <exclude>/**/*.conf</exclude>
+                    </excludes>
+                    <includes>
+                        <!-- 只打包指定目录的文件 -->
+                        <include>cn/huge/**</include>
+                    </includes>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>lib/</classpathPrefix>
+                            <useUniqueVersions>false</useUniqueVersions>
+                            <mainClass>cn.huge.module.DyhSsimApplication</mainClass>
+                        </manifest>
+                        <manifestEntries>
+                            <!--MANIFEST.MF 中 Class-Path 加入资源文件目录 -->
+                            <Class-Path>./config/</Class-Path>
+                        </manifestEntries>
+                    </archive>
+                    <outputDirectory>${project.build.directory}</outputDirectory>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>prepare-package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!--拷贝资源文件 copy-resources -->
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources</directory>
+                                    <filtering>true</filtering>
+                                    <includes>
+                                        <include>*.xml</include>
+                                        <include>*.yml</include>
+                                        <include>*.properties</include>
+                                        <include>*.conf</include>
+                                    </includes>
+                                </resource>
+                                <resource>
+                                    <directory>src/main/resources/config</directory>
+                                    <filtering>true</filtering>
+                                    <includes>
+                                        <include>*.xml</include>
+                                        <include>*.yml</include>
+                                        <include>*.properties</include>
+                                        <include>*.conf</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                            <outputDirectory>${project.build.directory}/config</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!-- 打包时跳过测试 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+
+            <!-- 打包插件 -->
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <!--<finalName>${project.artifactId}</finalName>-->
+                    <!-- 只使用finalName作为名字,不追加AssemblyId -->
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <descriptors>
+                        <descriptor>src/main/assembly/assembly.xml</descriptor>
+                    </descriptors>
+                    <!-- 打包后输出目录 -->
+                    <!--<outputDirectory>/Users/wangminzhao/tmp/lisp-install-pkg</outputDirectory>-->
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+
+        <resources>
+            <resource>
+                <directory>${basedir}/src/main/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                </includes>
+            </resource>
+        </resources>
+    </build>
+
+
+</project>
diff --git a/dyh-service/dyh-ssim/src/main/assembly/assembly.xml b/dyh-service/dyh-ssim/src/main/assembly/assembly.xml
new file mode 100644
index 0000000..221909b
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/assembly/assembly.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<assembly>
+    <!-- 可自定义,这里指定的是项目环境 -->
+    <!-- spring-boot-assembly-local-1.0.RELEASE.tar.gz  -->
+    <id>${project.version}</id>
+
+    <!-- 打包的类型,如果有N个,将会打N个类型的包 -->
+    <formats>
+        <format>tar.gz</format>
+        <format>zip</format>
+    </formats>
+
+    <!-- 需要根目录 -->
+    <includeBaseDirectory>true</includeBaseDirectory>
+
+    <fileSets>
+        <!--
+            0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限;
+            0644->即用户具有读写权限,组用户和其它用户具有只读权限;
+        -->
+
+        <!-- 指定输出target中的配置文件到config目录中 -->
+        <fileSet>
+            <directory>${project.build.directory}/config</directory>
+            <outputDirectory>config</outputDirectory>
+            <fileMode>0644</fileMode>
+        </fileSet>
+
+        <!-- 将第三方依赖打包到lib目录中 -->
+        <fileSet>
+            <directory>${project.build.directory}/lib</directory>
+            <outputDirectory>lib</outputDirectory>
+            <fileMode>0755</fileMode>
+        </fileSet>
+
+        <!-- 指定输出static中的文件到static目录中 -->
+        <fileSet>
+            <directory>${project.basedir}/src/main/resources/static</directory>
+            <outputDirectory>static</outputDirectory>
+            <fileMode>0755</fileMode>
+        </fileSet>
+
+        <!-- 指定输出processes中的文件到processes目录中 -->
+        <fileSet>
+            <directory>${project.basedir}/src/main/resources/processes</directory>
+            <outputDirectory>processes</outputDirectory>
+            <fileMode>0755</fileMode>
+        </fileSet>
+
+        <!-- 指定输出templates中的文件到templates目录中 -->
+        <fileSet>
+            <directory>${project.basedir}/src/main/resources/templates</directory>
+            <outputDirectory>templates</outputDirectory>
+            <fileMode>0755</fileMode>
+        </fileSet>
+
+        <!-- 将项目启动jar打包到/目录中 -->
+        <fileSet>
+            <directory>${project.build.directory}</directory>
+            <outputDirectory></outputDirectory>
+            <fileMode>0755</fileMode>
+            <includes>
+                <include>${project.build.finalName}.jar</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+
+</assembly>
\ No newline at end of file
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/DyhSsimApplication.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/DyhSsimApplication.java
new file mode 100644
index 0000000..cd6d508
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/DyhSsimApplication.java
@@ -0,0 +1,21 @@
+package cn.huge.module;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication(scanBasePackages = {"cn.huge"})
+@EnableFeignClients
+@EnableEurekaClient
+@EnableScheduling
+@MapperScan("cn.huge.*.*.dao.mapper")
+public class DyhSsimApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(DyhSsimApplication.class, args);
+    }
+
+}
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/controller/BuildCodeController.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/controller/BuildCodeController.java
new file mode 100644
index 0000000..ff1368c
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/controller/BuildCodeController.java
@@ -0,0 +1,62 @@
+package cn.huge.module.buildcode.controller;
+
+
+import cn.huge.module.buildcode.service.BuildCodeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @title: 控代码生成器控制器类
+ * @description: 控代码生成器控制器类
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/buildcode")
+public class BuildCodeController {
+
+    @Autowired
+    private BuildCodeService buildCodeService;
+
+
+    @GetMapping("/buildAll")
+    public Object buildAll(String moduleName, String className, String tableName, String author) {
+        return null;
+    }
+
+    @PostConstruct
+    public void init() {
+        log.debug("====================     BuildCodeController initi..............       ===================");
+    }
+
+}
+/**
+ * -------------------_ooOoo_-------------------
+ * ------------------o8888888o------------------
+ * ------------------88" . "88------------------
+ * ------------------(| -_- |)------------------
+ * ------------------O\  =  /O------------------
+ * ---------------____/`---'\____---------------
+ * -------------.'  \\|     |//  `.-------------
+ * ------------/  \\|||  :  |||//  \------------
+ * -----------/  _||||| -:- |||||-  \-----------
+ * -----------|   | \\\  -  /// |   |-----------
+ * -----------| \_|  ''\---/''  |   |-----------
+ * -----------\  .-\__  `-`  ___/-. /-----------
+ * ---------___`. .'  /--.--\  `. . __----------
+ * ------."" '<  `.___\_<|>_/___.'  >'"".-------
+ * -----| | :  `- \`.;`\ _ /`;.`/ - ` : | |-----
+ * -----\  \ `-.   \_ __\ /__ _/   .-` /  /-----
+ * ======`-.____`-.___\_____/___.-`____.-'======
+ * -------------------`=---='
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * ---------佛祖保佑---hugeinfo---永无BUG----------
+ */
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/dao/mapper/BuildCodeMapper.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/dao/mapper/BuildCodeMapper.java
new file mode 100644
index 0000000..a217005
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/dao/mapper/BuildCodeMapper.java
@@ -0,0 +1,48 @@
+package cn.huge.module.buildcode.dao.mapper;
+
+import cn.huge.module.buildcode.domain.bo.UserTabColsBO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @title: 代码生成器mybatis接口
+ * @description: 代码生成器mybatis接口
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+@Repository
+public interface BuildCodeMapper {
+    /**
+     * 获取表的基本信息
+     *
+     * @param tableName
+     * @return
+     */
+    List<UserTabColsBO> getTabInfo(@Param("tableSchema") String tableSchema, @Param("tableName") String tableName);
+}
+/**
+ * -------------------_ooOoo_-------------------
+ * ------------------o8888888o------------------
+ * ------------------88" . "88------------------
+ * ------------------(| -_- |)------------------
+ * ------------------O\  =  /O------------------
+ * ---------------____/`---'\____---------------
+ * -------------.'  \\|     |//  `.-------------
+ * ------------/  \\|||  :  |||//  \------------
+ * -----------/  _||||| -:- |||||-  \-----------
+ * -----------|   | \\\  -  /// |   |-----------
+ * -----------| \_|  ''\---/''  |   |-----------
+ * -----------\  .-\__  `-`  ___/-. /-----------
+ * ---------___`. .'  /--.--\  `. . __----------
+ * ------."" '<  `.___\_<|>_/___.'  >'"".-------
+ * -----| | :  `- \`.;`\ _ /`;.`/ - ` : | |-----
+ * -----\  \ `-.   \_ __\ /__ _/   .-` /  /-----
+ * ======`-.____`-.___\_____/___.-`____.-'======
+ * -------------------`=---='
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * ---------佛祖保佑---hugeinfo---永无BUG----------
+ */
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/dao/mapper/xml/BuildCodeMapper.xml b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/dao/mapper/xml/BuildCodeMapper.xml
new file mode 100644
index 0000000..3eeb159
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/dao/mapper/xml/BuildCodeMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<!--@title: 代码生成器mybatis接口
+@description: 代码生成器mybatis接口
+@company: hugeinfo
+@author: liyj、wangwh
+@time: 2024-7-25 16:51:48
+@version: 1.0.0-->
+<mapper namespace="cn.huge.module.buildcode.dao.mapper.BuildCodeMapper">
+
+    <resultMap id="reslutMap" type="cn.huge.module.buildcode.domain.bo.UserTabColsBO">
+        <result property="tableName" column="tableName"/>
+        <result property="tableComments" column="tableComments"/>
+        <result property="name" column="name"/>
+        <result property="comments" column="comments"/>
+        <result property="dataType" column="dataType"/>
+    </resultMap>
+    <!--自定义查询-->
+    <select id="getTabInfo" parameterType="String" resultMap="reslutMap">
+        SELECT t1.table_name AS "tableName", t2.comments AS "tableComments", t1.column_name AS "name",
+               t1.data_type AS "dataType", t3.comments AS "comments"
+        FROM all_tab_columns t1
+            LEFT JOIN all_tab_comments t2 ON t1.table_name = t2.table_name
+            LEFT JOIN user_col_comments t3 ON t1.table_name = t3.table_name AND t1.column_name = t3.column_name
+        WHERE t1.table_name = #{tableName}
+          AND t1.OWNER = #{tableSchema}
+          AND t2.OWNER = #{tableSchema}
+          AND t3.OWNER = #{tableSchema}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/domain/bo/UserTabColsBO.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/domain/bo/UserTabColsBO.java
new file mode 100644
index 0000000..1fa3227
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/domain/bo/UserTabColsBO.java
@@ -0,0 +1,218 @@
+package cn.huge.module.buildcode.domain.bo;
+
+import cn.huge.base.common.utils.StringUtils;
+import cn.huge.module.buildcode.utils.DbDataTypeToJavaType;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * @title: 控代码生成器业务对象
+ * @description: 控代码生成器业务对象
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+public class UserTabColsBO {
+    /**
+     * 表名
+     */
+    private String tableName;
+
+    /**
+     * 表名中文
+     */
+    private String tableComments;
+
+    /**
+     * 表字段名
+     */
+    private String name;
+
+    /**
+     * 表字段名中文
+     */
+    private String comments;
+
+    /**
+     * 表字段类型
+     */
+    private String dataType;
+
+    /**
+     * 表字段java类型
+     */
+    private String javaDataType;
+
+    /**
+     * 表字段默认值
+     */
+    private Integer dataScale;
+
+    /**
+     * 实体类属性
+     */
+    private String fieldName;
+
+    /**
+     * 实体类属性字段名
+     */
+    private String fieldUpperName;
+
+    /**
+     * 是否有数据
+     */
+    private Integer hasDate;
+
+    /**
+     * 是否有Clob
+     */
+    private Integer hasClob;
+
+    /**
+     * 是否有Blob
+     */
+    private Integer hasBlob;
+
+    /**
+     * 构造函数
+     */
+    public UserTabColsBO() {
+        this.hasDate = 0;
+        this.hasClob = 0;
+        this.hasBlob = 0;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName.toLowerCase();
+    }
+
+    public String getTableComments() {
+        return tableComments;
+    }
+
+    public void setTableComments(String tableComments) {
+        this.tableComments = tableComments.toLowerCase();
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name.toLowerCase();
+        this.fieldName = StringUtils.lineToHump(name);
+        this.fieldUpperName = StringUtils.toUpperFirstLetter(this.fieldName);
+
+    }
+
+    public String getDataType() {
+        return dataType;
+    }
+
+    public void setDataType(String dataType) {
+        this.dataType = dataType.toLowerCase();
+        this.javaDataType = DbDataTypeToJavaType.getJavaType(dataType);
+        this.hasDate = 0;
+
+        if (DbDataTypeToJavaType.DATA_TYPE_DATE.equals(this.javaDataType)) {
+            this.hasDate = 1;
+        }
+
+    }
+
+    public String getComments() {
+        return comments;
+    }
+
+    public void setComments(String comments) {
+        this.comments = comments;
+    }
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    public void setFieldName(String fieldName) {
+        this.fieldName = fieldName;
+    }
+
+    public String getFieldUpperName() {
+        return fieldUpperName;
+    }
+
+    public void setFieldUpperName(String fieldUpperName) {
+        this.fieldUpperName = fieldUpperName;
+    }
+
+    public String getJavaDataType() {
+        return javaDataType;
+    }
+
+    public void setJavaDataType(String javaDataType) {
+        this.javaDataType = javaDataType;
+    }
+
+    public Integer getDataScale() {
+        return dataScale;
+    }
+
+    public void setDataScale(Integer dataScale) {
+        this.dataScale = dataScale;
+    }
+
+    public int getHasDate() {
+        return hasDate;
+    }
+
+    public void setHasDate(Integer hasDate) {
+        this.hasDate = hasDate;
+    }
+
+    public int getHasClob() {
+        return hasClob;
+    }
+
+    public void setHasClob(Integer hasClob) {
+        this.hasClob = hasClob;
+    }
+
+    public int getHasBlob() {
+        return hasBlob;
+    }
+
+    public void setHasBlob(Integer hasBlob) {
+        this.hasBlob = hasBlob;
+    }
+
+    @Override
+    public String toString() {
+        return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
+    }
+}
+/**
+ * -------------------_ooOoo_-------------------
+ * ------------------o8888888o------------------
+ * ------------------88" . "88------------------
+ * ------------------(| -_- |)------------------
+ * ------------------O\  =  /O------------------
+ * ---------------____/`---'\____---------------
+ * -------------.'  \\|     |//  `.-------------
+ * ------------/  \\|||  :  |||//  \------------
+ * -----------/  _||||| -:- |||||-  \-----------
+ * -----------|   | \\\  -  /// |   |-----------
+ * -----------| \_|  ''\---/''  |   |-----------
+ * -----------\  .-\__  `-`  ___/-. /-----------
+ * ---------___`. .'  /--.--\  `. . __----------
+ * ------."" '<  `.___\_<|>_/___.'  >'"".-------
+ * -----| | :  `- \`.;`\ _ /`;.`/ - ` : | |-----
+ * -----\  \ `-.   \_ __\ /__ _/   .-` /  /-----
+ * ======`-.____`-.___\_____/___.-`____.-'======
+ * -------------------`=---='
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * ---------佛祖保佑---hugeinfo---永无BUG----------
+ */
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/service/BuildCodeService.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/service/BuildCodeService.java
new file mode 100644
index 0000000..c16edbd
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/service/BuildCodeService.java
@@ -0,0 +1,683 @@
+package cn.huge.module.buildcode.service;
+
+import cn.huge.module.buildcode.domain.bo.UserTabColsBO;
+import cn.huge.module.buildcode.dao.mapper.BuildCodeMapper;
+import com.google.common.collect.Maps;
+import freemarker.core.ParseException;
+import freemarker.template.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.PostConstruct;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @title: 代码生成器服务层基类
+ * @description: 使用单元测试直接对buildAll执行测试完成代码生成
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+@Slf4j
+@Service
+public class BuildCodeService {
+
+    public static void main(String[] args) throws MalformedURLException, URISyntaxException {
+
+    }
+
+    @Autowired
+    private BuildCodeMapper buildCodeMapper;
+
+    private Configuration cfg;
+    private static StringBuffer ROOT_MAIN_PATH = new StringBuffer(System.getProperty("user.dir")).append(("/src/main/java/"));
+    private static StringBuffer ROOT_TEST_PATH = new StringBuffer(System.getProperty("user.dir")).append(("/src/test/java/"));
+
+    @PostConstruct
+    private void init() throws IOException {
+        try {
+            Configuration configuration = new Configuration(Configuration.getVersion());
+            configuration.setClassForTemplateLoading(BuildCodeService.class, "/template");
+            configuration.setDefaultEncoding("UTF-8");
+            this.cfg = configuration;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 获取表数据属性
+     * @param packagePath 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     * @return Map
+     */
+    private Map getTplData(String packagePath, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = Maps.newHashMap();
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        tplData.put("packageName", packageName);
+        tplData.put("className", className);
+        tplData.put("author", author);
+        tplData.put("version", version);
+        tplData.put("createTime", format.format(new Date()));
+        tplData.put("basePackage", packagePath);
+        tplData.put("basePackagePath", packagePath.replace(".", "/") + "/");
+        List<UserTabColsBO> list = buildCodeMapper.getTabInfo(tableSchema, tableName);
+        if (!CollectionUtils.isEmpty(list)) {
+            UserTabColsBO vo = list.get(0);
+            tplData.put("tableName", vo.getTableName());
+            tplData.put("tableComments", vo.getTableComments());
+            tplData.put("cols", list);
+            tplData.put("hasDate", 0);
+            tplData.put("hasClob", 0);
+            tplData.put("hasBlob", 0);
+            for (UserTabColsBO bo : list) {
+                if (bo.getHasDate() > 0) {
+                    tplData.put("hasDate", 1);
+                }
+            }
+        }
+        return tplData;
+    }
+
+    /**
+     * 生成所有层的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildAll(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            // 必须
+            this.buildPo(tplData);
+            this.buildBo(tplData);
+            this.buildDaoMapper(tplData);
+            this.buildDaoMapperXml(tplData);
+            this.buildService(tplData);
+            this.buildWebController(tplData);
+            // 可选
+//            this.buildWechatController(tplData);
+//            this.buildJson(tplData);
+//            this.buildJsForm(tplData);
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+    /**
+     * 生成PO层的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildPo(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            this.buildPo(tplData);
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+    /**
+     * 生成BO层的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildBo(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            this.buildBo(tplData);
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+    /**
+     * 生成Mapper的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildDaoMapper(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            this.buildDaoMapper(tplData);
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+    /**
+     * 生成MapperXml的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildDaoMapperXml(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            this.buildDaoMapperXml(tplData);
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+    /**
+     * 生成service层的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildService(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            this.buildService(tplData);
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+    /**
+     * 生成webController层的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildWebController(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            this.buildWebController(tplData);
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+    /**
+     * 生成wechatController层的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildWechatController(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            this.buildWechatController(tplData);
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+    /**
+     * 生成Controller层测试的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildControllerTest(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            this.buildControllerTest(tplData);
+
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+    /**
+     * 生成service层测试的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildServiceTest(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            this.buildServiceTest(tplData);
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+    /**
+     * 生成实体json的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildJson(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            this.buildJson(tplData);
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+    /**
+     * 生成实体js的代码
+     * @param basePackage 包路径
+     * @param packageName 包名
+     * @param className 类名
+
+     * @param tableName 表名
+     * @param author 作者
+     * @param version 版本
+     */
+    public void buildJsForm(String basePackage, String packageName, String className, String tableSchema, String tableName, String author, String version) {
+        Map tplData = this.getTplData(basePackage, packageName, className, tableSchema, tableName, author, version);
+        try {
+            this.buildJsForm(tplData);
+        } catch (TemplateNotFoundException e) {
+            log.error("TemplateNotFoundException");
+        } catch (TemplateException e) {
+            log.error("TemplateException");
+        } catch (MalformedTemplateNameException e) {
+            log.error("MalformedTemplateNameException");
+        } catch (ParseException e) {
+            log.error("ParseException");
+        } catch (IOException e) {
+            log.error("IOException");
+        }
+    }
+
+
+    private void buildFile(Template template, Map tplData, String path) throws IOException, TemplateException {
+        File file = new File(path);
+        File dir = new File(file.getParent());
+        if (!dir.exists()) {
+            dir.mkdirs();
+        }
+        if (!file.exists()) {
+            file.createNewFile();
+        } else {  //文件存在就做备份
+            int i = 1;
+            File bakFile = new File(path + i + ".bak");
+            while (bakFile.exists()) {
+                i++;
+                bakFile = new File(path + i + ".bak");
+            }
+            file.renameTo(bakFile);
+        }
+
+        FileOutputStream fos = new FileOutputStream(new File(path));
+        template.process(tplData, new OutputStreamWriter(fos, "utf-8"));
+        fos.flush();
+        fos.close();
+    }
+
+    /**
+     * 创建持久化对象
+     *
+     * @param tplData
+     */
+    private void buildPo(Map tplData) throws TemplateException, IOException {
+        Template template = cfg.getTemplate("po.ftl");
+        StringBuffer path = new StringBuffer(ROOT_MAIN_PATH)
+                .append(tplData.get("basePackagePath"))
+                .append(tplData.get("packageName")).append("/domain/po/")
+                .append(tplData.get("className"))
+                .append(".java");
+        this.buildFile(template, tplData, path.toString());
+    }
+
+    /**
+     * 创建业务对象
+     *
+     * @param tplData
+     */
+    private void buildBo(Map tplData) throws TemplateException, IOException {
+        Template template = cfg.getTemplate("bo.ftl");
+        StringBuffer path = new StringBuffer(ROOT_MAIN_PATH)
+                .append(tplData.get("basePackagePath"))
+                .append(tplData.get("packageName")).append("/domain/bo/")
+                .append(tplData.get("className")).append("BO")
+                .append(".java");
+        this.buildFile(template, tplData, path.toString());
+    }
+
+    /**
+     * 创建Mybatis持久层接口
+     *
+     * @param tplData
+     */
+    private void buildDaoMapper(Map tplData) throws TemplateException, IOException {
+        Template template = cfg.getTemplate("dao.mapper.ftl");
+        StringBuffer path = new StringBuffer(ROOT_MAIN_PATH)
+                .append(tplData.get("basePackagePath"))
+                .append(tplData.get("packageName")).append("/dao/mapper/")
+                .append(tplData.get("className")).append("Mapper")
+                .append(".java");
+        this.buildFile(template, tplData, path.toString());
+    }
+
+    /**
+     * 创建Mybatis Mapper.xml文件
+     *
+     * @param tplData
+     */
+    private void buildDaoMapperXml(Map tplData) throws TemplateException, IOException {
+        Template template = cfg.getTemplate("dao.mapperXml.ftl");
+        StringBuffer path = new StringBuffer(ROOT_MAIN_PATH)
+                .append(tplData.get("basePackagePath"))
+                .append(tplData.get("packageName")).append("/dao/mapper/xml/")
+                .append(tplData.get("className")).append("Mapper")
+                .append(".xml");
+        this.buildFile(template, tplData, path.toString());
+    }
+
+    /**
+     * 创建服务层
+     *
+     * @param tplData
+     */
+    private void buildService(Map tplData) throws TemplateException, IOException {
+        String className = (String) tplData.get("className");
+        if (Character.isLowerCase(className.charAt(0))){
+            tplData.put("lowerName", className);
+        }else{
+            String lowerName = (new StringBuilder()).append(Character.toLowerCase(className.charAt(0))).append(className.substring(1)).toString();
+            tplData.put("lowerName", lowerName);
+        }
+
+        Template template = cfg.getTemplate("service.ftl");
+        StringBuffer path = new StringBuffer(ROOT_MAIN_PATH)
+                .append(tplData.get("basePackagePath"))
+                .append(tplData.get("packageName")).append("/service/")
+                .append(tplData.get("className")).append("Service")
+                .append(".java");
+        this.buildFile(template, tplData, path.toString());
+    }
+
+    /**
+     * 创建web控制层
+     *
+     * @param tplData
+     */
+    private void buildWebController(Map tplData) throws TemplateException, IOException {
+        tplData.put("packagePath", ((String) tplData.get("packageName")).toLowerCase());
+        String className = (String) tplData.get("className");
+        if (Character.isLowerCase(className.charAt(0))){
+            tplData.put("classPath", className);
+            tplData.put("lowerName", className);
+        }else{
+            String lowerName = (new StringBuilder()).append(Character.toLowerCase(className.charAt(0))).append(className.substring(1)).toString();
+            tplData.put("classPath", lowerName);
+            tplData.put("lowerName", lowerName);
+        }
+
+        Template template = cfg.getTemplate("webController.ftl");
+        StringBuffer path = new StringBuffer(ROOT_MAIN_PATH)
+                .append(tplData.get("basePackagePath"))
+                .append(tplData.get("packageName")).append("/controller/web/")
+                .append(tplData.get("className")).append("WebController")
+                .append(".java");
+        this.buildFile(template, tplData, path.toString());
+    }
+
+    /**
+     * 创建wechat控制层
+     *
+     * @param tplData
+     */
+    private void buildWechatController(Map tplData) throws TemplateException, IOException {
+        tplData.put("packagePath", ((String) tplData.get("packageName")).toLowerCase());
+        String className = (String) tplData.get("className");
+        if (Character.isLowerCase(className.charAt(0))){
+            tplData.put("classPath", className);
+            tplData.put("lowerName", className);
+        }else{
+            String lowerName = (new StringBuilder()).append(Character.toLowerCase(className.charAt(0))).append(className.substring(1)).toString();
+            tplData.put("classPath", lowerName);
+            tplData.put("lowerName", lowerName);
+        }
+
+        Template template = cfg.getTemplate("wechatController.ftl");
+        StringBuffer path = new StringBuffer(ROOT_MAIN_PATH)
+                .append(tplData.get("basePackagePath"))
+                .append(tplData.get("packageName")).append("/controller/wechat/")
+                .append(tplData.get("className")).append("WechatController")
+                .append(".java");
+        this.buildFile(template, tplData, path.toString());
+    }
+
+    /**
+     * 创建服务层单元测试
+     *
+     * @param tplData
+     */
+    private void buildServiceTest(Map tplData) throws TemplateException, IOException {
+        String className = (String) tplData.get("className");
+        if (Character.isLowerCase(className.charAt(0))){
+            tplData.put("lowerName", className);
+        }else{
+            String lowerName = (new StringBuilder()).append(Character.toLowerCase(className.charAt(0))).append(className.substring(1)).toString();
+            tplData.put("lowerName", lowerName);
+        }
+
+        Template template = cfg.getTemplate("serviceTest.ftl");
+        StringBuffer path = new StringBuffer(ROOT_TEST_PATH)
+                .append(tplData.get("basePackagePath"))
+                .append(tplData.get("packageName")).append("/")
+                .append(tplData.get("className")).append("ServiceTest")
+                .append(".java");
+        this.buildFile(template, tplData, path.toString());
+    }
+
+    /**
+     * 创建控制层单元测试
+     *
+     * @param tplData
+     */
+    private void buildControllerTest(Map tplData) throws TemplateException, IOException {
+        tplData.put("packagePath", ((String) tplData.get("packageName")).toLowerCase());
+        String className = (String) tplData.get("className");
+        if (Character.isLowerCase(className.charAt(0))){
+            tplData.put("classPath", className);
+            tplData.put("lowerName", className);
+        }else{
+            String lowerName = (new StringBuilder()).append(Character.toLowerCase(className.charAt(0))).append(className.substring(1)).toString();
+            tplData.put("classPath", lowerName);
+            tplData.put("lowerName", lowerName);
+        }
+
+        Template template = cfg.getTemplate("controllerTest.ftl");
+        StringBuffer path = new StringBuffer(ROOT_TEST_PATH)
+                .append(tplData.get("basePackagePath"))
+                .append(tplData.get("packageName")).append("/")
+                .append(tplData.get("className")).append("ControllerTest")
+                .append(".java");
+        this.buildFile(template, tplData, path.toString());
+    }
+
+    /**
+     * 创建Json代码
+     *
+     * @param tplData
+     */
+    private void buildJson(Map tplData) throws TemplateException, IOException {
+        Template template = cfg.getTemplate("json.ftl");
+        StringBuffer path = new StringBuffer(ROOT_MAIN_PATH)
+                .append(tplData.get("basePackagePath"))
+                .append(tplData.get("packageName")).append("/domain/json/")
+                .append(tplData.get("className"))
+                .append(".json");
+        this.buildFile(template, tplData, path.toString());
+    }
+
+    /**
+     * 创建界面React JS代码
+     *
+     * @param tplData
+     */
+    private void buildJsForm(Map tplData) throws TemplateException, IOException {
+        Template template = cfg.getTemplate("jsform.ftl");
+        StringBuffer path = new StringBuffer(ROOT_MAIN_PATH)
+                .append(tplData.get("basePackagePath"))
+                .append(tplData.get("packageName")).append("/domain/js/")
+                .append(tplData.get("className"))
+                .append(".js");
+        this.buildFile(template, tplData, path.toString());
+    }
+}
+/**
+ * -------------------_ooOoo_-------------------
+ * ------------------o8888888o------------------
+ * ------------------88" . "88------------------
+ * ------------------(| -_- |)------------------
+ * ------------------O\  =  /O------------------
+ * ---------------____/`---'\____---------------
+ * -------------.'  \\|     |//  `.-------------
+ * ------------/  \\|||  :  |||//  \------------
+ * -----------/  _||||| -:- |||||-  \-----------
+ * -----------|   | \\\  -  /// |   |-----------
+ * -----------| \_|  ''\---/''  |   |-----------
+ * -----------\  .-\__  `-`  ___/-. /-----------
+ * ---------___`. .'  /--.--\  `. . __----------
+ * ------."" '<  `.___\_<|>_/___.'  >'"".-------
+ * -----| | :  `- \`.;`\ _ /`;.`/ - ` : | |-----
+ * -----\  \ `-.   \_ __\ /__ _/   .-` /  /-----
+ * ======`-.____`-.___\_____/___.-`____.-'======
+ * -------------------`=---='
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * ---------佛祖保佑---hugeinfo---永无BUG----------
+ */
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/utils/DbDataTypeToJavaType.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/utils/DbDataTypeToJavaType.java
new file mode 100644
index 0000000..a81ff7c
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/utils/DbDataTypeToJavaType.java
@@ -0,0 +1,71 @@
+package cn.huge.module.buildcode.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @title: 代码生成器:数据库类型转java类型-mysql
+ * @description: 代码生成器:数据库类型转java类型-mysql
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+public class DbDataTypeToJavaType {
+
+    private static Map<String, String> map = new HashMap(16);
+    public static String DATA_TYPE_DATE = "Date";
+
+    static {
+        map.put("int", "Integer");
+
+        map.put("double", "Double");
+
+        map.put("float", "Float");
+
+        map.put("fbooleanloat", "Boolean");
+
+        map.put("varchar", "String");
+        map.put("char", "String");
+        map.put("text", "String");
+        map.put("longtext", "String");
+        map.put("mediumtext", "String");
+
+        map.put("data", "Date");
+        map.put("datetime", "Date");
+        map.put("time", "Date");
+        map.put("timestamp", "Date");
+    }
+
+    /**
+     * 转换java'类型
+     * @param dataType 数据库类型
+     * @return String
+     */
+    public static String getJavaType(String dataType) {
+        return map.get(dataType.toLowerCase());
+    }
+
+}
+/**
+ * -------------------_ooOoo_-------------------
+ * ------------------o8888888o------------------
+ * ------------------88" . "88------------------
+ * ------------------(| -_- |)------------------
+ * ------------------O\  =  /O------------------
+ * ---------------____/`---'\____---------------
+ * -------------.'  \\|     |//  `.-------------
+ * ------------/  \\|||  :  |||//  \------------
+ * -----------/  _||||| -:- |||||-  \-----------
+ * -----------|   | \\\  -  /// |   |-----------
+ * -----------| \_|  ''\---/''  |   |-----------
+ * -----------\  .-\__  `-`  ___/-. /-----------
+ * ---------___`. .'  /--.--\  `. . __----------
+ * ------."" '<  `.___\_<|>_/___.'  >'"".-------
+ * -----| | :  `- \`.;`\ _ /`;.`/ - ` : | |-----
+ * -----\  \ `-.   \_ __\ /__ _/   .-` /  /-----
+ * ======`-.____`-.___\_____/___.-`____.-'======
+ * -------------------`=---='
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * ---------佛祖保佑---hugeinfo---永无BUG----------
+ */
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/CustClient.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/CustClient.java
new file mode 100644
index 0000000..e3380e9
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/CustClient.java
@@ -0,0 +1,46 @@
+package cn.huge.module.client.api;
+
+import cn.huge.base.common.bo.ReturnBO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @title: 客户用户中心微服务调用接口
+ * @description: 客户用户中心微服务调用接口
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+@FeignClient(name = "dyh-cust")
+public interface CustClient {
+
+    /**
+     * 内部用户-获取登录用户
+     * @url {ctx}/api/client/ctUser/clientGetUser?userId=
+     * @param userId 登录用户编号
+     * @return ReturnBO
+     */
+    @GetMapping("/api/client/ctUser/clientGetUser")
+    ReturnBO clientGetUser(@RequestParam("userId") String userId);
+
+    /**
+     * 内部用户-获取登录用户-所有信息
+     * @url {ctx}/api/client/ctUser/clientGetUserAll?userId=
+     * @param userId 登录用户编号
+     * @return
+     */
+    @GetMapping("/api/client/ctUser/clientGetUserAll")
+    ReturnBO clientGetUserAll(@RequestParam("userId") String userId);
+
+    /**
+     * 当事人-获取登录用户-所有信息
+     * @url {ctx}/api/client/paUser/clientGetUserAll?userId=
+     * @param userId 登录用户编号
+     * @return ReturnBO
+     */
+    @GetMapping("/api/client/paUser/clientGetUserAll")
+    ReturnBO paclientGetUser(@RequestParam("userId") String userId);
+
+}
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/UtilsClient.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/UtilsClient.java
new file mode 100644
index 0000000..51df0f7
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/UtilsClient.java
@@ -0,0 +1,25 @@
+package cn.huge.module.client.api;
+
+import cn.huge.base.common.bo.ReturnBO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+/**
+ * @title: 公共工具微服务调用接口
+ * @description: 公共工具微服务调用接口
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+@FeignClient(name = "dyh-utils")
+public interface UtilsClient {
+
+    /**
+     * 公共id-获取时间Id,后四位常量
+     * @url {ctx}/api/client/dispUtils/getNewTimeId
+     * @return Object
+     */
+    @GetMapping("/api/client/dispUtils/getNewTimeId")
+    ReturnBO getNewTimeId();
+}
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java
new file mode 100644
index 0000000..5f5609c
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java
@@ -0,0 +1,102 @@
+package cn.huge.module.client.api.impl;
+
+import cn.huge.base.common.bo.ReturnBO;
+import cn.huge.base.common.constant.ReturnConsts;
+import cn.huge.base.common.exception.ClientException;
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.module.client.api.CustClient;
+import cn.huge.module.cust.dto.CtUserDTO;
+import cn.huge.module.cust.dto.PaUserDTO;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @title: 客户用户中心微服务调用接口实现
+ * @description: 客户用户中心微服务调用接口实现
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+@Slf4j
+@Component
+public class CustClientImpl {
+
+    private CustClient custClient;
+
+    @Autowired
+    public CustClientImpl(CustClient custClient) {
+        this.custClient = custClient;
+    }
+
+    /**
+     * ObjectMapper工具类
+     */
+    private ObjectMapper objectMapper = new ObjectMapper();
+
+    /**
+     * 内部用户-获取登录用户
+     * @param userId 用户编号
+     * @return CtUserDTO
+     */
+    public CtUserDTO clientGetUser(String userId){
+        try{
+            ReturnBO returnBo = custClient.clientGetUser(userId);
+            if (ReturnConsts.OK == returnBo.getCode()){
+                CtUserDTO loginUser = objectMapper.convertValue(returnBo.getData(), CtUserDTO.class);
+                return loginUser;
+            }else{
+                log.error("Client外服务接口[CustClientImpl.clientGetUser]请求异常:" + returnBo.getMsg(), returnBo.getMsg());
+                throw new ClientException("CustClientImpl.clientGetUser", returnBo.getMsg());
+            }
+        }catch (Exception e){
+            log.error("service方法[CustClientImpl.clientGetUser]调用异常:"+e, e);
+            throw new ServiceException("CustClientImpl.clientGetUser", e);
+        }
+    }
+
+    /**
+     * 内部用户-获取登录用户-所有信息
+     * @param userId
+     * @return
+     */
+    public CtUserDTO clientGetUserAll(String userId){
+        try{
+            ReturnBO returnBo = custClient.clientGetUserAll(userId);
+            if (ReturnConsts.OK == returnBo.getCode()){
+                CtUserDTO loginUser = objectMapper.convertValue(returnBo.getData(), CtUserDTO.class);
+                return loginUser;
+            }else{
+                log.error("Client外服务接口[CustClientImpl.clientGetUserAll]请求异常:" + returnBo.getMsg(), returnBo.getMsg());
+                throw new ClientException("CustClientImpl.clientGetUserAll", returnBo.getMsg());
+            }
+        }catch (Exception e){
+            log.error("service方法[CustClientImpl.clientGetUserAll]调用异常:"+e, e);
+            throw new ServiceException("CustClientImpl.clientGetUserAll", e);
+        }
+    }
+
+    /**
+     * 当事人-获取登录用户-所有信息
+     * @param userId 用户编号
+     * @return
+     */
+    public PaUserDTO paclientGetUser(String userId){
+        try{
+            ReturnBO returnBo = custClient.paclientGetUser(userId);
+            if (ReturnConsts.OK == returnBo.getCode()){
+                PaUserDTO loginUser = objectMapper.convertValue(returnBo.getData(), PaUserDTO.class);
+                return loginUser;
+            }else{
+                log.error("Client外服务接口[CustClientImpl.paclientGetUser]请求异常:" + returnBo.getMsg(), returnBo.getMsg());
+                throw new ClientException("CustClientImpl.paclientGetUser", returnBo.getMsg());
+            }
+        }catch (Exception e){
+            log.error("service方法[CustClientImpl.paclientGetUser]调用异常:"+e, e);
+            throw new ServiceException("CustClientImpl.paclientGetUser", e);
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/impl/UtilsClientImpl.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/impl/UtilsClientImpl.java
new file mode 100644
index 0000000..e973ce7
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/impl/UtilsClientImpl.java
@@ -0,0 +1,53 @@
+package cn.huge.module.client.api.impl;
+
+import cn.huge.base.common.bo.ReturnBO;
+import cn.huge.base.common.constant.ReturnConsts;
+import cn.huge.base.common.exception.ClientException;
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.module.client.api.UtilsClient;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @title: 公共工具微服务调用接口
+ * @description: 公共工具微服务调用接口
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+@Slf4j
+@Component
+public class UtilsClientImpl {
+
+    private UtilsClient utilsClient;
+
+    @Autowired
+    public UtilsClientImpl(UtilsClient utilsClient) {
+        this.utilsClient = utilsClient;
+    }
+
+    /**
+     * 公共id-获取时间Id,后四位常量
+     * @url {ctx}/api/client/dispUtils/getNewTimeId
+     * @return Object
+     */
+    public String getNewTimeId(){
+        try{
+            ReturnBO returnBo = utilsClient.getNewTimeId();
+            if (ReturnConsts.OK == returnBo.getCode()){
+                String id = (String) returnBo.getData();
+                return id;
+            }else{
+                log.error("Client外服务接口[UtilsClientImpl.getNewTimeId]请求异常:" + returnBo.getMsg(), returnBo.getMsg());
+                throw new ClientException("UtilsClientImpl.getNewTimeId", returnBo.getMsg());
+            }
+        }catch (Exception e){
+            log.error("service方法[UtilsClientImpl.getNewTimeId]请求成功,处理异常:"+e, e);
+            throw new ServiceException("UtilsClientImpl.getNewTimeId", e);
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/config/MybatisPlusConfig.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..9990856
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/config/MybatisPlusConfig.java
@@ -0,0 +1,49 @@
+package cn.huge.module.config;
+
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @title: MybatisPlus配置
+ * @description: MybatisPlus配置
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+@Configuration
+public class MybatisPlusConfig {
+
+    @Bean
+    public PaginationInterceptor paginationInterceptor() {
+        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
+        // paginationInterceptor.setOverflow(false);
+        // 设置最大单页限制数量,默认 500 条,-1 不受限制
+        // paginationInterceptor.setLimit(500);
+        return paginationInterceptor;
+    }
+}
+/**
+ * -------------------_ooOoo_-------------------
+ * ------------------o8888888o------------------
+ * ------------------88" . "88------------------
+ * ------------------(| -_- |)------------------
+ * ------------------O\  =  /O------------------
+ * ---------------____/`---'\____---------------
+ * -------------.'  \\|     |//  `.-------------
+ * ------------/  \\|||  :  |||//  \------------
+ * -----------/  _||||| -:- |||||-  \-----------
+ * -----------|   | \\\  -  /// |   |-----------
+ * -----------| \_|  ''\---/''  |   |-----------
+ * -----------\  .-\__  `-`  ___/-. /-----------
+ * ---------___`. .'  /--.--\  `. . __----------
+ * ------."" '<  `.___\_<|>_/___.'  >'"".-------
+ * -----| | :  `- \`.;`\ _ /`;.`/ - ` : | |-----
+ * -----\  \ `-.   \_ __\ /__ _/   .-` /  /-----
+ * ======`-.____`-.___\_____/___.-`____.-'======
+ * -------------------`=---='
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * ---------佛祖保佑---hugeinfo---永无BUG----------
+ */
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/constant/CacheConsts.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/constant/CacheConsts.java
new file mode 100644
index 0000000..d7d44a1
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/constant/CacheConsts.java
@@ -0,0 +1,35 @@
+package cn.huge.module.constant;
+
+/**
+ * @title: 缓存相关常量类
+ * @description: 存放缓存相关常量
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+public class CacheConsts {
+    
+}
+/**
+ * -------------------_ooOoo_-------------------
+ * ------------------o8888888o------------------
+ * ------------------88" . "88------------------
+ * ------------------(| -_- |)------------------
+ * ------------------O\  =  /O------------------
+ * ---------------____/`---'\____---------------
+ * -------------.'  \\|     |//  `.-------------
+ * ------------/  \\|||  :  |||//  \------------
+ * -----------/  _||||| -:- |||||-  \-----------
+ * -----------|   | \\\  -  /// |   |-----------
+ * -----------| \_|  ''\---/''  |   |-----------
+ * -----------\  .-\__  `-`  ___/-. /-----------
+ * ---------___`. .'  /--.--\  `. . __----------
+ * ------."" '<  `.___\_<|>_/___.'  >'"".-------
+ * -----| | :  `- \`.;`\ _ /`;.`/ - ` : | |-----
+ * -----\  \ `-.   \_ __\ /__ _/   .-` /  /-----
+ * ======`-.____`-.___\_____/___.-`____.-'======
+ * -------------------`=---='
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * ---------佛祖保佑---hugeinfo---永无BUG----------
+ */
diff --git a/dyh-service/dyh-ssim/src/main/java/cn/huge/module/utils/ConfigUtils.java b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/utils/ConfigUtils.java
new file mode 100644
index 0000000..aadf7f9
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/java/cn/huge/module/utils/ConfigUtils.java
@@ -0,0 +1,35 @@
+package cn.huge.module.utils;
+
+/**
+ * @title: 系统配置相关工具类
+ * @description: 存放系统配置相关工具方法
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+public class ConfigUtils {
+    
+}
+/**
+ * -------------------_ooOoo_-------------------
+ * ------------------o8888888o------------------
+ * ------------------88" . "88------------------
+ * ------------------(| -_- |)------------------
+ * ------------------O\  =  /O------------------
+ * ---------------____/`---'\____---------------
+ * -------------.'  \\|     |//  `.-------------
+ * ------------/  \\|||  :  |||//  \------------
+ * -----------/  _||||| -:- |||||-  \-----------
+ * -----------|   | \\\  -  /// |   |-----------
+ * -----------| \_|  ''\---/''  |   |-----------
+ * -----------\  .-\__  `-`  ___/-. /-----------
+ * ---------___`. .'  /--.--\  `. . __----------
+ * ------."" '<  `.___\_<|>_/___.'  >'"".-------
+ * -----| | :  `- \`.;`\ _ /`;.`/ - ` : | |-----
+ * -----\  \ `-.   \_ __\ /__ _/   .-` /  /-----
+ * ======`-.____`-.___\_____/___.-`____.-'======
+ * -------------------`=---='
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * ---------佛祖保佑---hugeinfo---永无BUG----------
+ */
diff --git a/dyh-service/dyh-ssim/src/main/resources/config/application-dev.yml b/dyh-service/dyh-ssim/src/main/resources/config/application-dev.yml
new file mode 100644
index 0000000..68753a3
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/resources/config/application-dev.yml
@@ -0,0 +1,96 @@
+#server配置
+server:
+  #端口
+  port: 9008
+
+#Spring配置
+spring:
+  #服务名
+  application:
+    name: dyh-ssim
+  #数据源配置
+  datasource:
+    url: jdbc:dm://192.168.3.51:5236?schema=gzdyh_ssim_dev
+    username: SYSDBA
+    password: hugeinfo123
+    driver-class-name: dm.jdbc.driver.DmDriver
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      stat-view-servlet:
+        # 关闭 Druid 的统计视图
+        enabled: false
+      # 定期检查空闲连接的有效性
+      test-while-idle: true
+      # 用来验证数据库连接是否仍然可用的 SQL 查询
+      validation-query: SELECT 1
+
+  # redis配置,单机版,集群另外配置
+  redis:
+    host: 183.2.142.21
+    port: 9017
+    password: hugeinfo123
+    # 使用的Redis数据库索引(默认为0)
+    database: 0
+    # 连接超时时间(毫秒)
+    timeout: 5000
+    lettuce:
+      pool:
+        # 连接池最大连接数
+        max-active: 100
+        # 连接池最大阻塞等待时间
+        max-wait: 100000
+        # 连接池中的最大空闲连接
+        max-idle: 10
+        # 连接池中的最小空闲连接
+        min-idle: 0
+
+#注册中心配置
+eureka:
+  client:
+    service-url:
+      #注册中心单机
+      defaultZone: http://localhost:9001/eureka
+      #注册中心集群
+      #defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka
+    #是否注册到注册中心
+    register-with-eureka: true
+    #是否从注册中心拉取注册服务列表
+    fetch-registry: true
+    #首次注册时间
+    initial-instance-info-replication-interval-seconds: 2
+    #客户端定时刷新本地缓存时间
+    registry-fetch-interval-seconds: 5
+  instance:
+    prefer-ip-address: true
+    instance-id: ${spring.cloud.client.ip-address}:${server.port}
+    #心跳时间,即服务续约间隔时间(缺省为30s)
+    lease-renewal-interval-in-seconds: 10
+    #发呆时间,即服务续约到期时间(缺省为90s)
+    lease-expiration-duration-in-seconds: 30
+
+#hystrix配置
+hystrix:
+  command:
+    default:
+      execution:
+        timeout:
+          enabled: true
+        isolation:
+          thread:
+            timeoutInMilliseconds: 30000
+
+#健康检查-按需配置
+management:
+  endpoint:
+    health:
+      show-details: always
+  endpoints:
+    web:
+      exposure:
+        include: "*"
+  server:
+    #port: 9021
+    servlet:
+      context-path: /
+    ssl:
+      enabled: false
\ No newline at end of file
diff --git a/dyh-service/dyh-ssim/src/main/resources/config/application-prod.yml b/dyh-service/dyh-ssim/src/main/resources/config/application-prod.yml
new file mode 100644
index 0000000..68753a3
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/resources/config/application-prod.yml
@@ -0,0 +1,96 @@
+#server配置
+server:
+  #端口
+  port: 9008
+
+#Spring配置
+spring:
+  #服务名
+  application:
+    name: dyh-ssim
+  #数据源配置
+  datasource:
+    url: jdbc:dm://192.168.3.51:5236?schema=gzdyh_ssim_dev
+    username: SYSDBA
+    password: hugeinfo123
+    driver-class-name: dm.jdbc.driver.DmDriver
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      stat-view-servlet:
+        # 关闭 Druid 的统计视图
+        enabled: false
+      # 定期检查空闲连接的有效性
+      test-while-idle: true
+      # 用来验证数据库连接是否仍然可用的 SQL 查询
+      validation-query: SELECT 1
+
+  # redis配置,单机版,集群另外配置
+  redis:
+    host: 183.2.142.21
+    port: 9017
+    password: hugeinfo123
+    # 使用的Redis数据库索引(默认为0)
+    database: 0
+    # 连接超时时间(毫秒)
+    timeout: 5000
+    lettuce:
+      pool:
+        # 连接池最大连接数
+        max-active: 100
+        # 连接池最大阻塞等待时间
+        max-wait: 100000
+        # 连接池中的最大空闲连接
+        max-idle: 10
+        # 连接池中的最小空闲连接
+        min-idle: 0
+
+#注册中心配置
+eureka:
+  client:
+    service-url:
+      #注册中心单机
+      defaultZone: http://localhost:9001/eureka
+      #注册中心集群
+      #defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka
+    #是否注册到注册中心
+    register-with-eureka: true
+    #是否从注册中心拉取注册服务列表
+    fetch-registry: true
+    #首次注册时间
+    initial-instance-info-replication-interval-seconds: 2
+    #客户端定时刷新本地缓存时间
+    registry-fetch-interval-seconds: 5
+  instance:
+    prefer-ip-address: true
+    instance-id: ${spring.cloud.client.ip-address}:${server.port}
+    #心跳时间,即服务续约间隔时间(缺省为30s)
+    lease-renewal-interval-in-seconds: 10
+    #发呆时间,即服务续约到期时间(缺省为90s)
+    lease-expiration-duration-in-seconds: 30
+
+#hystrix配置
+hystrix:
+  command:
+    default:
+      execution:
+        timeout:
+          enabled: true
+        isolation:
+          thread:
+            timeoutInMilliseconds: 30000
+
+#健康检查-按需配置
+management:
+  endpoint:
+    health:
+      show-details: always
+  endpoints:
+    web:
+      exposure:
+        include: "*"
+  server:
+    #port: 9021
+    servlet:
+      context-path: /
+    ssl:
+      enabled: false
\ No newline at end of file
diff --git a/dyh-service/dyh-ssim/src/main/resources/config/application-test.yml b/dyh-service/dyh-ssim/src/main/resources/config/application-test.yml
new file mode 100644
index 0000000..68753a3
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/resources/config/application-test.yml
@@ -0,0 +1,96 @@
+#server配置
+server:
+  #端口
+  port: 9008
+
+#Spring配置
+spring:
+  #服务名
+  application:
+    name: dyh-ssim
+  #数据源配置
+  datasource:
+    url: jdbc:dm://192.168.3.51:5236?schema=gzdyh_ssim_dev
+    username: SYSDBA
+    password: hugeinfo123
+    driver-class-name: dm.jdbc.driver.DmDriver
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      stat-view-servlet:
+        # 关闭 Druid 的统计视图
+        enabled: false
+      # 定期检查空闲连接的有效性
+      test-while-idle: true
+      # 用来验证数据库连接是否仍然可用的 SQL 查询
+      validation-query: SELECT 1
+
+  # redis配置,单机版,集群另外配置
+  redis:
+    host: 183.2.142.21
+    port: 9017
+    password: hugeinfo123
+    # 使用的Redis数据库索引(默认为0)
+    database: 0
+    # 连接超时时间(毫秒)
+    timeout: 5000
+    lettuce:
+      pool:
+        # 连接池最大连接数
+        max-active: 100
+        # 连接池最大阻塞等待时间
+        max-wait: 100000
+        # 连接池中的最大空闲连接
+        max-idle: 10
+        # 连接池中的最小空闲连接
+        min-idle: 0
+
+#注册中心配置
+eureka:
+  client:
+    service-url:
+      #注册中心单机
+      defaultZone: http://localhost:9001/eureka
+      #注册中心集群
+      #defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka
+    #是否注册到注册中心
+    register-with-eureka: true
+    #是否从注册中心拉取注册服务列表
+    fetch-registry: true
+    #首次注册时间
+    initial-instance-info-replication-interval-seconds: 2
+    #客户端定时刷新本地缓存时间
+    registry-fetch-interval-seconds: 5
+  instance:
+    prefer-ip-address: true
+    instance-id: ${spring.cloud.client.ip-address}:${server.port}
+    #心跳时间,即服务续约间隔时间(缺省为30s)
+    lease-renewal-interval-in-seconds: 10
+    #发呆时间,即服务续约到期时间(缺省为90s)
+    lease-expiration-duration-in-seconds: 30
+
+#hystrix配置
+hystrix:
+  command:
+    default:
+      execution:
+        timeout:
+          enabled: true
+        isolation:
+          thread:
+            timeoutInMilliseconds: 30000
+
+#健康检查-按需配置
+management:
+  endpoint:
+    health:
+      show-details: always
+  endpoints:
+    web:
+      exposure:
+        include: "*"
+  server:
+    #port: 9021
+    servlet:
+      context-path: /
+    ssl:
+      enabled: false
\ No newline at end of file
diff --git a/dyh-service/dyh-ssim/src/main/resources/config/application.yml b/dyh-service/dyh-ssim/src/main/resources/config/application.yml
new file mode 100644
index 0000000..f2b985a
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/resources/config/application.yml
@@ -0,0 +1,63 @@
+#Spring配置
+spring:
+  profiles:
+    active:
+      - dev
+  #      - test
+  #      - prod
+
+  devtools:
+    restart:
+      enabled: true
+  servlet:
+    multipart:
+      max-file-size: -1
+      max-request-size: -1
+  main:
+    #可以重复命名配置
+    allow-bean-definition-overriding: true
+    allow-circular-references: true
+
+#server配置
+server:
+  #服务时限配置
+  tomcat:
+    min-spare-threads: 100
+    max-threads: 256
+    connection-timeout: 8000
+  main:
+    #可以重复命名配置
+    allow-bean-definition-overriding: true
+
+#ribbon配置
+ribbon:
+  #服务之间调用,请求处理超时时间
+  ReadTimeout: 120000
+  #服务之间调用,请求连接的超时时间
+  ConnectTimeout: 30000
+
+#mybatis-plus配置
+mybatis-plus:
+  configuration:
+    #控制台输出sql语句
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    #    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
+    #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as)
+    ap-underscore-to-camel-case: true
+    #如何自动映射列到字段或属性,NONE:表示取消自动映射;PARTIAL:只会自动映射没有定义嵌套结果集映射的结果集。FULL:会自动映射任意复杂的结果集(无论是否嵌套)。默认是partial,这是一种全局设置
+    auto-mapping-behavior: full
+    global-config:
+      db-config:
+        #驼峰下划线转换
+        column-underline: false
+        #数据库大写下划线转换
+        capital-mode: true
+        #全局逻辑删除的实体字段名
+        #logic-delete-field: flag
+        #逻辑未删除值(默认为 0),实体类字段需要加上@TableLogic
+        logic-not-delete-value: 0
+        #逻辑已删除值(默认为 1)
+        logic-delete-value: 1
+        #字段策略,IGNORED:忽略判断,NOT_NULL:非null判断,NOT_EMPTY:非空判断,DEFAULT:默认,NEVER:不加入sql
+        update-strategy: IGNORED
+  mapper-locations: classpath*:/cn/huge/*/*/dao/mapper/xml/*Mapper.xml
\ No newline at end of file
diff --git a/dyh-service/dyh-ssim/src/main/resources/logback-spring.xml b/dyh-service/dyh-ssim/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..7610225
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/main/resources/logback-spring.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <!-- 配置一天一个日志文件,INFO信息存在一个文件中,ERROR信息存在一个文件中 -->
+    <!-- 日志级别从低到高 TRACE < DEBUG < INFO < WARN < ERROR -->
+
+    <!-- 文件输出格式 -->
+    <property name="PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{36}] - %msg%n" />
+    <property name="CT_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger{36}] - %msg%n" />
+    <!--  日志文件目录  -->
+    <property name="LOG_HOME" value="logs/ssim/service" />
+    <property name="CT_LOG_HOME" value="logs/ssim/business" />
+    <!--  日志文件名称  -->
+    <property name="LOG_NAME" value="ssim" />
+
+    <!-- 开发环境日志配置 -->
+    <springProfile name="dev">
+        <!-- 配置控制台打印信息 -->
+        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+            <encoder charset="UTF-8">
+                <!-- 文件输出格式 -->
+                <pattern>${PATTERN}</pattern>
+            </encoder>
+        </appender>
+
+        <!-- 设置根日志级别,如果日志级别低于设置的级别,则该日志不会被记录。如果日志级别高于设置的级别,那么这条日志将会被记录 -->
+        <root level="INFO">
+            <appender-ref ref="CONSOLE" />
+        </root>
+
+        <logger name="cn.huge" level="DEBUG" additivity="true"/>
+        <logger name="org.hibernate.SQL" level="DEBUG" additivity="true"/>
+        <!-- 为 MyBatis 设置 DEBUG 级别的日志 -->
+        <logger name="com.baomidou.mybatisplus" level="INFO" additivity="false">
+            <appender-ref ref="CONSOLE" />
+        </logger>
+    </springProfile>
+
+    <!-- 测试环境+生产环境,多个使用逗号隔开 -->
+    <springProfile name="test,prod">
+        <!-- 配置DEBUG文件 -->
+        <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                <!-- 日志文件名称 -->
+                <fileNamePattern>${LOG_HOME}/${LOG_NAME}.debug.%d{yyyyMMdd}.%i.log</fileNamePattern>
+                <!-- 日志保留31天 -->
+                <maxHistory>31</maxHistory>
+                <!-- 所有日志大小不超过30GB -->
+                <totalSizeCap>30GB</totalSizeCap>
+                <!-- 单个日志文件大小不超过10MB -->
+                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                    <maxFileSize>10MB</maxFileSize>
+                </timeBasedFileNamingAndTriggeringPolicy>
+            </rollingPolicy>
+
+            <encoder charset="UTF-8">
+                <!-- 文件输出格式 -->
+                <pattern>${PATTERN}</pattern>
+            </encoder>
+
+            <!-- 只打印 DEBUG 日志 -->
+            <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                <level>DEBUG</level>
+                <!-- 命中就接受 -->
+                <onMatch>ACCEPT</onMatch>
+                <!-- 没有命中就过滤掉 -->
+                <onMismatch>DENY</onMismatch>
+            </filter>
+        </appender>
+
+        <!-- 配置INFO文件 -->
+        <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                <!-- 日志文件名称 -->
+                <fileNamePattern>${LOG_HOME}/${LOG_NAME}.info.%d{yyyyMMdd}.%i.log</fileNamePattern>
+                <!-- 日志保留31天 -->
+                <maxHistory>31</maxHistory>
+                <!-- 所有日志大小不超过30GB -->
+                <totalSizeCap>30GB</totalSizeCap>
+                <!-- 单个日志文件大小不超过10MB -->
+                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                    <maxFileSize>10MB</maxFileSize>
+                </timeBasedFileNamingAndTriggeringPolicy>
+            </rollingPolicy>
+
+            <encoder charset="UTF-8">
+                <!-- 文件输出格式 -->
+                <pattern>${PATTERN}</pattern>
+            </encoder>
+
+            <!-- 只打印 INFO 日志 -->
+            <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                <level>INFO</level>
+                <!-- 命中就过滤掉 -->
+                <onMatch>ACCEPT</onMatch>
+                <!-- 没有命中就接受 -->
+                <onMismatch>DENY</onMismatch>
+            </filter>
+        </appender>
+
+        <!-- 配置ERROR文件 -->
+        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                !-- 日志文件名称 -->
+                <fileNamePattern>${LOG_HOME}/${LOG_NAME}.error.%d{yyyyMMdd}.%i.log</fileNamePattern>
+                <!-- 日志保留31天 -->
+                <maxHistory>31</maxHistory>
+                <!-- 所有日志大小不超过30GB -->
+                <totalSizeCap>30GB</totalSizeCap>
+                <!-- 单个日志文件大小不超过10MB -->
+                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                    <maxFileSize>10MB</maxFileSize>
+                </timeBasedFileNamingAndTriggeringPolicy>
+            </rollingPolicy>
+
+            <encoder charset="UTF-8">
+                <!-- 文件输出格式 -->
+                <pattern>${PATTERN}</pattern>
+            </encoder>
+
+            <!-- 只打印 ERROR 日志 -->
+            <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                <level>ERROR</level>
+                <!-- 命中就过滤掉 -->
+                <onMatch>ACCEPT</onMatch>
+                <!-- 没有命中就接受 -->
+                <onMismatch>DENY</onMismatch>
+            </filter>
+        </appender>
+
+        <!-- 为 MyBatis 设置 DEBUG 级别的日志 -->
+        <logger name="org.apache.ibatis" level="DEBUG"/>
+        <!-- 输出 SQL 语句和参数 -->
+        <logger name="org.apache.ibatis.binding" level="DEBUG"/>
+        <!-- 输出 SQL 语句执行情况 -->
+        <logger name="org.apache.ibatis.session" level="DEBUG"/>
+        <!-- 输出 SQL 语句执行结果 -->
+        <logger name="org.apache.ibatis.executor" level="DEBUG"/>
+        <!-- 输出 SQL 语句 -->
+        <logger name="org.apache.ibatis.scripting" level="DEBUG"/>
+
+        <!-- 设置根日志级别,如果日志级别低于设置的级别,则该日志不会被记录。如果日志级别高于设置的级别,那么这条日志将会被记录 -->
+        <root level="DEBUG">
+            <appender-ref ref="DEBUG_FILE" />
+            <appender-ref ref="INFO_FILE" />
+            <appender-ref ref="ERROR_FILE" />
+        </root>
+
+    </springProfile>
+</configuration>
\ No newline at end of file
diff --git a/dyh-service/dyh-ssim/src/test/java/cn/huge/base/common/base/BaseServiceTest.java b/dyh-service/dyh-ssim/src/test/java/cn/huge/base/common/base/BaseServiceTest.java
new file mode 100644
index 0000000..8a8f662
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/test/java/cn/huge/base/common/base/BaseServiceTest.java
@@ -0,0 +1,30 @@
+package cn.huge.base.common.base;
+
+import lombok.extern.slf4j.Slf4j;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.web.servlet.MockMvc;
+
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@WebAppConfiguration
+public class BaseServiceTest {
+
+    private MockMvc mockMvc;
+
+    @Before
+    public void init() {
+        log.info("开始测试...");
+    }
+
+    @After
+    public void after() {
+        log.info("测试结束...");
+    }
+}
\ No newline at end of file
diff --git a/dyh-service/dyh-ssim/src/test/java/cn/huge/module/BuildCodeServiceTest.java b/dyh-service/dyh-ssim/src/test/java/cn/huge/module/BuildCodeServiceTest.java
new file mode 100644
index 0000000..8b4448a
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/test/java/cn/huge/module/BuildCodeServiceTest.java
@@ -0,0 +1,79 @@
+package cn.huge.module;
+
+import cn.huge.base.common.base.BaseServiceTest;
+import cn.huge.module.buildcode.service.BuildCodeService;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class BuildCodeServiceTest extends BaseServiceTest {
+
+    @Autowired
+    private BuildCodeService service;
+
+    //数据库为jdbc连接url中设置的默认库
+    private String basePackage = "cn.huge.module";
+    private String packageName = "ctuser";
+    private String className = "CtUnit";
+    private String tableSchema = "gzdyh_ssim_dev";
+    private String tableName = "dyh_ct_unit";
+    private String author = "liyj";
+    private String version = "1.0.0";
+
+    @Test
+    public void buildAllTest() {
+        service.buildAll(basePackage, packageName, className, tableSchema, tableName, author, version);
+
+    }
+
+    /********************************************************
+     *                     下面单独执行                       *
+     ********************************************************
+     */
+    @Test
+    public void buildPoTest() {
+        service.buildPo(basePackage, packageName, className, tableSchema, tableName, author, version);
+    }
+
+    @Test
+    public void buildBoTest() {
+        service.buildBo(basePackage, packageName, className, tableSchema, tableName, author, version);
+    }
+
+    @Test
+    public void buildServiceTest() {
+        service.buildService(basePackage, packageName, className, tableSchema, tableName, author, version);
+    }
+
+    @Test
+    public void buildWebControllerTest() {
+        service.buildWebController(basePackage, packageName, className, tableSchema, tableName, author, version);
+    }
+
+    @Test
+    public void buildWechatControllerTest() {
+        service.buildWechatController(basePackage, packageName, className, tableSchema, tableName, author, version);
+    }
+
+    @Test
+    public void buildJsonTest() {
+        service.buildJson(basePackage, packageName, className, tableSchema, tableName, author, version);
+
+    }
+
+    @Test
+    public void buildJsFormTest() {
+        service.buildJsForm(basePackage, packageName, className, tableSchema, tableName, author, version);
+    }
+
+    @Test
+    public void buildServiceTestTest() {
+        service.buildServiceTest(basePackage, packageName, className, tableSchema, tableName, author, version);
+    }
+
+    @Test
+    public void buildControllerTestTest() {
+        service.buildControllerTest(basePackage, packageName, className, tableSchema, tableName, author, version);
+    }
+
+
+}
diff --git a/dyh-service/dyh-ssim/src/test/java/cn/huge/module/DyhSsimApplicationTest.java b/dyh-service/dyh-ssim/src/test/java/cn/huge/module/DyhSsimApplicationTest.java
new file mode 100644
index 0000000..baea555
--- /dev/null
+++ b/dyh-service/dyh-ssim/src/test/java/cn/huge/module/DyhSsimApplicationTest.java
@@ -0,0 +1,17 @@
+package cn.huge.module;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class DyhSsimApplicationTest {
+
+	@Test
+	public void contextLoads() {
+		
+	}
+
+}

--
Gitblit v1.8.0