package com.qianwen.smartman.modules.develop.controller;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import com.baomidou.mybatisplus.generator.AutoGenerator;
|
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
|
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiParam;
|
import java.io.File;
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.Collection;
|
import java.util.List;
|
import java.util.Map;
|
import javax.validation.Valid;
|
import org.apache.commons.lang3.StringUtils;
|
import com.qianwen.smartman.common.cache.RegionCache;
|
import com.qianwen.smartman.common.utils.ZipFileTree;
|
import com.qianwen.core.boot.ctrl.BladeController;
|
import com.qianwen.core.mp.base.BaseEntity;
|
import com.qianwen.core.mp.support.Condition;
|
import com.qianwen.core.mp.support.Query;
|
import com.qianwen.core.tenant.annotation.NonDS;
|
import com.qianwen.core.tool.api.R;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.core.util.CodeUtil;
|
import org.springblade.generator.action.config.GeneratorConfig;
|
import org.springblade.generator.action.engine.CustomTemplateEngine;
|
import org.springblade.generator.action.engine.WebPageTemplateEngine;
|
import org.springblade.generator.action.model.BladeCodeEntity;
|
import org.springblade.generator.action.model.BladeWebPageEntity;
|
import org.springblade.generator.action.model.TemplateEntity;
|
import org.springblade.generator.entity.TabEntity;
|
import com.qianwen.smartman.modules.develop.entity.Code;
|
import com.qianwen.smartman.modules.develop.service.ICodeService;
|
import com.qianwen.smartman.modules.develop.service.IDatasourceService;
|
import com.qianwen.smartman.modules.develop.vo.CodeTemplateVo;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RestController;
|
import springfox.documentation.annotations.ApiIgnore;
|
|
@RequestMapping({"blade-develop/code"})
|
@Api(value = "代码生成", tags = {"代码生成"})
|
@ApiIgnore
|
@RestController
|
@NonDS
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/develop/controller/CodeController.class */
|
public class CodeController extends BladeController {
|
private final ICodeService codeService;
|
private final IDatasourceService datasourceService;
|
@Value("${spring.datasource.dynamic.datasource.master.url}")
|
private String url;
|
@Value("${spring.datasource.dynamic.datasource.master.username}")
|
private String user;
|
@Value("${spring.datasource.dynamic.datasource.master.password}")
|
private String password;
|
|
public CodeController(ICodeService codeService, IDatasourceService datasourceService) {
|
this.codeService = codeService;
|
this.datasourceService = datasourceService;
|
}
|
|
@ApiOperationSupport(order = 1)
|
@GetMapping({"/detail"})
|
@ApiOperation(value = "详情", notes = "传入code")
|
public R<Code> detail(Code code) {
|
Code detail = (Code) this.codeService.getOne(Condition.getQueryWrapper(code));
|
return R.data(detail);
|
}
|
|
@ApiOperationSupport(order = 2)
|
@ApiImplicitParams({@ApiImplicitParam(name = "codeName", value = "模块名", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "tableName", value = "表名", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "modelName", value = "实体名", paramType = "query", dataType = "string")})
|
@ApiOperation(value = "分页", notes = "传入code")
|
@GetMapping({"/list"})
|
public R<IPage<Code>> list(@RequestParam @ApiIgnore Map<String, Object> code, Query query) {
|
IPage<Code> pages = this.codeService.page(Condition.getPage(query), Condition.getQueryWrapper(code, Code.class));
|
return R.data(pages);
|
}
|
|
@PostMapping({"/submit"})
|
@ApiOperationSupport(order = 3)
|
@ApiOperation(value = "新增或修改", notes = "传入code")
|
public R submit(@Valid @RequestBody Code code) {
|
return R.status(this.codeService.submit(code));
|
}
|
|
@PostMapping({"/remove"})
|
@ApiOperationSupport(order = 4)
|
@ApiOperation(value = "删除", notes = "传入ids")
|
public R remove(@RequestParam @ApiParam(value = "主键集合", required = true) String ids) {
|
return R.status(this.codeService.removeByIds(Func.toLongList(ids)));
|
}
|
|
@PostMapping({"/copy"})
|
@ApiOperationSupport(order = RegionCache.VILLAGE_LEVEL)
|
@ApiOperation(value = "复制", notes = "传入id")
|
public R copy(@RequestParam @ApiParam(value = "主键", required = true) Long id) {
|
Code code = (Code) this.codeService.getById(id);
|
code.setId(null);
|
code.setCodeName(code.getCodeName() + "-copy");
|
return R.status(this.codeService.save(code));
|
}
|
|
@PostMapping({"/gen-code-new"})
|
@ApiOperationSupport(order = 6)
|
@ApiOperation(value = "新版本代码生成,生成后端方法", notes = "传入ids")
|
public R genCodeNew(@RequestParam @ApiParam(value = "主键集合", required = true) String ids) throws IOException {
|
Collection<Code> codes = this.codeService.listByIds(Func.toLongList(ids));
|
String millisecond = IdWorker.getMillisecond();
|
File dir = new File("static/codefile");
|
if (!dir.exists()) {
|
dir.mkdir();
|
}
|
String uploadPath = "static/codefile/" + millisecond;
|
String bladeBootPath = uploadPath + "/Bladex-Boot";
|
codes.forEach(code -> {
|
BladeCodeEntity codeEntity = new BladeCodeEntity("", code.getCodeName(), code.getTableName(), code.getTablePrefix(), code.getServiceName(), code.getPackageName(), bladeBootPath + "/src/main/java", BaseEntity.class);
|
codeEntity.setServiceName(code.getServiceName());
|
AutoGenerator autoGenerator = new GeneratorConfig(new DataSourceConfig.Builder(this.url, this.user, this.password).build()).build(codeEntity);
|
autoGenerator.execute(new CustomTemplateEngine());
|
});
|
new ZipFileTree().zipFile(uploadPath);
|
R<Object> res = R.success("代码生成成功");
|
res.setData(millisecond);
|
return res;
|
}
|
|
@PostMapping({"/template"})
|
@ApiOperationSupport(order = RegionCache.VILLAGE_LEVEL)
|
@ApiOperation(value = "前端代码生成,选择相关模板生成,只生成前端代码", notes = "传入模板对象")
|
public R template(@ApiParam(value = "模板生成", required = true) @RequestBody CodeTemplateVo codeTemplate) throws IOException {
|
String millisecond = IdWorker.getMillisecond();
|
String uploadPath = "static/codefile/" + millisecond;
|
String saberPath = uploadPath + "/Saber";
|
if (!codeTemplate.isTabPage()) {
|
Code code = (Code) this.codeService.getById(codeTemplate.getTabs().get(0).getId());
|
createWebPageEntity(codeTemplate, saberPath, code, null);
|
} else {
|
List<TabEntity> tabEntities = new ArrayList<>();
|
codeTemplate.getTabs().forEach(codeVo -> {
|
Code code2 = (Code) this.codeService.getById(codeVo.getId());
|
createWebPageEntity(codeTemplate, saberPath, code2, codeTemplate.getFileName());
|
String fileName = CodeUtil.lineToHump(code2.getTableName().replace(code2.getTablePrefix(), ""));
|
tabEntities.add(new TabEntity(fileName));
|
});
|
TemplateEntity codeEntity = new TemplateEntity("", codeTemplate.getModulePath(), "src", saberPath);
|
codeEntity.setTabs(tabEntities);
|
if (StringUtils.isNotEmpty(codeTemplate.getFileName())) {
|
codeEntity.setFileName(codeTemplate.getFileName());
|
}
|
AutoGenerator autoGenerator = new GeneratorConfig(new DataSourceConfig.Builder(this.url, this.user, this.password).build()).build(codeEntity);
|
autoGenerator.execute(new WebPageTemplateEngine());
|
}
|
new ZipFileTree().zipFile(uploadPath);
|
R<Object> res = R.success("代码生成成功");
|
res.setData(millisecond);
|
return res;
|
}
|
|
private void createWebPageEntity(CodeTemplateVo codeTemplate, String saberPath, Code code, String tabName) {
|
BladeWebPageEntity codeEntity = new BladeWebPageEntity("", codeTemplate.getModulePath(), code.getTableName(), code.getTablePrefix(), "src", saberPath);
|
codeEntity.setPageTemplate(codeTemplate.pageTemplate());
|
codeEntity.setTabName(tabName);
|
AutoGenerator autoGenerator = new GeneratorConfig(new DataSourceConfig.Builder(this.url, this.user, this.password).build()).build(codeEntity);
|
autoGenerator.execute(new WebPageTemplateEngine());
|
}
|
}
|