Commit c6cf897a authored by Code-KingTT's avatar Code-KingTT

Merge remote-tracking branch 'origin/develop' into develop

# Conflicts: # src/main/resources/application.properties
parents 3e34a105 0d4a2952
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<groupId>com.yeejoin.amos</groupId> <groupId>com.yeejoin.amos</groupId>
<artifactId>amos-api-tool</artifactId> <artifactId>amos-api-tool</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>
<version>1.9.0-SNAPSHOT</version> <version>1.0.0-SNAPSHOT</version>
<name>amos-api-tool</name> <name>amos-api-tool</name>
<description>amos-api-tool</description> <description>amos-api-tool</description>
...@@ -18,6 +18,11 @@ ...@@ -18,6 +18,11 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency> </dependency>
...@@ -31,6 +36,58 @@ ...@@ -31,6 +36,58 @@
<version>1.4.5.RELEASE</version> <version>1.4.5.RELEASE</version>
</dependency> </dependency>
<!--JSqlparser(高效的SQL解析工具)-->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.4</version>
</dependency>
<!-- easy-poi -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.0.5</version>
<exclusions>
<exclusion>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.7</version>
</dependency>
<!-- JSON -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.67_noneautotype2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.8</version>
</dependency>
<dependency> <dependency>
<groupId>org.typroject</groupId> <groupId>org.typroject</groupId>
<artifactId>tyboot-core-foundation</artifactId> <artifactId>tyboot-core-foundation</artifactId>
...@@ -95,6 +152,17 @@ ...@@ -95,6 +152,17 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>org.typroject</groupId>
<artifactId>tyboot-component-emq</artifactId>
<version>${tyboot-version}</version>
<exclusions>
<exclusion>
<groupId>org.typroject</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>
...@@ -171,7 +239,21 @@ ...@@ -171,7 +239,21 @@
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.9</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope>
<mainClass>com.yeejoin.amos.Application</mainClass>
</configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId> <artifactId>maven-deploy-plugin</artifactId>
...@@ -180,6 +262,14 @@ ...@@ -180,6 +262,14 @@
<skip>true</skip> <skip>true</skip>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins> </plugins>
</build> </build>
......
...@@ -36,7 +36,6 @@ public class Application { ...@@ -36,7 +36,6 @@ public class Application {
String path = oConvertUtils.getString(env.getProperty("server.servlet.context-path")); String path = oConvertUtils.getString(env.getProperty("server.servlet.context-path"));
log.info("\n----------------------------------------------------------\n\t" log.info("\n----------------------------------------------------------\n\t"
+ "Application AMOS-API-TOOL is running! Access URLs:\n\t" + "Swagger文档: \thttp://" + ip + ":" + port + "Application AMOS-API-TOOL is running! Access URLs:\n\t" + "Swagger文档: \thttp://" + ip + ":" + port
+ path + "/doc.html\n" + "-----------------" + + path + "/doc.html\n" + "----------------------------------------------------------");
"-----------------------------------------");
} }
} }
package com.yeejoin.amos.api.tool.controller;
import com.yeejoin.amos.api.tool.face.model.AgencyTreeModel;
import com.yeejoin.amos.api.tool.face.service.AgencyTreeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.List;
/**
* @author r
*/
@RestController
@Api(tags = "机构树")
@RequestMapping(value = "/privilege_agency")
public class AgencyTreeResource {
@Autowired
private AgencyTreeService agencyTreeService;
/**
* 根据sequenceNbr删除
* @param sequenceNbr 主键
* @return Boolean
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除", notes = "根据sequenceNbr删除")
public ResponseModel<Boolean> deleteBySequenceNbr(@PathVariable(value = "sequenceNbr") Long sequenceNbr){
return ResponseHelper.buildResponse(agencyTreeService.removeById(sequenceNbr));
}
/**
*列表全部数据查询
* @return List<AgencyTreeModel>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@ApiOperation(httpMethod = "GET",value = "列表全部数据查询", notes = "列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<AgencyTreeModel>> selectForList() {
return ResponseHelper.buildResponse(agencyTreeService.queryForAgencyTreeList());
}
}
package com.yeejoin.amos.api.tool.controller; package com.yeejoin.amos.api.tool.controller;
import com.yeejoin.amos.api.tool.face.model.AmosDemoModel; import com.yeejoin.amos.api.tool.face.model.AmosDemoModel;
import com.yeejoin.amos.api.tool.face.service.AmosDemoService; import com.yeejoin.amos.api.tool.face.service.AmosDemoService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...@@ -76,7 +76,7 @@ public class AmosDemoResource { ...@@ -76,7 +76,7 @@ public class AmosDemoResource {
} }
@TycloudOperation(ApiLevel = UserType.SUPER_ADMIN) @TycloudOperation(ApiLevel = UserType.SUPER_ADMIN, needAuth = false)
@ApiOperation(value = "列表查询") @ApiOperation(value = "列表查询")
@RequestMapping(value = "/list", method = RequestMethod.GET) @RequestMapping(value = "/list", method = RequestMethod.GET)
public ResponseModel selectForList(@RequestParam(value = "agencyCode") String agencyCode) { public ResponseModel selectForList(@RequestParam(value = "agencyCode") String agencyCode) {
......
package com.yeejoin.amos.api.tool.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.ApiInfoModel;
import com.yeejoin.amos.api.tool.face.service.ApiInfoService;
import com.yeejoin.amos.api.tool.face.service.ApiSourceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.foundation.utils.StringUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.Arrays;
import java.util.List;
@CrossOrigin
@RestController
@Api(tags = "接口管理Api")
@RequestMapping(value = "/api-info")
public class ApiInfoResource {
@Autowired
private ApiInfoService apiInfoService;
@Autowired
private ApiSourceService apiSourceService;
/**
* 新增
* @param apiInfoModel API信息
* @return ApiInfoModel
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增")
public ResponseModel<ApiInfoModel> save(@RequestBody ApiInfoModel apiInfoModel) throws Exception {
apiInfoModel = apiInfoService.createWithModel(apiInfoModel);
return ResponseHelper.buildResponse(apiInfoModel);
}
/**
* 根据sequenceNbr更新
* @param sequenceNbr 主键
* @return ApiInfoModel
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新", notes = "根据sequenceNbr更新")
public ResponseModel<ApiInfoModel> updateBySequenceNbrApiInfo(@RequestBody ApiInfoModel model, @PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(apiInfoService.updateWithModel(model));
}
/**
* 根据sequenceNbr删除
* @param sequenceNbr 主键
* @return Boolean
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除", notes = "根据sequenceNbr删除")
public ResponseModel<Boolean> deleteBySequenceNbr(@PathVariable(value = "sequenceNbr") Long sequenceNbr){
return ResponseHelper.buildResponse(apiInfoService.removeById(sequenceNbr));
}
/**
* 根据sequenceNbr 批量删除
* @param sequenceNbr 主键
* @return Boolean
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@DeleteMapping(value = "/delete/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除多项", notes = "根据sequenceNbr删除多项")
public ResponseModel<Boolean> deleteModelsBySequenceNbr(@PathVariable(value = "sequenceNbr")String sequenceNbr){
return ResponseHelper.buildResponse(apiInfoService.removeByIds(Arrays.asList(StringUtil.string2Array(sequenceNbr))));
}
/**
* 根据sequenceNbr查询
* @param sequenceNbr 主键
* @return ApiInfoModel
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET",value = "根据sequenceNbr查询单个", notes = "根据sequenceNbr查询单个")
public ResponseModel<ApiInfoModel> selectOne(@PathVariable Long sequenceNbr) throws Exception {
return ResponseHelper.buildResponse(apiInfoService.queryBySeq(sequenceNbr));
}
/**
* 列表分页查询
* @param current 当前页
* @param size 每页大小
* @param apiName API名称
* @param sequenceNbr 主键
* @return Page<ApiInfoModel>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET",value = "分页查询", notes = "分页查询")
public ResponseModel<Page<ApiInfoModel>> queryForPage(
@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
@RequestParam(value = "sequenceNbr") Long sequenceNbr,
@RequestParam(value = "apiName",required = false)String apiName) {
Page<ApiInfoModel> page=new Page<ApiInfoModel>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(
apiInfoService.queryForApiInfoPage(page, apiSourceService.queryCodeById(sequenceNbr),apiName));
}
/**
* 列表全部数据查询
* @return List<ApiInfoModel>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@ApiOperation(httpMethod = "GET",value = "列表全部数据查询", notes = "列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<ApiInfoModel>> selectForList() {
return ResponseHelper.buildResponse(apiInfoService.queryForApiInfoList());
}
}
package com.yeejoin.amos.api.tool.controller;
import com.yeejoin.amos.api.tool.face.model.ApiSourceModel;
import com.yeejoin.amos.api.tool.face.service.ApiInfoService;
import com.yeejoin.amos.api.tool.face.service.ApiSourceService;
import org.springframework.web.bind.annotation.RequestMapping;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
@CrossOrigin
@RestController
@Api(tags = "接口来源管理Api")
@RequestMapping(value = "/api_source")
public class ApiSourceResource {
@Autowired
private ApiSourceService apiSourceService;
@Autowired
private ApiInfoService apiInfoService;
/**
* 新增
* @param model API来源信息
* @return ApiSourceDto
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增")
public ResponseModel<ApiSourceModel> save(@RequestBody ApiSourceModel model) {
model = apiSourceService.createWithModel(model);
return ResponseHelper.buildResponse(model);
}
/**
* 根据sequenceNbr更新
* @param model API来源信息
* @param sequenceNbr 编码
* @return ApiSourceDto
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新", notes = "根据sequenceNbr更新")
public ResponseModel<ApiSourceModel> updateBySeqApiSource(
@RequestBody ApiSourceModel model,
@PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(apiSourceService.updateWithModel(model));
}
/**
* 根据sequenceNbr删除
* @param sequenceNbr 编码
* @return Boolean
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除", notes = "根据sequenceNbr删除")
public ResponseModel<Boolean> deleteBySequenceNbr(@PathVariable(value = "sequenceNbr") Long sequenceNbr) {
return ResponseHelper.buildResponse(apiSourceService.deleteById(sequenceNbr));
}
/**
* 根据sequenceNbr查询
* @param sequenceNbr 物理主键
* @return ApiSourceDto
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET", value = "根据sequenceNbr查询单个", notes = "根据sequenceNbr查询单个")
public ResponseModel<ApiSourceModel> selectOne(@PathVariable Long sequenceNbr) {
return ResponseHelper.buildResponse(apiSourceService.queryBySeq(sequenceNbr));
}
/**
* 列表全部数据查询
* @return List<ApiSourceDto>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "GET", value = "列表全部数据查询", notes = "列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<ApiSourceModel>> selectForList() {
return ResponseHelper.buildResponse(apiSourceService.queryForApiSourceList());
}
}
package com.yeejoin.amos.api.tool.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.AmosDemoModel;
import com.yeejoin.amos.api.tool.face.service.AmosDemoService;
import com.yeejoin.amos.api.tool.face.service.StudioResourceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.doc.TycloudResource;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
* 测试 前端控制器
* </p>
*
* @author 子杨
* @since 2023-06-06
*/
@RestController
@TycloudResource(module = "atl", value = "dataApi")
@RequestMapping(value = "/v1/dataApi")
@Api(tags = "atl-导出")
public class DataApiResource {
private final Logger logger = LogManager.getLogger(DataApiResource.class);
@Autowired
private StudioResourceService studioResourceService;
/**
* 依据参数导出 应用快搭增量脚本
* @throws SQLException
*/
@TycloudOperation(ApiLevel = UserType.ANONYMOUS, needAuth = false)
@ApiOperation(value = "导出应用快搭增量脚本")
@RequestMapping(value = "/generateSQL", method = RequestMethod.GET)
public void generateSQL(
@RequestParam("resourceCode") String resourceCode,
@RequestParam("dimension") String dimension,
HttpServletRequest request,
HttpServletResponse response) throws SQLException {
Map<String, Object> variables = new HashMap<>();
Enumeration<String> keys = request.getParameterNames();
while(keys.hasMoreElements()){
String name = (String)keys.nextElement();
String value = request.getParameter(name);
variables.put(name, value);
}
variables.remove("resourceCode");
variables.remove("dimension");
studioResourceService.generateSQL(resourceCode, dimension, variables, response);
}
}
package com.yeejoin.amos.api.tool.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.DataBaseLinkModel;
import com.yeejoin.amos.api.tool.face.service.DataBaseLinkService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.List;
/**
* @author r
*/
@RestController
@Api(tags = "数据库信息")
@RequestMapping(value = "/database_join_record")
public class DataBaseLinkResource {
@Autowired
private DataBaseLinkService dataBaseLinkService;
/**
* 数据库初始化
* @param dataBaseLinkModel 数据库连接信息
* @return List<DataBaseLinkModel>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@PostMapping(value = "/refresh")
@ApiOperation(httpMethod = "POST", value = "数据库初始化", notes = "数据库初始化")
public ResponseModel<List<DataBaseLinkModel>> save(@RequestBody DataBaseLinkModel dataBaseLinkModel) throws Exception {
return ResponseHelper.buildResponse(
dataBaseLinkService.refreshDataBase(dataBaseLinkService.encryptPwd(dataBaseLinkModel)));
}
/**
* 列表分页查询
* @param current 当前分页
* @param size 分页大小
* @return Page<DataBaseLinkModel>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET", value = "分页查询", notes = "分页查询")
public ResponseModel<Page<DataBaseLinkModel>> queryForPage(
@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size) {
Page<DataBaseLinkModel> page = new Page<DataBaseLinkModel>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(dataBaseLinkService.queryForDataBasePage(page));
}
/**
* 列表全部数据查询
* @return List<DataBaseLinkModel>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "GET", value = "列表全部数据查询", notes = "列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<DataBaseLinkModel>> selectForList() {
return ResponseHelper.buildResponse(dataBaseLinkService.queryForDataBaseList());
}
}
package com.yeejoin.amos.api.tool.controller;
import com.yeejoin.amos.api.tool.face.model.DataBaseLinkModel;
import com.yeejoin.amos.api.tool.face.service.DataBaseLinkService;
import com.yeejoin.amos.api.tool.face.service.RelationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.xml.crypto.Data;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
@CrossOrigin
@RestController
@Api(tags = "机构管理Api")
@RequestMapping(value = "/Agency")
public class RelationResource {
@Autowired
private RelationService relationService;
@Autowired
DataBaseLinkService dataBaseLinkService;
/**
* 根据机构ID和数据库sequenceNbr批量删除数据库
* @param agencyCodeId 机构ID
* @param sequenceNbrs 多个主键
* @return String
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@DeleteMapping(value = "/relation/{agencyCodeId}/{sequenceNbrs}")
@ApiOperation(httpMethod = "DELETE", value = "机构删除", notes = "机构删除")
public ResponseModel<String> deleteDataBase(
@PathVariable Long agencyCodeId,
@PathVariable String sequenceNbrs) throws Exception {
relationService.deleteAgency(agencyCodeId,sequenceNbrs);
return ResponseHelper.buildResponse("The data has been deleted !");
}
/**
* 导出SQL脚本
* @return String
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/output/{agencyCodeId}/{sequenceNbrs}")
@ApiOperation(httpMethod = "GET", value = "导出", notes = "导出")
public ResponseModel<String> genereteSQL(@PathVariable Long agencyCodeId,@PathVariable String sequenceNbrs) throws Exception {
relationService.outputAgency(agencyCodeId, sequenceNbrs);
return ResponseHelper.buildResponse("yes");
}
}
package com.yeejoin.amos.api.tool.controller;
import com.yeejoin.amos.api.tool.face.model.TemplateCategoryModel;
import com.yeejoin.amos.api.tool.face.model.TemplateCategoryTreeModel;
import com.yeejoin.amos.api.tool.face.model.TemplateModel;
import com.yeejoin.amos.api.tool.face.service.TemplateCategoryService;
import com.yeejoin.amos.api.tool.face.service.TemplateService;
import com.yeejoin.amos.api.tool.face.service.VisualDesignerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.List;
@CrossOrigin
@RestController
@Api(tags = "模板分类管理Api")
@RequestMapping(value = "/tpl_cate")
public class TemplateCategoryResource {
@Autowired
private TemplateCategoryService templateCategoryService;
@Autowired
private TemplateService templateService;
@Autowired
private VisualDesignerService visualDesignerService;
/**
* 新增
* @param sequenceNbr 设计器主键
* @param templateCategoryModel 模板分类信息
* @return ApiSourceDto
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@PostMapping(value = "/save/{sequenceNbr}")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增")
public ResponseModel<TemplateCategoryModel> save(
@PathVariable Long sequenceNbr,
@RequestBody TemplateCategoryModel templateCategoryModel){
templateCategoryModel.setDesignerType(visualDesignerService.queryBySeq(sequenceNbr).getDesignerType());
templateCategoryModel = templateCategoryService.createWithModel(templateCategoryModel);
return ResponseHelper.buildResponse(templateCategoryModel);
}
/**
* 根据sequenceNbr更新
* @param sequenceNbr 编码
* @return ApiSourceDto
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新", notes = "根据sequenceNbr更新")
public ResponseModel<TemplateCategoryModel> updateBySeqTplCate(@RequestBody TemplateCategoryModel templateCategoryModel, @PathVariable(value = "sequenceNbr") Long sequenceNbr){
templateCategoryModel.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(templateCategoryService.updateWithModel(templateCategoryModel));
}
/**
* 根据sequenceNbr删除
* @param sequenceNbr 编码
* @return Boolean
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除", notes = "根据sequenceNbr删除")
public ResponseModel<Boolean> deleteBySequenceNbr(@PathVariable(value = "sequenceNbr") Long sequenceNbr) {
return ResponseHelper.buildResponse(templateCategoryService.deleteById(sequenceNbr));
}
/**
* 根据sequenceNbr查询
* @param sequenceNbr 物理主键
* @return ApiSourceDto
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET", value = "根据sequenceNbr查询单个", notes = "根据sequenceNbr查询单个")
public ResponseModel<TemplateCategoryModel> selectOne(@PathVariable Long sequenceNbr){
return ResponseHelper.buildResponse(templateCategoryService.queryBySeq(sequenceNbr));
}
/**
* 列表全部数据查询
* @return List<ApiSourceDto>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@ApiOperation(httpMethod = "GET", value = "列表全部数据查询", notes = "列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<TemplateCategoryModel>> selectForList(){
return ResponseHelper.buildResponse(templateCategoryService.queryForTplCateList());
}
/**
* 列表树形结构查询
* @return List<ApiSourceDto>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@ApiOperation(httpMethod = "GET", value = "列表树形结构查询", notes = "列表树形结构查询")
@GetMapping(value = "/tree")
public ResponseModel<List<TemplateCategoryTreeModel>> selectForTree(){
return ResponseHelper.buildResponse(templateCategoryService.getTree());
}
}
package com.yeejoin.amos.api.tool.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.TemplateModel;
import com.yeejoin.amos.api.tool.face.model.TemplateVoModel;
import com.yeejoin.amos.api.tool.face.service.TemplateService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.foundation.utils.StringUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.io.IOException;
import java.util.*;
@CrossOrigin
@RestController
@Api(tags = "模板管理Api")
@RequestMapping(value = "/tpl")
public class TemplateResource {
@Autowired
private TemplateService templateService;
/**
* 新增
* @param tplVoModel 页面表单数据
* @return TemplateModel
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增")
public ResponseModel<TemplateModel> save(@RequestBody TemplateVoModel tplVoModel) throws Exception {
tplVoModel.setDisplayName(tplVoModel.getComName());
return ResponseHelper.buildResponse(templateService.createWithModel(templateService.convertModel(tplVoModel)));
}
/**
* 根据sequenceNbr更新
* @param tplVoModel 模板信息
* @param sequenceNbr 主键
* @return TemplateModel
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新", notes = "根据sequenceNbr更新")
public ResponseModel<TemplateModel> updateBySequenceNbrTpl(
@RequestBody TemplateVoModel tplVoModel,
@PathVariable(value = "sequenceNbr") Long sequenceNbr) throws NoSuchFieldException, IllegalAccessException {
tplVoModel.setSequenceNbr(sequenceNbr);
tplVoModel.setDisplayName(tplVoModel.getComName());
return ResponseHelper.buildResponse(templateService.updateWithModel(templateService.convertModel(tplVoModel)));
}
/**
* 根据sequenceNbr删除
*
* @param sequenceNbr 主键
* @return Boolean
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除", notes = "根据sequenceNbr删除")
public ResponseModel<Boolean> deleteBySequenceNbr(@PathVariable(value = "sequenceNbr") Long sequenceNbr) {
return ResponseHelper.buildResponse(templateService.removeById(sequenceNbr));
}
/**
* 根据sequenceNbr删除多项
* @param sequenceNbr 主键
* @return String
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@DeleteMapping(value = "/delete/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除多项", notes = "根据sequenceNbr删除多项")
public ResponseModel<Boolean> deleteModelsBySequenceNbr(@PathVariable(value = "sequenceNbr") String sequenceNbr) {
return ResponseHelper.buildResponse(templateService.removeByIds(Arrays.asList(StringUtil.string2Array(sequenceNbr))));
}
/**
* 根据sequenceNbr查询
* @param sequenceNbr 主键
* @return TemplateVoModel
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET", value = "根据sequenceNbr查询单个", notes = "根据sequenceNbr查询单个")
public ResponseModel<TemplateVoModel> selectOne(@PathVariable Long sequenceNbr) {
return ResponseHelper.buildResponse(templateService.queryForTplVo(sequenceNbr));
}
/**
* 列表分页查询
* @param current 当前页
* @param size 每页大小
* @param categorySeq 模板分类ID
* @param displayName 模板名称
* @return Page<TemplateModel>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET", value = "分页查询", notes = "分页查询")
public ResponseModel<Page<TemplateModel>> queryForPage(
@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
@RequestParam(value = "categorySeq") Long categorySeq,
@RequestParam(value = "displayName", required = false) String displayName) {
Page<TemplateModel> page = new Page<>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(templateService.queryForTplPage(page, categorySeq, displayName));
}
/**
* 列表全部数据查询
* @return List<TemplateModel>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "GET", value = "列表全部数据查询", notes = "列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<TemplateModel>> selectForList() {
return ResponseHelper.buildResponse(templateService.queryForTplList());
}
/**
* 导入
* @param multipartFile 文件
* @return TemplateModel
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@CrossOrigin
@ApiOperation(httpMethod = "POST", value = "根据sequenceNbr导入content", notes = "根据sequenceNbr导入content")
@PostMapping(value = "/import")
public ResponseModel<TemplateModel> importTpl(@RequestParam("file") MultipartFile multipartFile) throws IOException {
return ResponseHelper.buildResponse(templateService.createWithModel(templateService.fileToTpl(multipartFile)));
}
}
package com.yeejoin.amos.api.tool.enums;
/**
* 数据来源枚举
*/
public enum SourceEnum {
IDX("idx", "指标系统");
String source;
String desc;
SourceEnum(String source, String desc) {
this.source = source;
this.desc = desc;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package com.yeejoin.amos.api.tool.face.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 需要加解密的字段用这个注解
* @author lima
* @date 2023/3/3 17:29
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Encrypted {
}
\ No newline at end of file
package com.yeejoin.amos.api.tool.face.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 带有敏感字段的类需要加这个注解
* @author lima
* @date 2023/3/6 16:18
*/
@Inherited
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface SensitiveData {
}
\ No newline at end of file
package com.yeejoin.amos.api.tool.face.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
/**
* @author r
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "DataBaseLinkModel", description = "")
public class AgencyTreeModel extends BaseModel {
@ApiModelProperty(value = "机构名称")
private String agencyName;
@ApiModelProperty(value = "机构编码")
private String agencyCode;
@ApiModelProperty(value = "机构描述")
private String agencyDesc;
}
package com.yeejoin.amos.api.tool.face.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "ApiInfoModel", description = "")
public class ApiInfoModel extends BaseModel {
@ApiModelProperty(value = "接口来源")
private String apiSource;
@ApiModelProperty(value = "接口名称")
private String apiName;
@ApiModelProperty(value = "接口方法")
private String httpMethod;
@ApiModelProperty(value = "接口地址")
private String apiPath;
@ApiModelProperty(value = "响应方式")
private String resType;
@ApiModelProperty(value = "请求参数配置")
private String bodyValue;
@ApiModelProperty(value = "解析规则配置")
private String ruleData;
}
package com.yeejoin.amos.api.tool.face.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="ApiSourceModel", description="")
public class ApiSourceModel extends BaseModel {
@ApiModelProperty(value = "接口来源名称")
private String name;
@ApiModelProperty(value = "接口标识")
private String code;
}
package com.yeejoin.amos.api.tool.face.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
/**
* @author r
*/
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@ApiModel(value = "DataBaseLinkModel", description = "")
public class DataBaseLinkModel extends BaseModel {
@ApiModelProperty(value = "数据名称")
private String dataName = "";
@ApiModelProperty(value = "主机IP")
private String ip;
@ApiModelProperty(value = "端口")
private String port;
@ApiModelProperty(value = "数据库名")
private String dbName = "";
@ApiModelProperty(value = "用户名")
private String userName;
@ApiModelProperty(value = "密码")
private String passWord;
public DataBaseLinkModel(String dataName, String ip, String port, String dbName, String userName, String passWord) {
this.dataName = dataName;
this.ip = ip;
this.port = port;
this.dbName = dbName;
this.userName = userName;
this.passWord = passWord;
}
}
package com.yeejoin.amos.api.tool.face.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PictureModel {
@ApiModelProperty(value = "图片名称")
private String name;
@ApiModelProperty(value = "图片UID")
private String uid;
@ApiModelProperty(value = "图片url")
private String url;
@ApiModelProperty(value = "图片状态")
private String status;
}
package com.yeejoin.amos.api.tool.face.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "RelationModel", description = "")
public class RelationModel extends BaseModel {
@ApiModelProperty(value = "父表名称")
private String parentName;
@ApiModelProperty(value = "父表字段")
private String parentField;
@ApiModelProperty(value = "表名称")
private String name;
@ApiModelProperty(value = "表字段")
private String field;
}
package com.yeejoin.amos.api.tool.face.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import sun.reflect.generics.tree.Tree;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
@Data
@NoArgsConstructor
@ApiModel(value = "RelationTreeModel", description = "")
public class RelationTreeModel {
@ApiModelProperty(value = "表名称")
private String name;
@ApiModelProperty(value = "表字段")
private String field;
@ApiModelProperty(value = "前表关联字段")
private String parentField;
@ApiModelProperty(value = "父表名")
private String parentName;
@ApiModelProperty(value = "子节点")
private List<RelationTreeModel> children = new ArrayList<>();
public RelationTreeModel(String name, String field,String parentField ) {
this.name = name;
this.field = field;
this.parentField = parentField;
}
}
package com.yeejoin.amos.api.tool.face.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
/**
* <p>
*
* </p>
*
* @author 子杨
* @since 2022-08-16
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("studio_resource")
public class StudioResource extends BaseEntity {
/**
* 资源编码
*/
@TableField("RESOURCE_CODE")
private String resourceCode;
/**
* 资源名称
*/
@TableField("RESOURCE_NAME")
private String resourceName;
// @TableField("RESOURCE_TABLE")
// private String resourceTable;
/**
* 资源参数
*/
@TableField("RESOURCE_PARAMS")
private String resourceParams;
/**
* 删除资源sql
*/
@TableField("RESOURCE_DELETE_SQL")
private String resourceDeleteSql;
/**
* 插入资源sql
*/
@TableField("RESOURCE_INSERT_SQL")
private String resourceInsertSql;
}
package com.yeejoin.amos.api.tool.face.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
/**
* <p>
*
* </p>
*
* @author 子杨
* @since 2022-08-16
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class StudioResourceModel extends BaseModel {
/**
* 资源编码
*/
private String resourceCode;
/**
* 资源名称
*/
private String resourceName;
// private String resourceTable;
/**
* 资源参数
*/
private String resourceParams;
/**
* 删除资源sql
*/
private String resourceDeleteSql;
/**
* 插入资源sql
*/
private String resourceInsertSql;
}
package com.yeejoin.amos.api.tool.face.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="TemplateCategoryModel", description="")
public class TemplateCategoryModel extends BaseModel {
@ApiModelProperty(value = "模板分类名称")
private String cateName;
@ApiModelProperty(value = "模板类型")
private String tplType;
@ApiModelProperty(value = "所用设计器类型")
private String designerType;
@ApiModelProperty(value = "图标路径")
private String icon = "";
@ApiModelProperty(value = "是否删除")
private Boolean isDel = false;
}
package com.yeejoin.amos.api.tool.face.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@NoArgsConstructor
@ApiModel(value="TemplateCategoryTreeModel", description="")
public class TemplateCategoryTreeModel {
@ApiModelProperty(value = "物理主键")
private Long sequenceNbr;
@ApiModelProperty(value = "父ID")
private Long parentId = 0L;
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "设计器类型")
private String designerType = "";
@ApiModelProperty(value = "子列表")
private List<TemplateCategoryTreeModel> children = new ArrayList<>();
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public TemplateCategoryTreeModel(Long sequenceNb, Long parentId, String name, String designerType){
this.sequenceNbr =sequenceNb ;
this.parentId = parentId;
this.name = name;
this.designerType =designerType;
}
public TemplateCategoryTreeModel(Long sequenceNb, Long parentId, String name, String designerType,
List<TemplateCategoryTreeModel> children){
this.sequenceNbr =sequenceNb ;
this.parentId = parentId;
this.name = name;
this.designerType =designerType;
this.children = children;
}
}
package com.yeejoin.amos.api.tool.face.model;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName(autoResultMap = true)
@ApiModel(value="TemplateModel", description="")
public class TemplateModel extends BaseModel {
@ApiModelProperty(value = "展示名称")
protected String displayName = "";
@ApiModelProperty(value = "模板标识")
protected String comKey = "";
@ApiModelProperty(value = "模板名称")
protected String comName = "";
@ApiModelProperty(value = "模板内容")
@TableField(typeHandler = JacksonTypeHandler.class)
protected JSONObject content;
@ApiModelProperty(value = "分类ID")
protected Long cateSeq;
@ApiModelProperty(value = "模板状态")
protected Boolean openStatus = false;
@ApiModelProperty(value = "缩略图")
protected String thumb;
@ApiModelProperty(value = "效果图")
protected String sketch;
@ApiModelProperty(value = "是否删除")
protected Boolean isDel = false;
public void setThumb(String thumb) {
this.thumb = thumb ;
}
public void setSketch(String sketch) {
this.sketch = sketch;
}
public TemplateModel(JSONObject content, Long cateSeq) {
this.content = content;
this.cateSeq = cateSeq;
}
}
package com.yeejoin.amos.api.tool.face.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="TemplateVoModel", description="")
@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})
public class TemplateVoModel extends TemplateModel {
@ApiModelProperty(value = "模板内容")
private String contentStr;
@ApiModelProperty(value = "缩略图")
private List<PictureModel> thumbs = new ArrayList<>();
@ApiModelProperty(value = "效果图")
private List<PictureModel> sketches = new ArrayList<>();
public void setIsDel(Boolean isDel) {
this.isDel = isDel;
}
public String getComName() {
return comName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
}
package com.yeejoin.amos.api.tool.face.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="VisualDesignerModel", description="")
public class VisualDesignerModel extends BaseModel {
@ApiModelProperty(value = "设计器名称")
private String designerName;
@ApiModelProperty(value = "描述")
private String designerDesc;
@ApiModelProperty(value = "设计器类型")
private String designerType;
@ApiModelProperty(value = "图标路径")
private String icon;
public String getDesignerType() {
return designerType;
}
}
package com.yeejoin.amos.api.tool.face.orm.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.AgencyTree;
/**
* Mapper 接口
*
* @author r
*/
public interface AgencyTreeMapper extends BaseMapper<AgencyTree> {
}
package com.yeejoin.amos.api.tool.face.orm.dao;
import com.yeejoin.amos.api.tool.face.orm.entity.ApiInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface ApiInfoMapper extends BaseMapper<ApiInfo>{
}
package com.yeejoin.amos.api.tool.face.orm.dao;
import com.yeejoin.amos.api.tool.face.orm.entity.ApiSource;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* Mapper 接口
*
* @author system_generator
* @date 2023-06-01
*/
public interface ApiSourceMapper extends BaseMapper<ApiSource>{
}
package com.yeejoin.amos.api.tool.face.orm.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.DataBaseLink;
import org.mapstruct.Mapper;
import org.springframework.stereotype.Repository;
/**
* Mapper 接口
*
* @author r
*/
@Mapper
@Repository
public interface DataBaseLinkMapper extends BaseMapper<DataBaseLink> {
}
package com.yeejoin.amos.api.tool.face.orm.dao;
import com.baomidou.mybatisplus.annotation.SqlParser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.Relation;
import com.yeejoin.amos.api.tool.face.service.RelationService;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.mapstruct.Mapper;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Mapper
@Repository
public interface RelationMapper extends BaseMapper<Relation> {
@SelectProvider(type = RelationService.class, method = "deleteDataBase")
@SqlParser(filter = true)
List<Relation> deleteDataBase(@Param("maps") List<HashMap<String,String>> maps);
@Select("${sqlStr}")
List<HashMap<String,String>> getPublicItems(@Param(value = "sqlStr") String sqlStr);
}
package com.yeejoin.amos.api.tool.face.orm.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.tool.face.model.StudioResource;
import com.yeejoin.amos.api.tool.face.orm.entity.TableColumn;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 子杨
* @since 2022-08-16
*/
public interface StudioResourceMapper extends BaseMapper<StudioResource> {
List<TableColumn> queryForListByTableName(@Param("tableName") String tableName);
}
\ No newline at end of file
package com.yeejoin.amos.api.tool.face.orm.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.TemplateCategory;
public interface TemplateCategoryMapper extends BaseMapper<TemplateCategory> {
}
package com.yeejoin.amos.api.tool.face.orm.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.Template;
public interface TemplateMapper extends BaseMapper<Template> {
}
package com.yeejoin.amos.api.tool.face.orm.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.VisualDesigner;
public interface VisualDesignerMapper extends BaseMapper<VisualDesigner> {
}
package com.yeejoin.amos.api.tool.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @author r
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("privilege_agency")
public class AgencyTree extends BaseEntity {
/**
*机构名称
*/
@TableField("AGENCY_NAME")
private String agencyName;
/**
*机构编码
*/
@TableField("AGENCY_CODE")
private String agencyCode;
/**
*机构描述
*/
@TableField("AGENCY_DESC")
private String agencyDesc;
}
package com.yeejoin.amos.api.tool.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("studio_data_api")
public class ApiInfo extends BaseEntity{
/**
* 接口来源
*/
@TableField("api_source")
private String apiSource;
/**
* 接口名称
*/
@TableField("api_name")
private String apiName;
/**
* 接口方法
*/
@TableField("http_method")
private String httpMethod;
/**
* 接口地址
*/
@TableField("api_path")
private String apiPath;
/**
* 响应方式
*/
@TableField("res_type")
private String resType;
/**
* 请求参数配置
*/
@TableField("body_value")
private String bodyValue;
/**
* 解析规则配置
*/
@TableField("rule_data")
private String ruleData;
}
package com.yeejoin.amos.api.tool.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("studio_data_api_category")
public class ApiSource extends BaseEntity {
/**
* 接口来源名称
*/
@TableField("name")
private String name;
/**
* 接口标识
*/
@TableField("code")
private String code;
}
package com.yeejoin.amos.api.tool.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @author r
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("database_link")
public class DataBaseLink extends BaseEntity {
/**
*数据名称
*/
@TableField("dataName")
private String dataName;
/**
*主机IP
*/
@TableField("ip")
private String ip;
/**
*端口
*/
@TableField("port")
private String port;
/**
*数据库名
*/
@TableField("dbName")
private String dbName;
/**
*用户名
*/
@TableField("userName")
private String userName;
/**
*密码
*/
@TableField("passWord")
private String passWord;
}
package com.yeejoin.amos.api.tool.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("relation")
public class Relation extends BaseEntity {
/**
* 表1
*/
@TableField("table1")
private String parentName;
/**
* 表1 字段
*/
@TableField("table1_field")
private String parentField;
/**
* 表2
*/
@TableField("table2")
private String name;
/**
* 表2 字段
*/
@TableField("table2_field")
private String field;
}
package com.yeejoin.amos.api.tool.face.orm.entity;
import lombok.Data;
@Data
public class TableColumn {
private String columnName;
private Boolean isRequired;
private Boolean isPk;
private int sort;
private String columnComment;
private Boolean isIncrement;
private String columnType;
}
package com.yeejoin.amos.api.tool.face.orm.entity;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.SqlCondition;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value = "studio_template",autoResultMap = true)
public class Template extends BaseEntity {
/**
*展示名称
*/
@TableField(value = "DISPLAY_NAME",condition = SqlCondition.LIKE)
private String displayName;
/**
*模板标识
*/
@TableField("COMPONENT_KEY")
private String comKey;
/**
*模板名称
*/
@TableField("COMPONENT_NAME")
private String comName;
/**
*模板内容
*/
@TableField(value = "CONTENT",typeHandler = JacksonTypeHandler.class)
private JSONObject content;
/**
*分类ID
*/
@TableField("CATEGORY_SEQ")
private Long cateSeq;
/**
*模板状态
*/
@TableField("OPEN_STATUS")
private Boolean openStatus;
/**
*缩略图
*/
@TableField("THUMB")
private String thumb;
/**
*状态图
*/
@TableField("SKETCH")
private String sketch;
/**
*是否删除
*/
@TableField("IS_DELETE")
private Boolean isDel;
}
package com.yeejoin.amos.api.tool.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("studio_template_category")
public class TemplateCategory extends BaseEntity {
/**
*分类名称
*/
@TableField("CATEGORY_NAME")
private String cateName;
/**
*模板类型
*/
@TableField("TEMP_TYPE")
private String tplType;
/**
*所属设计器类型
*/
@TableField("DESIGNER_TYPE")
private String designerType;
/**
*图标路径
*/
@TableField("ICON")
private String icon;
/**
*是否删除
*/
@TableField("IS_DELETE")
private Boolean isDel;
}
package com.yeejoin.amos.api.tool.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("studio_visual_designer")
public class VisualDesigner extends BaseEntity {
/**
* 设计器名称
*/
@TableField("DESIGNER_NAME")
private String designerName;
/**
* 描述
*/
@TableField("DESIGNER_DESC")
private String designerDesc;
/**
* 设计器类型
*/
@TableField("DESIGNER_TYPE")
private String designerType;
/**
* 图标路径
*/
@TableField("ICON")
private String icon;
}
package com.yeejoin.amos.api.tool.face.service;
import com.yeejoin.amos.api.tool.face.model.AgencyTreeModel;
import com.yeejoin.amos.api.tool.face.orm.dao.AgencyTreeMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.AgencyTree;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.util.List;
/**
* 服务实现类
*
* @author r
*/
@Service
public class AgencyTreeService extends BaseService<AgencyTreeModel, AgencyTree, AgencyTreeMapper> {
/**
* 列表查询
*/
public List<AgencyTreeModel> queryForAgencyTreeList() {
return this.queryForList("" , false);
}
public String queryForAgencyCodeById(Long id){
return queryBySeq(id).getAgencyCode();
}
}
...@@ -31,7 +31,7 @@ public class AmosDemoService extends BaseService<AmosDemoModel,AmosDemo,AmosDemo ...@@ -31,7 +31,7 @@ public class AmosDemoService extends BaseService<AmosDemoModel,AmosDemo,AmosDemo
} }
/** /**
* 列表查询 示例 * 列表查询
*/ */
public List<AmosDemoModel> queryForAmosDemoList(String agencyCode) { public List<AmosDemoModel> queryForAmosDemoList(String agencyCode) {
return this.queryForList("" , false, agencyCode); return this.queryForList("" , false, agencyCode);
......
package com.yeejoin.amos.api.tool.face.service;
import com.yeejoin.amos.api.tool.face.orm.entity.ApiInfo;
import com.yeejoin.amos.api.tool.face.orm.dao.ApiInfoMapper;
import com.yeejoin.amos.api.tool.face.model.ApiInfoModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.ArrayList;
import java.util.List;
@Service
public class ApiInfoService extends BaseService<ApiInfoModel,ApiInfo,ApiInfoMapper> {
/**
* 分页查询
*/
public Page<ApiInfoModel> queryForApiInfoPage(Page<ApiInfoModel> page,String apiSource ,String apiName) {
return this.queryForPage(page ,null ,false ,apiSource ,apiName);
}
/**
* 列表查询
*/
public List<ApiInfoModel> queryForApiInfoList() {
return this.queryForList("" , false);
}
/**
* 根据来源获取Api列表
*/
public List<ApiInfoModel> selectByApiSource(String apiSource) {
return this.queryForList("" , false,apiSource);
}
/**
* 根据来源获取Api列表主键
*/
public List<String> selectSeqByApiSource(String apiSource) {
List<String> sequenceNbrs = new ArrayList<>();
for(ApiInfoModel model : this.selectByApiSource(apiSource)){
sequenceNbrs.add(Long.toString(model.getSequenceNbr()));
}
return sequenceNbrs;
}
}
package com.yeejoin.amos.api.tool.face.service;
import com.yeejoin.amos.api.tool.face.model.ApiInfoModel;
import com.yeejoin.amos.api.tool.face.model.ApiSourceModel;
import com.yeejoin.amos.api.tool.face.orm.entity.ApiSource;
import com.yeejoin.amos.api.tool.face.orm.dao.ApiSourceMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ApiSourceService extends BaseService<ApiSourceModel, ApiSource, ApiSourceMapper> {
@Autowired
private ApiInfoService apiInfoService;
/**
* 列表查询
*/
public List<ApiSourceModel> queryForApiSourceList() {
return this.queryForList("", false);
}
/**
* 根据机构ID获取机构编码
*/
public String queryCodeById(Long sequenceNbr){
ApiSourceModel model = this.queryModelByParams(sequenceNbr);
return model.getCode();
}
/**
* 通过API来源ID删除API来源
*/
public Boolean deleteById(Long sequenceNbr){
List<String> strings = apiInfoService.selectSeqByApiSource(this.queryCodeById(sequenceNbr));
if(strings.size() != 0) {
this.removeByIds(strings);
}
return this.removeById(sequenceNbr);
}
}
package com.yeejoin.amos.api.tool.face.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.DataBaseLinkModel;
import com.yeejoin.amos.api.tool.face.orm.dao.DataBaseLinkMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.DataBaseLink;
import com.yeejoin.amos.api.tool.utils.AESUtils;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* 服务实现类
*
* @author r
*/
@Service
public class DataBaseLinkService extends BaseService<DataBaseLinkModel, DataBaseLink, DataBaseLinkMapper> {
@Autowired
private DataBaseLinkMapper dataBaseLinkMapper;
/**
* 分页查询
*/
public Page<DataBaseLinkModel> queryForDataBasePage(Page<DataBaseLinkModel> page) {
return this.queryForPage(page, null, false);
}
/**
* 列表查询
*/
public List<DataBaseLinkModel> queryForDataBaseList() {
return this.queryForList("", false);
}
/**
* 获取数据库名称
*/
public String[] getDataBaseName(Connection connection) throws SQLException {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SHOW DATABASES");
String[] result = new String[1000];
int count = 0;
while (rs.next()) {
result[count++] = rs.getString(1);
}
return result;
}
/**
* 初始化数据库连接表
*/
public List<DataBaseLinkModel> refreshDataBase(DataBaseLinkModel dataBaseLinkModel) throws Exception {
//清空表单
this.remove(new QueryWrapper<>());
//连接数据库
Connection connection = this.connectNewDatabase(dataBaseLinkModel);
if (connection == null)
return null;
List<DataBaseLinkModel> dataBaseLinkModels = new ArrayList<>();
Collection<DataBaseLink> dataBaseLinks = new ArrayList<>();
for (String name : this.getDataBaseName(connection)) {
if (name == null)
break;
DataBaseLinkModel model = new DataBaseLinkModel();
BeanUtils.copyProperties(model, dataBaseLinkModel);
model.setDbName(name);
model.setDataName(name);
dataBaseLinkModels.add(model);
dataBaseLinks.add(this.prepareEntity(model));
}
this.saveBatch(dataBaseLinks);
connection.close();
return dataBaseLinkModels;
}
/**
* 连接数据库
*/
public Connection connectNewDatabase(DataBaseLinkModel model) throws Exception {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 连接新增的数据库
String dbUrl = "jdbc:mysql://" + model.getIp() + ":" + model.getPort() + "/" + model.getDbName();
// 解密pwd,并连接
return DriverManager.getConnection(dbUrl, model.getUserName(),AESUtils.decrypt(model.getPassWord()));
}
/**
* 加密model里的密码
*/
public DataBaseLinkModel encryptPwd(DataBaseLinkModel model) throws Exception {
model.setPassWord(AESUtils.encrypt(model.getPassWord()));
return model;
}
}
package com.yeejoin.amos.api.tool.face.service;
import com.alibaba.fastjson.JSON;
import com.yeejoin.amos.api.tool.face.model.DataBaseLinkModel;
import com.yeejoin.amos.api.tool.face.model.RelationModel;
import com.yeejoin.amos.api.tool.face.model.RelationTreeModel;
import com.yeejoin.amos.api.tool.face.orm.dao.RelationMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.Relation;
import com.yeejoin.amos.api.tool.face.orm.entity.TableColumn;
import io.github.classgraph.json.JSONUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.core.foundation.utils.StringUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class RelationService extends BaseService<RelationModel, Relation, RelationMapper> {
/**
* 数据库备份路径
*/
public static final String BACKUP_PATH = "/db/";
/**
* 数据库备份文本前缀
*/
public static String ONESQL_PREFIX = "";
private static String SUFFIX = "sql";
private static String BR = "\r\n";
private static String SLASH = "/";
private static String BRANCH = ";";
private static String SPLIT = "`";
private static String SPACE = " ";
private static String INSERT_INTO = " INSERT INTO ";
private static String CREATE_INTO = " CREATE TABLE ";
private static String VALUES = "VALUES";
private static String LEFTBRACE = "(";
private static String RIGHTBRACE = ")";
private static String QUOTES = "'";
private static String COMMA = ",";
private static String DISABLEFOREIGN = "SET FOREIGN_KEY_CHECKS = 0;\r\n";
private static String ABLEFOREIGN = "SET FOREIGN_KEY_CHECKS = 1;\r\n";
private static String DELIMITER = "###################################";
@Autowired
private RelationMapper relationMapper;
@Autowired
private DataBaseLinkService dataBaseLinkService;
@Autowired
private AgencyTreeService agencyTreeService;
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
StudioResourceService studioResourceService;
/**
* 根据机构删除
*/
public void deleteAgency(Long agencyCodeId, String sequenceNbrs) throws Exception {
for (Long seq : (Long[]) ConvertUtils.convert(StringUtil.string2Array(sequenceNbrs),Long.class)) {
DataBaseLinkModel model = dataBaseLinkService.queryBySeq(seq);
Connection connection = dataBaseLinkService.connectNewDatabase(model);
this.deleteDataBase(
connection, agencyTreeService.queryForAgencyCodeById(agencyCodeId), model.getDbName());
}
}
/**
* 删除数据库
*/
public String deleteDataBase(Connection connection, String agencyCode, String dbName) throws SQLException {
try {
if (!connection.isClosed())
System.out.println("Succeeded connecting to the Database!");
//通过连接获取relation表树形结构
List<RelationTreeModel> trees = this.createRelationTree(dbName);
for (RelationTreeModel tree : trees) {
//根据根节点获得根节点相关列表
List<RelationTreeModel> array = this.createList(tree);
//根据列表获取sql语句
System.out.println(this.createSqlByArray(array,agencyCode));
System.out.println(statementSql(this.createSqlByArray(array, agencyCode).toString(),connection));
}
} catch (SQLException e) {
e.printStackTrace();
}
connection.close();
return null;
}
/**
* 执行sql
*/
public int statementSql(String sql, Connection connection) {
int count = 0;
try {
Statement statement = connection.createStatement();
count = statement.executeUpdate(sql);
statement.close();
return count;
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
/**
* 获取关系表转化为map
*/
public List<HashMap<String, String>> queryRelation(String dbName) throws SQLException {
StringBuilder sql = new StringBuilder("SELECT * FROM ");
sql.append(dbName).append("_relation;");
List<HashMap<String,String>> maps = relationMapper.getPublicItems(sql.toString());
return maps;
}
/**
* 递归建立树形结构 (算法)
*/
public List<RelationTreeModel> createTree(List<RelationTreeModel> relationTreeModels, String parentName) {
List<RelationTreeModel> tree = new ArrayList<>();
for (RelationTreeModel relationTreeModel : relationTreeModels) {
if (parentName.equals(relationTreeModel.getParentName())) {
relationTreeModel.setChildren(createTree(relationTreeModels, relationTreeModel.getName()));
tree.add(relationTreeModel);
}
}
return tree;
}
/**
* 创建节点列表
*/
public List<RelationTreeModel> createNodes(List<HashMap<String, String>> maps) {
List<RelationTreeModel> relationTreeModels = new ArrayList<>();
for (HashMap<String, String> map : maps) {
RelationTreeModel model = new RelationTreeModel(
map.get("TABLE2"), map.get("TABLE2_FIELD"), map.get("TABLE1_FIELD"));
if (map.get("TABLE1") == null)
model.setParentName("");
else
model.setParentName(map.get("TABLE1"));
relationTreeModels.add(model);
}
return relationTreeModels;
}
/**
* 创建关系表树
*/
public List<RelationTreeModel> createRelationTree(String dbName) throws SQLException {
List<HashMap<String, String>> maps = this.queryRelation(dbName);
List<RelationTreeModel> trees = new ArrayList<>();
trees.addAll(createTree(createNodes(maps), ""));
return trees;
}
/**
* 根据列表生成sql语句
*/
public StringBuilder createSqlByArray(List<RelationTreeModel> array, String agencyCode) {
StringBuilder sql = new StringBuilder();
if (array.size() == 1) {
sql.append("DELETE FROM ").append(array.get(0).getName()).append(" WHERE ");
sql.append(array.get(0).getName()).append(".").append(array.get(0).getField());
sql.append(" = '").append(agencyCode).append("' ;");
} else {
sql.append("DELETE ").append(array.get(0).getName());
for (RelationTreeModel model : array) {
if (!model.getParentName().equals(""))
sql.append(", ").append(model.getName());
}
sql.append(" FROM ").append(array.get(0).getName());
for (RelationTreeModel model : array) {
if (!model.getParentName().equals("")) {
sql.append(" LEFT JOIN ").append(model.getName()).append(" ON ");
sql.append(model.getParentName()).append(".").append(model.getParentField()).append(" = ");
sql.append(model.getName()).append(".").append(model.getField());
}
}
sql.append(" WHERE ").append(array.get(0).getName()).append(".").append(array.get(0).getField());
sql.append(" = '").append(agencyCode).append("' ;");
}
return sql;
}
/**
*
* @param connection
* @param agencyCode
* @param dbName
* @return
* @throws SQLException
*/
public String insertData(Connection connection, String agencyCode, String dbName) throws SQLException {
try {
if (!connection.isClosed())
System.out.println("Succeeded connecting to the Database!");
//通过连接获取relation表树形结构
List<RelationTreeModel> trees = this.createRelationTree(dbName);
for (RelationTreeModel tree : trees) {
//根据根节点获得根节点相关列表
List<RelationTreeModel> array = this.createList(tree);
//根据列表获取sql语句
for(RelationTreeModel model: array){
List<RelationTreeModel> tableSet = tableRelation(model, array);
List<String> columNames = this.selectColumNames(model.getName(),connection);
String sql = this.insertSqlByTableName(tableSet , model.getName(), columNames, agencyCode ).toString();
System.out.println(sql);
String columnSql = "" +
"\t\t SELECT\n" +
"\t\t table_name as table_name,\n" +
"\t\t\tcolumn_name as columnName,\n" +
"\t\t\t( CASE WHEN ( is_nullable = 'no' && column_key != 'PRI' ) THEN '1' ELSE NULL END ) AS isRequired,\n" +
"\t\t\t( CASE WHEN column_key = 'PRI' THEN '1' ELSE '0' END ) AS isPk,\n" +
"\t\t\tordinal_position AS sort,\n" +
"\t\t\tcolumn_comment as columnComment,\n" +
"\t\t\t( CASE WHEN extra = 'auto_increment' THEN '1' ELSE '0' END ) AS isIncrement,\n" +
"\t\t\tcolumn_type as columnType \n" +
"\t\tFROM\n" +
"\t\t\tinformation_schema.COLUMNS \n" +
"\t\tWHERE\n" +
"\t\t\ttable_schema = database()\n" +
"\t\t\tAND table_name = \"" + model.getName() + "\"\n" +
"\t\tORDER BY\n" +
"\t\t\tordinal_position\t";
List<Map<String, Object>> dataList = this.setToMap(sql,connection);
List<Map<String, Object>> columnList = this.setToMap(columnSql,connection);
List<TableColumn> columns = new ArrayList<>();
for (Map<String,Object> map: columnList){
TableColumn column = JSON.parseObject(JSON.toJSONString(map), TableColumn.class);
columns.add(column);
}
StringBuffer sbsql = new StringBuffer();
for (Map<String, Object> map : dataList) {
sbsql.append(INSERT_INTO);
sbsql.append(SPACE).append(model.getName()).append(SPACE);
sbsql.append(LEFTBRACE);
for (TableColumn column : columns) {
sbsql.append(SPLIT);
sbsql.append(column.getColumnName());
sbsql.append(SPLIT);
sbsql.append(COMMA);
}
sbsql.deleteCharAt(sbsql.length() - 1);
sbsql.append(RIGHTBRACE);
sbsql.append(VALUES);
sbsql.append(LEFTBRACE);
for (TableColumn column : columns) {
if (column.getColumnType().contains("bigint") ||
column.getColumnType().contains("int") ||
column.getColumnType().contains("bit(1)")) {
if (!ObjectUtils.isEmpty(map.get(column.getColumnName()))) {
sbsql.append(map.get(column.getColumnName()));
}else {
sbsql.append("0");
}
} else {
if (!ObjectUtils.isEmpty(map.get(column.getColumnName()))) {
sbsql.append("'").append(map.get(column.getColumnName())).append("'");
} else {
sbsql.append("null");
}
}
sbsql.append(COMMA);
}
sbsql.deleteCharAt(sbsql.length() - 1);
sbsql.append(RIGHTBRACE);
sbsql.append(BRANCH).append(BR);
}
System.out.println(sbsql);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
connection.close();
return null;
}
/**
* 导出插入语句
* @param array
* @param agencyCode
* @return
*/
public StringBuilder insertSqlByTableName(
List<RelationTreeModel> array,
String tableName,
List<String> columNames,
String agencyCode) {
StringBuilder sql = new StringBuilder();
if (array.size() == 1) {
sql.append("SELECT * FROM ").append(array.get(0).getName()).append(" WHERE ");
sql.append(array.get(0).getName()).append(".").append(array.get(0).getField());
sql.append(" = '").append(agencyCode).append("' ;");
} else {
sql.append("SELECT ");
int count = 0;
for(String name : columNames){
if (count != 0){
sql.append(",");
}
count++;
sql.append(tableName).append(".").append(name);
}
sql.append(" FROM ").append(array.get(0).getName());
for (RelationTreeModel model : array) {
if (!model.getParentName().equals("")) {
sql.append(" JOIN ").append(model.getName()).append(" ON ");
sql.append(model.getParentName()).append(".").append(model.getParentField()).append(" = ");
sql.append(model.getName()).append(".").append(model.getField());
}
}
sql.append(" WHERE ").append(array.get(0).getName()).append(".").append(array.get(0).getField());
sql.append(" = '").append(agencyCode).append("' ;");
}
return sql;
}
/**
*
* @param tableName
* @param connection
* @return
* @throws SQLException
*/
public List<String> selectColumNames(String tableName, Connection connection) throws SQLException {
List<String> columNames = new ArrayList<>();
String sql = "SELECT * FROM " + tableName + " limit 0,0";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
ResultSetMetaData data = resultSet.getMetaData();
for(int i = 1 ; i <= data.getColumnCount(); i++ ){
if(!("content").equals(data.getColumnName(i)))
columNames.add(data.getColumnName(i));
}
return columNames;
}
/**
* 列表节点生成(递归)
*/
public List<RelationTreeModel> createNodeList(List<RelationTreeModel> tree) {
List<RelationTreeModel> result = new ArrayList<>();
for (RelationTreeModel node : tree) {
RelationTreeModel model = new RelationTreeModel();
BeanUtils.copyProperties(node, model);
model.setChildren(null);
result.add(model);
result.addAll(createNodeList(node.getChildren()));
}
return result;
}
/**
* 树转化对象列表
*/
public List<RelationTreeModel> createList(RelationTreeModel model) {
List<RelationTreeModel> result = new ArrayList<>();
RelationTreeModel temp = new RelationTreeModel();
BeanUtils.copyProperties(model, temp);
temp.setChildren(null);
result.add(temp);
result.addAll(createNodeList(model.getChildren()));
return result;
}
/**
*
* @param table
* @param list
* @return
*/
public List<RelationTreeModel> tableRelation(RelationTreeModel table, List<RelationTreeModel> list){
List<RelationTreeModel> result = new ArrayList<>();
if(table.getParentName().equals("")) {
result.add(table);
}
else {
for (RelationTreeModel node : list) {
if (node.getName().equals(table.getParentName())) {
result.addAll(tableRelation(node, list));
result.add(table);
break;
}
}
}
return result;
}
/**
* 获取关系表转化为map
*/
public List<Map<String, Object>> setToMap(String sql, Connection connection) throws SQLException {
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(sql);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
while (rs.next()) {
Map<String, Object> rowData = new HashMap<String, Object>();
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));
}
list.add(rowData);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
public void outputAgency(Long agencyCodeId, String sequenceNbrs) throws Exception {
for (Long seq : (Long[]) ConvertUtils.convert(StringUtil.string2Array(sequenceNbrs),Long.class)) {
DataBaseLinkModel model = dataBaseLinkService.queryBySeq(seq);
Connection connection = dataBaseLinkService.connectNewDatabase(model);
this.insertData(
connection, agencyTreeService.queryForAgencyCodeById(agencyCodeId), model.getDbName());
}
}
public void download(String filePath ,String sql) throws IOException {
File file = new File(filePath);
try {
FileWriter writer = new FileWriter(file);
writer.write(sql);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.yeejoin.amos.api.tool.face.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.enums.SourceEnum;
import com.yeejoin.amos.api.tool.face.model.StudioResource;
import com.yeejoin.amos.api.tool.face.model.StudioResourceModel;
import com.yeejoin.amos.api.tool.face.orm.dao.StudioResourceMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.TableColumn;
import com.yeejoin.amos.api.tool.utils.DateUtils;
import com.yeejoin.amos.api.tool.utils.SqlHelper;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.text.StringSubstitutor;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import java.io.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* <p>
* 服务类
* </p>
*
* @author 子杨
* @since 2022-08-16
*/
@Component
public class StudioResourceService extends BaseService<StudioResourceModel, StudioResource, StudioResourceMapper> {
/**
* 数据库备份路径
*/
public static final String BACKUP_PATH = "/db/";
/**
* 数据库备份文本前缀
*/
public static String ONESQL_PREFIX = "";
private static String SUFFIX = "sql";
private static String BR = "\r\n";
private static String SLASH = "/";
private static String BRANCH = ";";
private static String SPLIT = "`";
private static String SPACE = " ";
private static String INSERT_INTO = " INSERT INTO ";
private static String CREATE_INTO = " CREATE TABLE ";
private static String VALUES = "VALUES";
private static String LEFTBRACE = "(";
private static String RIGHTBRACE = ")";
private static String QUOTES = "'";
private static String COMMA = ",";
private static String DISABLEFOREIGN = "SET FOREIGN_KEY_CHECKS = 0;\r\n";
private static String ABLEFOREIGN = "SET FOREIGN_KEY_CHECKS = 1;\r\n";
private static String DELIMITER = "###################################";
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
DataSource datasource;
@Autowired
private SqlHelper sqlHelper;
@Autowired
EmqKeeper emqKeeper;
/**
* 分页查询
*/
public Page<StudioResourceModel> queryForStudioResourcePage(Page page, String agencyCode) {
return this.queryForPage(page, null, false, agencyCode);
}
/**
* 列表查询 示例
*/
public List<StudioResourceModel> queryForStudioResourceList(String resourceCode) {
return this.queryForList("", false, resourceCode);
}
public void generateSQL(String resourceCode, String dimension,Map<String, Object> variables, HttpServletResponse response) {
try {
// if (resourceCode.equals("StudioApplication")){
// ApplicationModel model = applicationService.queryBySeq(Long.valueOf(variables.get(dimension).toString()));
// variables.put("agencyCode", model.getAgencyCode());
// }
List<StudioResourceModel> resourceList = queryForStudioResourceList(resourceCode);
File directory = new File("");// 参数为空
String coursePath = directory.getCanonicalPath();
File parentFile = new File(coursePath).getParentFile();
String backPath = parentFile.getCanonicalPath() + BACKUP_PATH;
File sqlDirectory = new File(backPath);
if (!sqlDirectory.exists()) {
sqlDirectory.mkdir();
}
print(variables.get(dimension).toString(),"开始执行","start");
// 备份文件路径名称
String fileName = (SourceEnum.IDX.getSource().equals(resourceCode.toLowerCase()) ? (resourceCode.toLowerCase() + "_") : "studio_") + DateFormatUtils.format(new Date(), "yyyyMMdd") + "." + SUFFIX;
String sqlFilePath = backPath + SLASH + fileName;
File file = new File(sqlFilePath);
FileOutputStream out;
OutputStreamWriter writer = null;
out = new FileOutputStream(file);
writer = new OutputStreamWriter(out, "utf8");
StringBuffer deleteSql = new StringBuffer();
StringBuffer insertSql = new StringBuffer();
for (StudioResourceModel model : resourceList) {
if (!validationParameters(model, variables)) {
continue;
}
if (!ObjectUtils.isEmpty(model.getResourceDeleteSql())) {
String json = format(model.getResourceDeleteSql(), variables);
JSONObject dimensionData = JSONObject.parseObject(json);
String deleteAllSql = dimensionData.getString(dimension);
deleteAllSql.replaceAll(";", ";" + BR);
deleteSql.append(deleteAllSql).append(BRANCH).append(BR);
}
if (!ObjectUtils.isEmpty(model.getResourceInsertSql())) {
String sql = buildInsertSql(model,dimension, variables);
if (!ObjectUtils.isEmpty(sql)) insertSql.append(sql);
}
}
if (deleteSql.length() > 0) {
print(variables.get(dimension).toString(),"开始创建delete语句...","running");
writer.write(BR + DELIMITER + BR);
writer.write("/**" + BR + "* 删除历史资源数据 " + BR + "**/" + BR);
writer.write(BR + DELIMITER + BR);
writer.write(deleteSql.toString());
writer.write(BR + BR + DELIMITER + BR);
print(variables.get(dimension).toString(),"delete语句创建完成...","running");
}
if (insertSql.length() > 0) {
print(variables.get(dimension).toString(),"开始创建insert语句...","running");
writer.write(BR + DELIMITER + BR);
writer.write("/**" + BR + "* 资源数据" + BR + "**/" + BR);
writer.write(BR + DELIMITER + BR);
writer.write(insertSql.toString());
writer.write(BR + BR + DELIMITER + BR);
print(variables.get(dimension).toString(),"insert语句创建完成...","running");
}
writer.flush();
writer.close();
out.close();
if(deleteSql.length() == 0 && insertSql.length() == 0){
print(variables.get(dimension).toString(),"该项目下数据路径字段为空,不支持导出...","start");
return;
}
download(response, fileName, sqlFilePath);
print(variables.get(dimension).toString(),"执行结束","end");
} catch (IOException e) {
e.printStackTrace();
}
}
private boolean validationParameters(StudioResourceModel model, Map<String, Object> variables) {
String text = model.getResourceParams();
JSONArray fields = JSONObject.parseArray(text);
for (int i = 0; i < fields.size(); i++) {
if (!variables.containsKey(fields.getJSONObject(i).getString("name"))) {
return false;
}
}
return true;
}
private String buildInsertSql(StudioResourceModel resource, String dimension, Map<String, Object> variables) {
StringBuffer sbsql = new StringBuffer();
String json = format(resource.getResourceInsertSql(), variables);
JSONObject dimensionData = JSONObject.parseObject(json);
JSONObject selectAllSql = dimensionData.getJSONObject(dimension);
if (ObjectUtils.isEmpty(selectAllSql.keySet())) {
return "";
}
for (String tableName : selectAllSql.keySet()) {
List<TableColumn> columns = null;
List<Map<String, Object>> dataList = null;
String selectsql = format(selectAllSql.getString(tableName), variables);
if (SourceEnum.IDX.getSource().equals(resource.getResourceCode().toLowerCase())) {
// String sql = sqlHelper.getNamespaceSql("com.yeejoin.amos.api.studio.face.orm.dao.StudioResourceMapper.queryForListByTableName", tableName);
// Query query = new Query();
// query.setSql(sql);
// List result = IndicatorsManager.indicatorClient.queryBySql(query).getResult();
// List<TableColumn> finalColumns = new ArrayList<>();
// result.stream().forEach(x -> {
// TableColumn column = JsonUtils.jsonToBean(JSON.toJSONString(x), TableColumn.class);
// finalColumns.add(column);
// });
// columns = finalColumns;
//
// query.setSql(selectsql);
// dataList = IndicatorsManager.indicatorClient.queryBySql(query).getResult();
} else {
columns = this.getBaseMapper().queryForListByTableName(tableName);
dataList = jdbcTemplate.queryForList(selectsql.toString());
}
for (Map<String, Object> map : dataList) {
sbsql.append(INSERT_INTO);
sbsql.append(SPACE).append(tableName).append(SPACE);
sbsql.append(LEFTBRACE);
for (TableColumn column : columns) {
sbsql.append(SPLIT);
sbsql.append(column.getColumnName());
sbsql.append(SPLIT);
sbsql.append(COMMA);
}
sbsql.deleteCharAt(sbsql.length() - 1);
sbsql.append(RIGHTBRACE);
sbsql.append(VALUES);
sbsql.append(LEFTBRACE);
for (TableColumn column : columns) {
if (column.getColumnType().contains("bigint") ||
column.getColumnType().contains("int") ||
column.getColumnType().contains("bit(1)")) {
if (!ObjectUtils.isEmpty(map.get(column.getColumnName()))) {
sbsql.append(map.get(column.getColumnName()));
}else {
sbsql.append("0");
}
} else {
if (!ObjectUtils.isEmpty(map.get(column.getColumnName()))) {
sbsql.append("'").append(map.get(column.getColumnName())).append("'");
} else {
sbsql.append("null");
}
}
sbsql.append(COMMA);
}
sbsql.deleteCharAt(sbsql.length() - 1);
sbsql.append(RIGHTBRACE);
sbsql.append(BRANCH).append(BR);
}
}
return sbsql.toString();
}
public static String format(String sqlTemplate, Map<String, Object> parameter) {
StringSubstitutor ss = new StringSubstitutor(parameter);
String newTemplateStr = ss.replace(sqlTemplate);
return newTemplateStr;
}
public void download(HttpServletResponse response, String fileName, String sqlFilePath) throws IOException {
File f = new File(sqlFilePath);
BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len = 0;
response.reset(); // 非常重要
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0)
out.write(buf, 0, len);
br.close();
out.close();
}
private void print(String id,String msg,String step) {
String percent = "0";
percent = ValidationUtil.equals(step,"end") ? "100" : ValidationUtil.equals(step,"running") ? "50" : "10";
JSONObject event = new JSONObject();
event.put("percent",percent);
event.put("status", "running");
event.put("logInfo", msg);
event.put("time", DateUtils.toDateStr(DateUtils.format()));
try {
emqKeeper.getMqttClient().publish("/topicTable/solidify/" + (id.indexOf(',') != -1 ? id.split(",")[0] : id), event.toString().getBytes(), 0, false);
} catch (MqttException e) {
e.printStackTrace();
}
}
}
package com.yeejoin.amos.api.tool.face.service;
import com.yeejoin.amos.api.tool.face.model.TemplateCategoryModel;
import com.yeejoin.amos.api.tool.face.model.TemplateCategoryTreeModel;
import com.yeejoin.amos.api.tool.face.model.TemplateModel;
import com.yeejoin.amos.api.tool.face.orm.dao.TemplateCategoryMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.TemplateCategory;
import org.springframework.beans.factory.annotation.Autowired;
import org.typroject.tyboot.core.foundation.utils.StringUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Service
public class TemplateCategoryService extends BaseService<TemplateCategoryModel, TemplateCategory, TemplateCategoryMapper> {
@Autowired
private VisualDesignerService visualDesignerService;
@Autowired
private TemplateService templateService;
/**
* 列表查询
*/
public List<TemplateCategoryModel> queryForTplCateList() {
return this.queryForList("", false);
}
/**
* 通过模板分类ID删除模板分类
*/
public Boolean deleteById(Long sequenceNbr){
List<String> strings = templateService.selectSeqsByCategorySeq(sequenceNbr);
if(strings.size() != 0) {
this.removeByIds(strings);
}
return this.removeById(sequenceNbr);
}
/**
* 模板分类表单数据转化为树形节点
*/
public List<TemplateCategoryTreeModel> tplCateToNode(List<TemplateCategoryModel> templateCategoryModels){
List<TemplateCategoryTreeModel> nodes = new ArrayList<>();
for (TemplateCategoryModel model : templateCategoryModels){
TemplateCategoryTreeModel node = new TemplateCategoryTreeModel();
node.setName(model.getCateName());
node.setSequenceNbr(model.getSequenceNbr());
node.setParentId(1L);
node.setDesignerType(model.getDesignerType());
nodes.add(node);
}
return nodes;
}
/**
* 获得模板分类树
*/
public List<TemplateCategoryTreeModel> getTree() {
List<TemplateCategoryTreeModel> nodes = this.tplCateToNode(this.queryForTplCateList());
nodes.addAll(visualDesignerService.VisualDesignerToNode(visualDesignerService.queryForVisualDesignerList()));
return getChildren(nodes, "", 0L);
}
/**
* 获得模板分类子节点(递归)
*/
public List<TemplateCategoryTreeModel> getChildren(List<TemplateCategoryTreeModel> nodes, String parent, Long id){
List<TemplateCategoryTreeModel> tree = new ArrayList<>();
for (TemplateCategoryTreeModel node : nodes){
if(node.getParentId() == 0L && parent.equals("")){
node.setChildren(getChildren(nodes, node.getDesignerType(), node.getSequenceNbr()));
tree.add(node);
}
else {
if (parent.equals(node.getDesignerType()) && node.getParentId() != 0L) {
node.setParentId(id);
tree.add(node);
}
}
}
return tree;
}
}
package com.yeejoin.amos.api.tool.face.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.PictureModel;
import com.yeejoin.amos.api.tool.face.model.TemplateModel;
import com.yeejoin.amos.api.tool.face.model.TemplateVoModel;
import com.yeejoin.amos.api.tool.face.orm.dao.TemplateMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.Template;
import com.yeejoin.amos.api.tool.utils.ConvertUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.typroject.tyboot.core.foundation.utils.StringUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
@Service
public class TemplateService extends BaseService<TemplateModel, Template, TemplateMapper> {
/**
* 分页查询
*/
public Page<TemplateModel> queryForTplPage(Page<TemplateModel> page, Long categorySeq, String displayName) {
return this.queryForPage(page, null, false, categorySeq, displayName);
}
/**
* 列表查询
*/
public List<TemplateModel> queryForTplListByCategorySeq(Long categorySeq) {
return this.queryForList("", false, categorySeq);
}
/**
* 根据模板分类ID获取模板sequenceNb's
*/
public List<String> selectSeqsByCategorySeq(Long categorySeq){
List<String> strings = new ArrayList<>();
for (TemplateModel model : this.queryForTplListByCategorySeq(categorySeq)){
strings.add(Long.toString(model.getSequenceNbr()));
}
return strings;
}
/**
* 列表查询
*/
public List<TemplateModel> queryForTplList() {
return this.queryForList("", false);
}
/**
* 根据sequenceNbr获取模板并转化为VO
*/
public TemplateVoModel queryForTplVo(Long sequenceNbr){
TemplateModel templateModel = this.queryBySeq(sequenceNbr);
TemplateVoModel templateVoModel = this.convertVoModel(templateModel);
if (templateModel.getContent() != null) {
templateVoModel.setContentStr(templateModel.getContent().toString());
}
return templateVoModel;
}
/**
* TplVoModel转化TplModel
*/
public TemplateModel convertModel(TemplateVoModel tplVoModel) throws NoSuchFieldException, IllegalAccessException {
TemplateModel templateModel = new TemplateModel();
BeanUtils.copyProperties(tplVoModel, templateModel, "thumbs", "sketches", "contentStr");
//判定thumbs为空
if (tplVoModel.getThumbs().size() != 0) {
templateModel.setThumb(ConvertUtil.objectListToUrl(tplVoModel.getThumbs()));
}
//判定sketch为空
if (tplVoModel.getSketches().size() != 0) {
templateModel.setSketch(ConvertUtil.objectListToUrl(tplVoModel.getSketches()));
}
templateModel.setContent(JSON.parseObject(tplVoModel.getContentStr()));
return templateModel;
}
/**
* 读取json文件
*/
public String readMultipartFile(MultipartFile multipartFile) throws IOException {
Reader reader = new InputStreamReader(multipartFile.getInputStream(), "utf-8");
int ch = 0;
StringBuffer stringBuffer = new StringBuffer();
while ((ch = reader.read()) != -1) {
stringBuffer.append((char) ch);
}
reader.close();
return stringBuffer.toString();
}
/**
* 通过json文件建立空白模板
*/
public TemplateModel fileToTpl(MultipartFile multipartFile) throws IOException {
JSONObject content = JSON.parseObject(this.readMultipartFile(multipartFile));
String str = "1668429235251548162";
return new TemplateModel(content, Long.parseLong(str));
}
/**
* model转化VO
*/
public TemplateVoModel convertVoModel(TemplateModel templateModel){
TemplateVoModel tplVoModel = new TemplateVoModel();
BeanUtils.copyProperties(templateModel, tplVoModel);
if(templateModel.getSketch() != null)
tplVoModel.setSketches(this.urlToPicModel(templateModel.getSketch()));
if (templateModel.getThumb() != null)
tplVoModel.setThumbs(this.urlToPicModel(templateModel.getThumb()));
System.out.println(tplVoModel.getThumbs());
return tplVoModel;
}
/**
* 生成随机UID
*/
public String getUid(){
UUID uuid= UUID.randomUUID();
String str = uuid.toString();
return str.replace("-", "");
}
/**
* url转化图片
*/
public List<PictureModel> urlToPicModel(String url){
List<PictureModel> pictureModels = new ArrayList<>();
PictureModel pictureModel = new PictureModel("", this.getUid(), url, "done");
pictureModels.add(pictureModel);
return pictureModels;
}
}
package com.yeejoin.amos.api.tool.face.service;
import com.yeejoin.amos.api.tool.face.model.TemplateCategoryTreeModel;
import com.yeejoin.amos.api.tool.face.model.VisualDesignerModel;
import com.yeejoin.amos.api.tool.face.orm.dao.VisualDesignerMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.VisualDesigner;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.util.ArrayList;
import java.util.List;
@Service
public class VisualDesignerService extends BaseService<VisualDesignerModel, VisualDesigner, VisualDesignerMapper> {
/**
* 列表查询
*/
// 父List
public List<VisualDesignerModel> queryForVisualDesignerList() {
return this.queryForList("", false);
}
/**
* 设计器表单数据转化为树形节点
*/
public List<TemplateCategoryTreeModel> VisualDesignerToNode (List<VisualDesignerModel> visualDesignerModels){
List<TemplateCategoryTreeModel> nodes = new ArrayList<>();
for (VisualDesignerModel model : visualDesignerModels){
TemplateCategoryTreeModel node = new TemplateCategoryTreeModel();
node.setSequenceNbr(model.getSequenceNbr());
node.setName(model.getDesignerName());
node.setDesignerType(model.getDesignerType());
nodes.add(node);
}
return nodes;
}
}
\ No newline at end of file
package com.yeejoin.amos.api.tool.utils;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
/**
* 加解密工具类
* @author lima
* @date 2023/3/3 16:56
*/
public class AESUtils {
private static final String ALGORITHM = "AES";
private static final String SECRET_KEY = "aes-key-lima1995"; // 密钥
/**
* 加密
*/
public static String encrypt(String value) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encrypted = cipher.doFinal(value.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
/**
* 解密
*/
public static String decrypt(String value) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decoded = Base64.getDecoder().decode(value);
byte[] decrypted = cipher.doFinal(decoded);
return new String(decrypted);
}
}
\ No newline at end of file
package com.yeejoin.amos.api.tool.utils;
import org.apache.commons.beanutils.ConvertUtils;
import java.lang.reflect.Field;
import java.util.List;
public class ConvertUtil {
/**
* 图像对象列表提取url
*/
public static <Object> String objectListToUrl(List<Object> objectList) throws IllegalAccessException, NoSuchFieldException {
if (objectList.isEmpty()) {
return null;
}
System.out.println(objectList.get(0));
Class<?> cla = objectList.get(0).getClass();
Field field = cla.getDeclaredField("url");
field.setAccessible(true);
return field.get(objectList.get(0)).toString();
}
}
package com.yeejoin.amos.api.tool.utils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtils {
public static String LONG_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static String MID_PATTERN = "yyyy-MM-dd HH:mm";
public static String SHORT_PATTERN = "yyyy-MM-dd";
public static String MONTH_PATTERN = "yyyy-MM";
private static final SimpleDateFormat monthSdf = new SimpleDateFormat("yyyy-MM");
private static final SimpleDateFormat shortSdf = new SimpleDateFormat("yyyy-MM-dd");
private static final SimpleDateFormat longSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static Date parseDate(String date) {
try {
return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
public static String toDateStr(Date date) {
return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date);
}
public static Date addDate(Date date, int field, int amount) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(field, amount);
return c.getTime();
}
public static boolean isValidDate(String str, String format) {
DateFormat formatter = new SimpleDateFormat(format);
try {
Date date = (Date) formatter.parse(str);
return str.equals(formatter.format(date));
} catch (Exception e) {
return false;
}
}
/**
* 获取某年某月的第一天日期
*
* @param date
* @param format
* @return
*/
public static String getStartMonthDate(String date, String format) {
if (date == null || date.length() < 6 || format == null) {
return null;
}
int year = Integer.parseInt(date.substring(0, 4));
int month = date.contains("-") ? month = Integer.parseInt(date.substring(5, 7)) : Integer.parseInt(date.substring(4, 6));
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, 1);
return shortSdf.format(cal.getTime()) + " 00:00:00";
}
/**
* 获取某年某月的最后一天日期
*
* @param date
* @param format
* @return
*/
public static String getEndMonthDate(String date, String format) {
if (date == null || date.length() < 6 || format == null) {
return null;
}
int year = Integer.parseInt(date.substring(0, 4));
int month = date.contains("-") ? month = Integer.parseInt(date.substring(5, 7)) : Integer.parseInt(date.substring(4, 6));
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, 1);
int day = cal.getActualMaximum(5);
cal.set(year, month - 1, day);
return shortSdf.format(cal.getTime()) + " 23:59:59";
}
/**
* 获取某天的开始时间
*
* @param date
* @param format
* @return
*/
public static String getStartDayDate(String date, String format) {
try {
return getCurrentDayStartTime(new SimpleDateFormat(SHORT_PATTERN).parse(date));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取某天的结束时间
*
* @param date
* @param format
* @return
*/
public static String getEndDayDate(String date, String format) {
try {
return getCurrentDayEndTime(new SimpleDateFormat(SHORT_PATTERN).parse(date));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获得本天的开始时间,即2012-01-01 00:00:00
*
* @return
*/
public static String getCurrentDayStartTime(Date date) throws Exception {
date = shortSdf.parse(shortSdf.format(date) + " 00:00:00");
return longSdf.format(date);
}
/**
* 获得本天的结束时间,即2012-01-01 23:59:59
*
* @return
*/
public static String getCurrentDayEndTime(Date date) throws Exception {
date = longSdf.parse(shortSdf.format(date) + " 23:59:59");
return longSdf.format(date);
}
/**
* 获得本周的第一天,周一
*
* @return
*/
public static String getCurrentWeekDayStartTime(Date date) throws Exception {
Calendar c = Calendar.getInstance();
Date dt = null;
c.setTime(date);
int weekday = c.get(Calendar.DAY_OF_WEEK) - 2;
c.add(Calendar.DATE, -weekday);
dt = longSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00");
return longSdf.format(dt);
}
/**
* 获得本周的最后一天,周日
*
* @return
*/
public static String getCurrentWeekDayEndTime(Date date) throws Exception {
Calendar c = Calendar.getInstance();
Date dt = null;
c.setTime(date);
int weekday = c.get(Calendar.DAY_OF_WEEK);
c.add(Calendar.DATE, 8 - weekday);
dt = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
return longSdf.format(dt);
}
/**
* 获得本月的开始时间,即2012-01-01 00:00:00
*
* @return
*/
public static String getCurrentMonthStartTime(Date date) throws Exception {
Calendar c = Calendar.getInstance();
c.setTime(date);
Date dt = null;
c.set(Calendar.DATE, 1);
dt = shortSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00");
return longSdf.format(dt);
}
/**
* 当前月的结束时间,即2012-01-31 23:59:59
*
* @return
*/
public static String getCurrentMonthEndTime(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
Date now = null;
c.set(Calendar.DATE, 1);
c.add(Calendar.MONTH, 1);
c.add(Calendar.DATE, -1);
try {
now = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
} catch (ParseException e) {
e.printStackTrace();
}
return longSdf.format(now);
}
/**
* 当前季度的开始时间,即2012-01-1 00:00:00
*
* @return
*/
public static String getCurrentQuarterStartTime(Date date) throws Exception {
Calendar c = Calendar.getInstance();
c.setTime(date);
int currentMonth = c.get(Calendar.MONTH) + 1;
Date dt = null;
if (currentMonth >= 1 && currentMonth <= 3)
c.set(Calendar.MONTH, 0);
else if (currentMonth >= 4 && currentMonth <= 6)
c.set(Calendar.MONTH, 3);
else if (currentMonth >= 7 && currentMonth <= 9)
c.set(Calendar.MONTH, 4);
else if (currentMonth >= 10 && currentMonth <= 12)
c.set(Calendar.MONTH, 9);
c.set(Calendar.DATE, 1);
dt = longSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00");
return longSdf.format(dt);
}
/**
* 当前季度的结束时间,即2012-03-31 23:59:59
*
* @return
*/
public static String getCurrentQuarterEndTime(Date date) throws Exception {
Calendar c = Calendar.getInstance();
c.setTime(date);
int currentMonth = c.get(Calendar.MONTH) + 1;
Date dt = null;
if (currentMonth >= 1 && currentMonth <= 3) {
c.set(Calendar.MONTH, 2);
c.set(Calendar.DATE, 31);
} else if (currentMonth >= 4 && currentMonth <= 6) {
c.set(Calendar.MONTH, 5);
c.set(Calendar.DATE, 30);
} else if (currentMonth >= 7 && currentMonth <= 9) {
c.set(Calendar.MONTH, 8);
c.set(Calendar.DATE, 30);
} else if (currentMonth >= 10 && currentMonth <= 12) {
c.set(Calendar.MONTH, 11);
c.set(Calendar.DATE, 31);
}
dt = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
return longSdf.format(dt);
}
/**
* 当前年的开始时间,即2012-01-01 00:00:00
*
* @return
*/
public static String getCurrentYearStartTime(Date date) throws Exception {
Calendar c = Calendar.getInstance();
c.setTime(date);
Date dt = null;
c.set(Calendar.MONTH, 0);
c.set(Calendar.DATE, 1);
dt = shortSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00");
return longSdf.format(dt);
}
/**
* 当前年的结束时间,即2012-12-31 23:59:59
*
* @return
*/
public static String getCurrentYearEndTime(Date date) throws Exception {
Calendar c = Calendar.getInstance();
c.setTime(date);
Date dt = null;
c.set(Calendar.MONTH, 11);
c.set(Calendar.DATE, 31);
dt = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
return longSdf.format(dt);
}
/**
* 获取当前时间
*
* @return
*/
public static Date format() {
Date date = new Date();
return date;
}
/**
* 获取前一天日期
*
* @return
*/
public static Date getYesterday() {
Calendar cal = Calendar.getInstance();
cal.setTime(format());
cal.add(Calendar.DATE, -1);
return cal.getTime();
}
/**
* 获取过去七天
*
* @return
*/
public static Date getBeforeWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(format());
cal.add(Calendar.DATE, -7);
Date beforeWeek = cal.getTime();
return beforeWeek;
}
/**
* 获取过去一月
*
* @return
*/
public static Date getBeforeMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(format());
cal.add(Calendar.MONTH, -1);
Date beforeWeek = cal.getTime();
return beforeWeek;
}
/**
* 获取过去三个月
*
* @return
*/
public static Date getBeforeQuarter(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(format());
cal.add(Calendar.MONTH, -3);
Date beforeQuarter = cal.getTime();
return beforeQuarter;
}
/**
* 获取去年今日
*
* @return
*/
public static Date getBeforeYear(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.YEAR, -1);
Date y = cal.getTime();
String year = shortSdf.format(y);
return y;
}
}
package com.yeejoin.amos.api.tool.utils;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.mapping.ParameterMode;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
import org.apache.ibatis.reflection.factory.ObjectFactory;
import org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory;
import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author: xl
* @Description:
* @Date: 2023/1/9 19:10
*/
@Component
public class SqlHelper {
@Autowired
private SqlSessionFactory sqlSessionFactory;
private final ObjectFactory DEFAULT_OBJECT_FACTORY = new DefaultObjectFactory();
private final ObjectWrapperFactory DEFAULT_OBJECT_WRAPPER_FACTORY = new DefaultObjectWrapperFactory();
/**
* 通过命名空间方式获取sql
*
* @param namespace
* @param params
* @return
*/
public String getNamespaceSql(String namespace, Object params) {
params = wrapCollection(params);
Configuration configuration = sqlSessionFactory.openSession().getConfiguration();
MappedStatement mappedStatement = configuration.getMappedStatement(namespace);
TypeHandlerRegistry typeHandlerRegistry = mappedStatement.getConfiguration().getTypeHandlerRegistry();
BoundSql boundSql = mappedStatement.getBoundSql(params);
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
String sql = boundSql.getSql();
if (parameterMappings != null) {
for (int i = 0; i < parameterMappings.size(); i++) {
ParameterMapping parameterMapping = parameterMappings.get(i);
if (parameterMapping.getMode() != ParameterMode.OUT) {
Object value;
String propertyName = parameterMapping.getProperty();
if (boundSql.hasAdditionalParameter(propertyName)) {
value = boundSql.getAdditionalParameter(propertyName);
} else if (params == null) {
value = null;
} else if (typeHandlerRegistry.hasTypeHandler(params.getClass())) {
value = params;
} else {
MetaObject metaObject = configuration.newMetaObject(params);
value = metaObject.getValue(propertyName);
}
JdbcType jdbcType = parameterMapping.getJdbcType();
if (value == null && jdbcType == null)
jdbcType = configuration.getJdbcTypeForNull();
sql = replaceParameter(sql, value, jdbcType, parameterMapping.getJavaType());
}
}
}
return sql;
}
/**
* 根据类型替换参数
* 仅作为数字和字符串两种类型进行处理,需要特殊处理的可以继续完善这里
*
* @param sql
* @param value
* @param jdbcType
* @param javaType
* @return
*/
private String replaceParameter(String sql, Object value, JdbcType jdbcType, Class javaType) {
String strValue = String.valueOf(value);
if (jdbcType != null) {
switch (jdbcType) {
// 数字
case BIT:
case TINYINT:
case SMALLINT:
case INTEGER:
case BIGINT:
case FLOAT:
case REAL:
case DOUBLE:
case NUMERIC:
case DECIMAL:
break;
// 日期
case DATE:
case TIME:
case TIMESTAMP:
// 其他,包含字符串和其他特殊类型
default:
strValue = "'" + strValue + "'";
}
} else if (Number.class.isAssignableFrom(javaType)) {
// 不加单引号
} else {
strValue = "'" + strValue + "'";
}
return sql.replaceFirst("\\?", strValue);
}
/**
* 简单包装参数
*
* @param object
* @return
*/
private Object wrapCollection(final Object object) {
if (object instanceof List) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("list", object);
return map;
} else if (object != null && object.getClass().isArray()) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("array", object);
return map;
}
return object;
}
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
}
#DB properties:
# jdbc_config # jdbc_config
#spring.datasource.url=jdbc:mysql://172.16.3.18:3306/amos_studio?allowMultiQueries=true spring.datasource.url=jdbc:mysql://39.98.45.134:3306/amos_tool_library_test?allowMultiQueries=true
spring.datasource.url=jdbc:mysql://39.98.45.134:3306/amos_idx_biz?allowMultiQueries=true
spring.datasource.username=root spring.datasource.username=root
spring.datasource.password=Yeejoin@2020 spring.datasource.password=Yeejoin@2020
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=3 spring.datasource.hikari.minimum-idle=3
spring.datasource.hikari.maximum-pool-size=5 spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.auto-commit=true spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000 spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=DatebookHikariCP spring.datasource.hikari.pool-name=DatebookHikariCP
...@@ -14,30 +14,44 @@ spring.datasource.hikari.max-lifetime=1800000 ...@@ -14,30 +14,44 @@ spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1 spring.datasource.hikari.connection-test-query=SELECT 1
# REDIS (RedisProperties) #??????
spring.redis.database=1 eureka.instance.hostname=39.98.45.134
spring.redis.host=172.16.3.18 eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:10001/eureka/
spring.redis.port=6379
spring.redis.password=yeejoin@2020
spring.redis.timeout=0
#注册中心地址
eureka.client.service-url.defaultZone=http://39.98.45.134:10001/eureka/
eureka.instance.prefer-ip-address=true eureka.instance.prefer-ip-address=true
management.endpoints.web.exposure.include=*
eureka.instance.health-check-url=http://localhost:${server.port}${server.servlet.context-path}/actuator/health eureka.instance.health-check-url=http://localhost:${server.port}${server.servlet.context-path}/actuator/health
eureka.instance.metadata-map.management.context-path=${server.servlet.context-path}/actuator eureka.instance.metadata-map.management.context-path=${server.servlet.context-path}/actuator
eureka.instance.status-page-url=http://localhost:${server.port}${server.servlet.context-path}/actuator/info eureka.instance.status-page-url=http://localhost:${server.port}${server.servlet.context-path}/actuator/info
eureka.instance.metadata-map.management.api-docs=http://localhost:${server.port}${server.servlet.context-path}/doc.html eureka.instance.metadata-map.management.api-docs=http://localhost:${server.port}${server.servlet.context-path}/doc.html
#redis
spring.redis.database=1
spring.redis.host=39.98.45.134
spring.redis.port=6379
spring.redis.password=yeejoin@2020
spring.redis.timeout=0
## emqx
emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://39.98.45.134:2883
emqx.client-user-name=super
emqx.client-password=a123456
emqx.max-inflight=1000
emqx.keep-alive-interval=10
knife4j.production=false knife4j.production=false
knife4j.enable=true knife4j.enable=true
knife4j.basic.enable=true knife4j.basic.enable=true
knife4j.basic.username=admin knife4j.basic.username=admin
knife4j.basic.password=a1234560 knife4j.basic.password=a1234560
management.security.enabled=true
management.endpoint.health.show-details=always
spring.security.user.name=admin spring.security.user.name=admin
spring.security.user.password=a1234560 spring.security.user.password=a1234560
spring.boot.admin.client.enabled=true
spring.boot.admin.client.instance.metadata.user.name=${spring.security.user.name}
spring.boot.admin.client.instance.metadata.user.password=${spring.security.user.password}
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=a1234560
management.security.enabled=false
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*
\ No newline at end of file
#DB properties:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://172.16.3.67:3306/systemdeveloper?allowMultiQueries=true&serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root_123
#eureka properties:
eureka.instance.hostname=172.16.10.72
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:10001/eureka/
eureka.instance.prefer-ip-address=true
eureka.instance.health-check-url=http://localhost:${server.port}${server.servlet.context-path}/actuator/health
eureka.instance.metadata-map.management.context-path=${server.servlet.context-path}/actuator
eureka.instance.status-page-url=http://localhost:${server.port}${server.servlet.context-path}/actuator/info
eureka.instance.metadata-map.management.api-docs=http://localhost:${server.port}${server.servlet.context-path}/swagger-ui.html
#redis
spring.redis.database=0
spring.redis.host=172.16.10.85
spring.redis.port=6379
spring.redis.password=amos2019Redis
spring.redis.lettuce.pool.max-active=200
spring.redis.lettuce.pool.max-wait=-1
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=0
spring.redis.expire.time=300
## emqx
emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://172.16.10.85:1883
emqx.user-name=super
emqx.password=a123456
security.systemctl.name=AMOS-API-SYSTEMCTL
knife4j.production=false
knife4j.enable=true
knife4j.basic.enable=true
knife4j.basic.username=admin
knife4j.basic.password=a1234560
spring.security.user.name=admin
spring.security.user.password=a1234560
spring.boot.admin.client.enabled=true
spring.boot.admin.client.instance.metadata.user.name=${spring.security.user.name}
spring.boot.admin.client.instance.metadata.user.password=${spring.security.user.password}
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=a1234560
management.security.enabled=false
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*
\ No newline at end of file
spring.application.name=AMOS-API-TOOL spring.application.name=AMOS-ATL
server.servlet.context-path=/atl
<<<<<<< HEAD
#server.servlet.context-path=/jcs
server.port=30002
#server.port=20000
=======
server.port=30201 server.port=30201
server.servlet.context-path=/template
>>>>>>> 56d4a0ab360f8ce8f2fa01e2ecf68e745d42bc24
spring.profiles.active=dev spring.profiles.active=dev
spring.jackson.dateFormat=yyyy-MM-dd HH:mm:ss management.health.elasticsearch.enabled=false
spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
logging.config=classpath:logback-${spring.profiles.active}.xml logging.config=classpath:logback-${spring.profiles.active}.xml
#mybatis-plus\uFFFD\uFFFD\uFFFD\uFFFD\u05BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u02B9\uFFFD\uFFFDmybatis\uFFFD\u0123\uFFFD\uFFFD\uFFFD\uFFFD\u04B2\uFFFD\uFFFD\uFFFD
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# mybatis-plus spring.datasource.type=com.zaxxer.hikari.HikariDataSource
mybatis-plus.mapper-locations=classpath*:mapper/*Mapper.xml spring.datasource.hikari.minimum-idle=10
mybatis-plus.type-aliases-super-type=org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity spring.datasource.hikari.maximum-pool-size=25
mybatis-plus.global-config.db-config.id-type=id_worker spring.datasource.hikari.auto-commit=true
mybatis-plus.global-config.db-config.logic-delete-field=is_delete spring.datasource.hikari.idle-timeout=30000
mybatis-plus.global-config.db-config.logic-delete-value=1 spring.datasource.hikari.pool-name=DatebookHikariCP
mybatis-plus.global-config.db-config.logic-not-delete-value=0 spring.datasource.hikari.max-lifetime=120000
mybatis.interceptor.enabled=true spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1
\ No newline at end of file
...@@ -16,10 +16,11 @@ ...@@ -16,10 +16,11 @@
<logger name="org.apache.activemq" level="INFO"/> <logger name="org.apache.activemq" level="INFO"/>
<logger name="org.springframework" level="DEBUG"/> <logger name="org.springframework" level="DEBUG"/>
<logger name="com.yeejoin.amos" level="DEBUG"/> <logger name="org.typroject" level="DEBUG"/>
<logger name="com.yeejoin" level="DEBUG"/>
<!-- 日志输出级别 --> <!-- 日志输出级别 -->
<root level="INFO"> <root level="INFO">
<appender-ref ref="STDOUT" /> <appender-ref ref="STDOUT" />
</root> </root>
</configuration>
\ No newline at end of file </configuration>
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="log" />
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/jcs.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>7</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>30mb</MaxFileSize>
</triggeringPolicy>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="INFO"/>
<logger name="org.mybatis" level="INFO" />
<logger name="java.sql.Connection" level="INFO"/>
<logger name="java.sql.Statement" level="INFO"/>
<logger name="java.sql.PreparedStatement" level="INFO"/>
<logger name="com.baomidou.mybatisplus" level="INFO"/>
<logger name="org.typroject" level="INFO"/>
<logger name="com.yeejoin" level="INFO"/>
<logger name="org.springframework" level="INFO"/>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.api.tool.face.orm.dao.AmosDemoMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.api.tool.face.orm.dao.StudioResourceMapper">
<select id="queryForListByTableName" resultType="com.yeejoin.amos.api.tool.face.orm.entity.TableColumn">
SELECT
column_name as columnName,
( CASE WHEN ( is_nullable = 'no' <![CDATA[ && ]]> column_key != 'PRI' ) THEN '1' ELSE NULL END ) AS isRequired,
( CASE WHEN column_key = 'PRI' THEN '1' ELSE '0' END ) AS isPk,
ordinal_position AS sort,
column_comment as columnComment,
( CASE WHEN extra = 'auto_increment' THEN '1' ELSE '0' END ) AS isIncrement,
column_type as columnType
FROM
information_schema.COLUMNS
WHERE
table_schema = database()
AND table_name = #{tableName}
ORDER BY
ordinal_position
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment