dyh-service/dyh-ssim/pom.xml
New file @@ -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> dyh-service/dyh-ssim/src/main/assembly/assembly.xml
New file @@ -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> dyh-service/dyh-ssim/src/main/java/cn/huge/module/DyhSsimApplication.java
New file @@ -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); } } dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/controller/BuildCodeController.java
New file @@ -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---------- */ dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/dao/mapper/BuildCodeMapper.java
New file @@ -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---------- */ dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/dao/mapper/xml/BuildCodeMapper.xml
New file @@ -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> dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/domain/bo/UserTabColsBO.java
New file @@ -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---------- */ dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/service/BuildCodeService.java
New file @@ -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---------- */ dyh-service/dyh-ssim/src/main/java/cn/huge/module/buildcode/utils/DbDataTypeToJavaType.java
New file @@ -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---------- */ dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/CustClient.java
New file @@ -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); } dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/UtilsClient.java
New file @@ -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(); } dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java
New file @@ -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); } } } dyh-service/dyh-ssim/src/main/java/cn/huge/module/client/api/impl/UtilsClientImpl.java
New file @@ -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); } } } dyh-service/dyh-ssim/src/main/java/cn/huge/module/config/MybatisPlusConfig.java
New file @@ -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---------- */ dyh-service/dyh-ssim/src/main/java/cn/huge/module/constant/CacheConsts.java
New file @@ -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---------- */ dyh-service/dyh-ssim/src/main/java/cn/huge/module/utils/ConfigUtils.java
New file @@ -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---------- */ dyh-service/dyh-ssim/src/main/resources/config/application-dev.yml
New file @@ -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 dyh-service/dyh-ssim/src/main/resources/config/application-prod.yml
New file @@ -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 dyh-service/dyh-ssim/src/main/resources/config/application-test.yml
New file @@ -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 dyh-service/dyh-ssim/src/main/resources/config/application.yml
New file @@ -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 dyh-service/dyh-ssim/src/main/resources/logback-spring.xml
New file @@ -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> dyh-service/dyh-ssim/src/test/java/cn/huge/base/common/base/BaseServiceTest.java
New file @@ -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("测试结束..."); } } dyh-service/dyh-ssim/src/test/java/cn/huge/module/BuildCodeServiceTest.java
New file @@ -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); } } dyh-service/dyh-ssim/src/test/java/cn/huge/module/DyhSsimApplicationTest.java
New file @@ -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() { } }