| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- package jnpf.generater.controller;
- import cn.dev33.satoken.annotation.SaCheckPermission;
- import cn.dev33.satoken.annotation.SaMode;
- import com.baomidou.dynamic.datasource.annotation.DSTransactional;
- import io.swagger.v3.oas.annotations.Operation;
- import io.swagger.v3.oas.annotations.Parameter;
- import io.swagger.v3.oas.annotations.Parameters;
- import io.swagger.v3.oas.annotations.tags.Tag;
- import jakarta.servlet.http.HttpServletRequest;
- import jnpf.base.ActionResult;
- import jnpf.base.entity.DictionaryDataEntity;
- import jnpf.base.entity.VisualdevEntity;
- import jnpf.base.entity.VisualdevReleaseEntity;
- import jnpf.base.model.DownloadCodeForm;
- import jnpf.base.model.VisualAliasForm;
- import jnpf.base.model.read.ReadListVO;
- import jnpf.base.model.read.ReadModel;
- import jnpf.base.service.DictionaryDataService;
- import jnpf.base.service.VisualAliasService;
- import jnpf.base.service.VisualdevReleaseService;
- import jnpf.base.service.VisualdevService;
- import jnpf.base.util.ReadFile;
- import jnpf.base.util.VisualUtil;
- import jnpf.base.vo.DownloadVO;
- import jnpf.base.vo.ListVO;
- import jnpf.config.ConfigValueUtil;
- import jnpf.constant.FileTypeConstant;
- import jnpf.constant.MsgCode;
- import jnpf.entity.FileParameter;
- import jnpf.exception.DataException;
- import jnpf.generater.service.VisualdevGenService;
- import jnpf.model.visualJson.TableModel;
- import jnpf.util.*;
- import org.dromara.x.file.storage.core.FileInfo;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Objects;
- /**
- * 可视化开发功能表
- *
- * @author JNPF开发平台组
- * @version V3.1.0
- * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com)
- * @date 2021/3/16
- */
- @Tag(name = "代码生成器", description = "Generater")
- @RestController
- @RequestMapping("/api/visualdev/Generater")
- public class VisualdevGenController {
- @Autowired
- private ConfigValueUtil configValueUtil;
- @Autowired
- private RedisUtil redisUtil;
- @Autowired
- private VisualdevService visualdevService;
- @Autowired
- private VisualdevReleaseService visualdevReleaseService;
- @Autowired
- private VisualdevGenService visualdevGenService;
- @Autowired
- private DictionaryDataService dictionaryDataApi;
- @Autowired
- private VisualAliasService aliasService;
- /**
- * 下载文件
- *
- * @return
- */
- @NoDataSourceBind()
- @Operation(summary = "下载文件")
- @GetMapping("/DownloadVisCode")
- public void downloadCode() throws DataException {
- HttpServletRequest request = ServletUtil.getRequest();
- String reqJson = request.getParameter("encryption");
- String name = request.getParameter("name");
- String fileNameAll = DesUtil.aesDecode(reqJson);
- if (!StringUtil.isEmpty(fileNameAll)) {
- String token = fileNameAll.split("#")[0];
- if (TicketUtil.parseTicket(token) != null) {
- TicketUtil.deleteTicket(token);
- String fileName = fileNameAll.split("#")[1];
- String path = FilePathUtil.getFilePath(FileTypeConstant.CODETEMP);
- //下载到本地
- FileUploadUtils.downloadFile(new FileParameter(path, fileName), inputStream -> {
- FileDownloadUtil.outFile(inputStream, name);
- });
- //删除打包的临时文件,释放存储
- // FileUploadUtils.deleteFileByPathAndFileName(path, fileName);
- } else {
- throw new DataException(MsgCode.VS014.get());
- }
- } else {
- throw new DataException(MsgCode.VS014.get());
- }
- }
- @Operation(summary = "获取命名空间")
- @GetMapping("/AreasName")
- @SaCheckPermission(value = {"onlineDev.formDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
- public ActionResult getAreasName() {
- String areasName = configValueUtil.getCodeAreasName();
- List<String> areasNameList = new ArrayList(Arrays.asList(areasName.split(",")));
- return ActionResult.success(areasNameList);
- }
- @Operation(summary = "下载代码")
- @Parameters({
- @Parameter(name = "id", description = "主键"),
- })
- @PostMapping("/{id}/Actions/DownloadCode")
- @SaCheckPermission(value = {"onlineDev.formDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
- @DSTransactional
- public ActionResult downloadCode(@PathVariable("id") String id, @RequestBody DownloadCodeForm downloadCodeForm) throws Exception {
- if (downloadCodeForm.getModule() != null) {
- DictionaryDataEntity info = dictionaryDataApi.getInfo(downloadCodeForm.getModule());
- if (info != null) {
- downloadCodeForm.setModule(info.getEnCode());
- }
- }
- VisualdevEntity visualdevEntity = JsonUtil.getJsonToBean(visualdevReleaseService.getById(id), VisualdevEntity.class);
- String s = VisualUtil.checkPublishVisualModel(visualdevEntity, MsgCode.VS006.get());
- if (s != null) {
- return ActionResult.fail(s);
- }
- DownloadVO vo;
- String fileName = visualdevGenService.codeGengerateV3(visualdevEntity, downloadCodeForm);
- //服务器生成路径
- String filePath = FileUploadUtils.getLocalBasePath() + configValueUtil.getServiceDirectoryPath() + fileName + ".zip";
- FileUtil.toZip(filePath, true, FileUploadUtils.getLocalBasePath() + configValueUtil.getServiceDirectoryPath() + fileName);
- // 删除源文件
- FileUtil.deleteFileAll(new File(FileUploadUtils.getLocalBasePath() + configValueUtil.getServiceDirectoryPath() + fileName));
- //上传压缩包到服务器
- MultipartFile multipartFile = FileUtil.createFileItem(new File(XSSEscape.escapePath(filePath)));
- FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(configValueUtil.getServiceDirectoryPath(), fileName + ".zip"), multipartFile);
- // 删除压缩包
- FileUtil.deleteFileAll(new File(filePath));
- //下载文件服务器上的压缩包
- vo = DownloadVO.builder().name(fileInfo.getFilename()).url(UploaderUtil.uploaderVisualFile(fileInfo.getFilename()) + "&name=" + fileName + ".zip").build();
- if (vo == null) {
- return ActionResult.fail(MsgCode.FA006.get());
- }
- return ActionResult.success(vo);
- }
- /**
- * 输出移动开发模板
- *
- * @return
- */
- @Operation(summary = "预览代码")
- @Parameters({
- @Parameter(name = "id", description = "主键"),
- })
- @PostMapping("/{id}/Actions/CodePreview")
- @SaCheckPermission(value = {"onlineDev.formDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
- public ActionResult codePreview(@PathVariable("id") String id, @RequestBody DownloadCodeForm downloadCodeForm) throws Exception {
- if (downloadCodeForm.getModule() != null) {
- DictionaryDataEntity info = dictionaryDataApi.getInfo(downloadCodeForm.getModule());
- if (info != null) {
- downloadCodeForm.setModule(info.getEnCode());
- }
- }
- VisualdevReleaseEntity releaseEntity = visualdevReleaseService.getById(id);
- VisualdevEntity visualdevEntity = JsonUtil.getJsonToBean(releaseEntity, VisualdevEntity.class);
- String s = VisualUtil.checkPublishVisualModel(visualdevEntity, "预览");
- if (s != null) {
- return ActionResult.fail(s);
- }
- String fileName = visualdevGenService.codeGengerateV3(visualdevEntity, downloadCodeForm);
- List<ReadListVO> dataList = ReadFile.priviewCode(FileUploadUtils.getLocalBasePath() + configValueUtil.getServiceDirectoryPath() + fileName);
- // 删除源文件
- FileUtil.deleteFileAll(new File(FileUploadUtils.getLocalBasePath() + configValueUtil.getServiceDirectoryPath() + fileName));
- if (dataList.size() == 0) {
- return ActionResult.fail(MsgCode.FA015.get());
- }
- //代码对比
- if (downloadCodeForm.isContrast()) {
- VisualdevEntity oldEntity = visualdevService.getInfo(id);
- //修改状态 - 旧的是已发布,新的是草稿版本;发布状态 - 旧的是 旧的发布版本,新的是当前发布版本;
- boolean statusUpdate = true;
- if (Objects.equals(oldEntity.getState(), 1) && StringUtil.isNotBlank(releaseEntity.getOldContent())) {
- statusUpdate = false;
- VisualdevEntity jsonToBean = JsonUtil.getJsonToBean(releaseEntity.getOldContent(), VisualdevEntity.class);
- oldEntity.setVisualTables(jsonToBean.getVisualTables());
- oldEntity.setFormData(jsonToBean.getFormData());
- oldEntity.setColumnData(jsonToBean.getColumnData());
- oldEntity.setAppColumnData(jsonToBean.getAppColumnData());
- oldEntity.setWebType(jsonToBean.getWebType());
- oldEntity.setDbLinkId(jsonToBean.getDbLinkId());
- }
- String oldFileName = visualdevGenService.codeGengerateV3(oldEntity, downloadCodeForm);
- List<ReadListVO> oldDataList = ReadFile.priviewCode(FileUploadUtils.getLocalBasePath() + configValueUtil.getServiceDirectoryPath() + oldFileName);
- // 删除源文件
- FileUtil.deleteFileAll(new File(FileUploadUtils.getLocalBasePath() + configValueUtil.getServiceDirectoryPath() + oldFileName));
- for (ReadListVO m : dataList) {
- ReadListVO n = oldDataList.stream().filter(t -> m.getFileName().equals(t.getFileName())).findFirst().orElse(null);
- if (Objects.nonNull(n)) {
- List<ReadModel> mChildren = m.getChildren();
- List<ReadModel> nChildren = n.getChildren();
- for (ReadModel mChild : mChildren) {
- ReadModel nChild = nChildren.stream().filter(t -> mChild.getFileName().equals(t.getFileName())).findFirst().orElse(null);
- String nfileContent = Objects.nonNull(nChild) ? nChild.getFileContent() : "";
- if (statusUpdate) {
- mChild.setOldFileContent(mChild.getFileContent());
- mChild.setFileContent(nfileContent);
- } else {
- mChild.setOldFileContent(nfileContent);
- }
- }
- }
- }
- }
- ListVO datas = new ListVO<>();
- datas.setList(dataList);
- return ActionResult.success(datas);
- }
- /**
- * App预览(后台APP表单设计)
- *
- * @return
- */
- @Operation(summary = "App预览(后台APP表单设计)")
- @Parameters({
- @Parameter(name = "data", description = "数据"),
- })
- @PostMapping("/App/Preview")
- @SaCheckPermission(value = {"onlineDev.formDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
- public ActionResult appPreview(String data) {
- String id = RandomUtil.uuId();
- redisUtil.insert(id, data, 300);
- return ActionResult.success((Object) id);
- }
- /**
- * App预览(后台APP表单设计)
- *
- * @return
- */
- @Operation(summary = "App预览查看")
- @Parameters({
- @Parameter(name = "id", description = "主键"),
- })
- @GetMapping("/App/{id}/Preview")
- @SaCheckPermission(value = {"onlineDev.formDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
- public ActionResult preview(@PathVariable("id") String id) {
- if (redisUtil.exists(id)) {
- Object object = redisUtil.getString(id);
- return ActionResult.success(object);
- } else {
- return ActionResult.fail(MsgCode.FA019.get());
- }
- }
- @Operation(summary = "获取命名规范")
- @Parameters({
- @Parameter(name = "id", description = "主键"),
- })
- @GetMapping("/{id}/Alias/Info")
- @SaCheckPermission(value = {"onlineDev.formDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
- public ActionResult getAliasInfo(@PathVariable("id") String id) {
- List<TableModel> aliasInfo = aliasService.getAliasInfo(id);
- return ActionResult.success(aliasInfo);
- }
- @Operation(summary = "命名规范保存")
- @Parameters({
- @Parameter(name = "id", description = "主键"),
- })
- @PostMapping("/{id}/Alias/Save")
- @SaCheckPermission(value = {"onlineDev.formDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
- public ActionResult aliasSave(@PathVariable("id") String id, @RequestBody VisualAliasForm form) {
- aliasService.aliasSave(id, form);
- return ActionResult.success(MsgCode.SU002.get());
- }
- }
|