初始代码

This commit is contained in:
wangmingwei
2026-04-21 16:49:46 +08:00
parent aae9dc4036
commit f0453ff3a3
2396 changed files with 256575 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yunzhupaas-visualdev-base</artifactId>
<groupId>com.yunzhupaas</groupId>
<version>5.2.0-RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yunzhupaas-visualdev-base-controller</artifactId>
<dependencies>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-visualdev-base-biz</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-visualdev-onlinedev-biz</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,82 @@
package com.yunzhupaas.base.controller;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yunzhupaas.base.ActionResult;
import com.yunzhupaas.base.entity.FilterEntity;
import com.yunzhupaas.base.model.filter.FilterInfo;
import com.yunzhupaas.base.model.filter.FilterQuery;
import com.yunzhupaas.base.service.FilterService;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.util.RandomUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/filter")
public class FilterController {
@Autowired
private FilterService filterService;
/**
* 获取列表
* @param page
* @return
*/
@PostMapping("list")
public ActionResult<?> list(@RequestBody @Validated FilterQuery page) {
QueryWrapper<FilterEntity> wrapper = new QueryWrapper<>();
FilterQuery info = filterService.page(page, wrapper);
return ActionResult.success(info);
}
/**
* 查询信息
* @param id
* @return
*/
@GetMapping("/{id}")
public ActionResult<?> info(@PathVariable String id) {
FilterEntity info = filterService.getById(id);
return ActionResult.success(info);
}
/**
* 保存信息
* @param info
* @return
*/
@PostMapping("save")
public ActionResult<?> save(@RequestBody @Validated FilterInfo info) {
FilterEntity filterEntity = BeanUtil.copyProperties(info, FilterEntity.class);
filterEntity.setId(RandomUtil.uuId());
filterService.save(filterEntity);
return ActionResult.success(MsgCode.SU002.get());
}
/**
* 更新信息
* @param info
* @return
*/
@PutMapping("update")
public ActionResult<?> update(@RequestBody @Validated FilterInfo info) {
FilterEntity filterEntity = BeanUtil.copyProperties(info, FilterEntity.class);
filterService.updateById(filterEntity);
return ActionResult.success(MsgCode.SU004.get());
}
/**
* 删除信息
* @param id
* @return
*/
@DeleteMapping("/{id}")
public ActionResult<?> delete(@PathVariable String id) {
filterService.removeById(id);
return ActionResult.success(MsgCode.SU003.get());
}
}

View File

@@ -0,0 +1,43 @@
package com.yunzhupaas.base.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
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 com.yunzhupaas.base.ActionResult;
import com.yunzhupaas.base.Pagination;
import com.yunzhupaas.base.model.ai.VisualAiModel;
import com.yunzhupaas.base.service.impl.VisualAiServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* 在线开发ai模块
*
* @author 云筑产品开发平台组
* @version v5.2.0
* @copyright 深圳市乐程软件有限公司
* @date 2024/12/2 9:57:13
*/
@Tag(name = "在线开发ai模块", description = "ai")
@RestController
@RequestMapping("/api/visualdev/ai")
public class VisualAiController {
@Autowired
private VisualAiServiceImpl visualAiService;
@Operation(summary = "ai生成表单")
@Parameters({
@Parameter(name = "keyword", description = "需求描述"),
})
@PostMapping("/form")
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
public ActionResult form(@RequestBody Pagination pagination) {
VisualAiModel visualAiModel = visualAiService.form(pagination.getKeyword());
return ActionResult.success(visualAiModel);
}
}

View File

@@ -0,0 +1,703 @@
package com.yunzhupaas.base.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
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 com.yunzhupaas.base.ActionResult;
import com.yunzhupaas.base.UserInfo;
import com.yunzhupaas.base.entity.DataInterfaceEntity;
import com.yunzhupaas.base.entity.DictionaryDataEntity;
import com.yunzhupaas.base.entity.VisualdevEntity;
import com.yunzhupaas.base.entity.VisualdevReleaseEntity;
import com.yunzhupaas.base.model.*;
import com.yunzhupaas.base.model.Template6.BtnData;
import com.yunzhupaas.base.model.module.ModuleNameVO;
import com.yunzhupaas.base.model.online.VisualMenuModel;
import com.yunzhupaas.base.service.*;
import com.yunzhupaas.base.util.VisualUtil;
import com.yunzhupaas.base.util.visualUtil.PubulishUtil;
import com.yunzhupaas.base.vo.ListVO;
import com.yunzhupaas.base.vo.PageListVO;
import com.yunzhupaas.base.vo.PaginationVO;
import com.yunzhupaas.constant.GenerateConstant;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.exception.DataException;
import com.yunzhupaas.exception.WorkFlowException;
import com.yunzhupaas.flowable.model.template.FlowByFormModel;
import com.yunzhupaas.model.OnlineDevData;
import com.yunzhupaas.model.visualJson.*;
import com.yunzhupaas.model.visualJson.analysis.RecursionForm;
import com.yunzhupaas.onlinedev.model.PaginationModel;
import com.yunzhupaas.onlinedev.service.VisualdevModelDataService;
import com.yunzhupaas.onlinedev.util.onlineDevUtil.OnlinePublicUtils;
import com.yunzhupaas.permission.entity.UserEntity;
import com.yunzhupaas.permission.service.UserService;
import com.yunzhupaas.util.*;
import com.yunzhupaas.util.enums.DictionaryDataEnum;
import com.yunzhupaas.workflow.service.TemplateApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.stream.Collectors;
/**
* 可视化基础模块
*
* @author 云筑产品开发平台组
* @version V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2023/09/27
*/
@Tag(name = "可视化基础模块", description = "Base")
@RestController
@RequestMapping("/api/visualdev/Base")
public class VisualdevController extends SuperController<VisualdevService, VisualdevEntity> {
@Autowired
private VisualdevService visualdevService;
@Autowired
private VisualdevReleaseService visualdevReleaseService;
@Autowired
private UserService userService;
@Autowired
private DictionaryDataService dictionaryDataApi;
@Autowired
private VisualdevModelDataService visualdevModelDataService;
@Autowired
private PubulishUtil pubulishUtil;
@Autowired
private ModuleService moduleService;
@Autowired
private DataInterfaceService dataInterFaceApi;
@Autowired
private FilterService filterService;
@Autowired
private VisualAliasService aliasService;
@Autowired
private TemplateApi templateApi;
@Operation(summary = "获取功能列表")
@GetMapping
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
public ActionResult<PageListVO<VisualFunctionModel>> list(PaginationVisualdev paginationVisualdev) {
// 全部功能表单模板
List<VisualdevEntity> data = visualdevService.getList(paginationVisualdev);
List<String> userId = data.stream().map(t -> t.getCreatorUserId()).collect(Collectors.toList());
List<String> lastUserId = data.stream().map(t -> t.getLastModifyUserId()).collect(Collectors.toList());
List<UserEntity> userEntities = userService.getUserName(userId);
List<UserEntity> lastUserIdEntities = userService.getUserName(lastUserId);
// 表单类型
List<DictionaryDataEntity> dictionList = dictionaryDataApi.getListByTypeDataCode(DictionaryDataEnum.VISUALDEV.getDictionaryTypeId());
List<VisualFunctionModel> modelAll = new LinkedList<>();
// 遍历功能表单模板
for (VisualdevEntity entity : data) {
VisualFunctionModel model = JsonUtil.getJsonToBean(entity, VisualFunctionModel.class);
// 是否在表单类型中存在,若存在进行装配
DictionaryDataEntity dataEntity = dictionList.stream().filter(t -> t.getId().equals(entity.getCategory())).findFirst().orElse(null);
//避免导入的功能丢失
model.setCategory(dataEntity != null ? dataEntity.getFullName() : null);
UserEntity creatorUser = userEntities.stream().filter(t -> t.getId().equals(model.getCreatorUserId())).findFirst().orElse(null);
model.setCreatorUser(creatorUser != null ? creatorUser.getRealName() + "/" + creatorUser.getAccount() : "");
UserEntity lastmodifyuser = lastUserIdEntities.stream().filter(t -> t.getId().equals(model.getLastModifyUserId())).findFirst().orElse(null);
model.setLastModifyUser(lastmodifyuser != null ? lastmodifyuser.getRealName() + "/" + lastmodifyuser.getAccount() : "");
model.setIsRelease(entity.getState());
model.setHasPackage(true);
modelAll.add(model);
}
PaginationVO paginationVO = JsonUtil.getJsonToBean(paginationVisualdev, PaginationVO.class);
return ActionResult.page(modelAll, paginationVO);
}
@Operation(summary = "获取功能列表")
@GetMapping("/list")
public ActionResult<PageListVO<VisualDevListVO>> getList(PaginationVisualdev paginationVisualdev) {
List<VisualdevEntity> data = visualdevService.getPageList(paginationVisualdev);
List<VisualDevListVO> modelAll = JsonUtil.getJsonToList(data, VisualDevListVO.class);
//流程发起节点-调用弹窗添加系统表单是否引用
if (paginationVisualdev.getFlowStart()) {
List<String> flowFormStart = templateApi.getFormList();//流程发起节点的表单列表
for (VisualDevListVO item : modelAll) {
if (Objects.equals(item.getType(), 2)) {//系统表单被引用不能再选
boolean contains = flowFormStart.contains(item.getId());
item.setIsQuote(contains ? 1 : 0);
}
}
}
PaginationVO paginationVO = JsonUtil.getJsonToBean(paginationVisualdev, PaginationVO.class);
return ActionResult.page(modelAll, paginationVO);
}
@Operation(summary = "获取功能列表下拉框")
@Parameters({
@Parameter(name = "type", description = "类型(1-表单设计2-系统表单)"),
@Parameter(name = "isRelease", description = "是否发布"),
@Parameter(name = "webType", description = "页面类型1、纯表单2、表单加列表3、表单列表工作流、4、数据视图"),
@Parameter(name = "enableFlow", description = "是否启用流程")
})
@GetMapping("/Selector")
public ActionResult selectorList(Integer type, Integer isRelease, String webType, Integer enableFlow) {
List<VisualdevEntity> allList;
List<VisualdevEntity> list = new ArrayList<>();
if (isRelease != null) {
List<VisualdevReleaseEntity> releaseEntities = visualdevReleaseService.selectorList();
allList = JsonUtil.getJsonToList(releaseEntities, VisualdevEntity.class);
} else {
allList = visualdevService.selectorList();
}
if (webType != null) {
String[] webTypes = webType.split(",");
for (String wbType : webTypes) {
List<VisualdevEntity> collect = allList.stream().filter(l -> l.getWebType().equals(Integer.valueOf(wbType))).collect(Collectors.toList());
list.addAll(collect);
}
} else {
list = allList;
}
List<DictionaryDataEntity> dataEntityList = new ArrayList<>();
List<VisualdevTreeVO> voList = new ArrayList<>();
HashSet<String> cate = new HashSet<>(16);
if (type != null) {
list = list.stream().filter(t -> type.equals(t.getType())).collect(Collectors.toList());
dataEntityList = dictionaryDataApi.getListByTypeDataCode(DictionaryDataEnum.getTypeId(type));
// 遍历数据字典得到外部分类
for (DictionaryDataEntity dataEntity : dataEntityList) {
List<VisualdevEntity> num = list.stream().filter(t -> dataEntity.getId().equals(t.getCategory())).collect(Collectors.toList());
if (num.size() <= 0) {
continue;
}
int i = cate.size();
cate.add(dataEntity.getId());
if (cate.size() == i + 1) {
VisualdevTreeVO visualdevTreeVO = new VisualdevTreeVO();
visualdevTreeVO.setId(dataEntity.getId());
visualdevTreeVO.setFullName(dataEntity.getFullName());
visualdevTreeVO.setHasChildren(true);
voList.add(visualdevTreeVO);
}
}
} else {
// type为空时
for (VisualdevEntity entity : list) {
DictionaryDataEntity dataEntity = dictionaryDataApi.getInfo(entity.getCategory());
if (dataEntity != null) {
int i = cate.size();
cate.add(dataEntity.getId());
if (cate.size() == i + 1) {
VisualdevTreeVO visualdevTreeVO = new VisualdevTreeVO();
visualdevTreeVO.setId(entity.getCategory());
visualdevTreeVO.setFullName(dataEntity.getFullName());
visualdevTreeVO.setHasChildren(true);
voList.add(visualdevTreeVO);
}
}
}
}
for (VisualdevTreeVO vo : voList) {
List<VisualdevTreeChildModel> visualdevTreeChildModelList = new ArrayList<>();
for (VisualdevEntity entity : list) {
if (vo.getId().equals(entity.getCategory())) {
VisualdevTreeChildModel model = JsonUtil.getJsonToBean(entity, VisualdevTreeChildModel.class);
visualdevTreeChildModelList.add(model);
}
}
vo.setChildren(visualdevTreeChildModelList);
}
ListVO listVO = new ListVO();
listVO.setList(voList);
return ActionResult.success(listVO);
}
@Operation(summary = "获取功能信息")
@Parameters({
@Parameter(name = "id", description = "主键"),
})
@GetMapping("/{id}")
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
public ActionResult info(@PathVariable("id") String id) throws DataException {
UserInfo userInfo = UserProvider.getUser();
VisualdevEntity entity = visualdevService.getInfo(id);
VisualDevInfoVO vo = JsonUtilEx.getJsonToBeanEx(entity, VisualDevInfoVO.class);
if (StringUtil.isNotEmpty(entity.getInterfaceId())) {
DataInterfaceEntity info = dataInterFaceApi.getInfo(entity.getInterfaceId());
if (info != null) {
vo.setInterfaceName(info.getFullName());
}
}
return ActionResult.success(vo);
}
/**
* 获取表单主表属性下拉框
*
* @param id
* @return
*/
@Operation(summary = "获取表单主表属性下拉框")
@Parameters({
@Parameter(name = "id", description = "主键"),
@Parameter(name = "filterType", description = "过滤类型1-按键事件选择字段列表过滤"),
})
@GetMapping("/{id}/FormDataFields")
@SaCheckPermission("onlineDev.webDesign")
public ActionResult<ListVO<FormDataField>> getFormData(@PathVariable("id") String id, @RequestParam(value = "filterType", required = false) Integer filterType) {
List<FormDataField> fieldList = visualdevModelDataService.fieldList(id, filterType);
ListVO<FormDataField> listVO = new ListVO();
listVO.setList(fieldList);
return ActionResult.success(listVO);
}
/**
* 关联数据分页数据
*
* @param id
* @param paginationModel
* @return
*/
@Operation(summary = "关联数据分页数据")
@Parameters({
@Parameter(name = "id", description = "主键"),
})
@GetMapping("/{id}/FieldDataSelect")
public ActionResult getFormData(@PathVariable("id") String id, PaginationModel paginationModel) {
VisualdevEntity entity = visualdevService.getReleaseInfo(id);
List<Map<String, Object>> realList = visualdevModelDataService.getPageList(entity, paginationModel);
PaginationVO paginationVO = JsonUtil.getJsonToBean(paginationModel, PaginationVO.class);
return ActionResult.page(realList, paginationVO);
}
/**
* 复制功能
*
* @param id
* @return
*/
@Operation(summary = "复制功能")
@Parameters({
@Parameter(name = "id", description = "主键"),
})
@PostMapping("/{id}/Actions/Copy")
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
public ActionResult copyInfo(@PathVariable("id") String id) throws WorkFlowException {
VisualdevReleaseEntity releaseEntity = visualdevReleaseService.getById(id);
boolean b = releaseEntity != null;
VisualdevEntity entity;
String uuid = RandomUtil.uuId();
//已发布取发布版本
if (b) {
entity = JsonUtil.getJsonToBean(releaseEntity, VisualdevEntity.class);
//已发布复制命名规范
aliasService.copy(releaseEntity.getId(), uuid);
} else {
entity = visualdevService.getInfo(id);
}
String copyNum = UUID.randomUUID().toString().substring(0, 5);
entity.setFullName(entity.getFullName() + ".副本" + copyNum);
entity.setLastModifyTime(null);
entity.setLastModifyUserId(null);
entity.setCreatorTime(null);
entity.setId(uuid);
entity.setEnCode(entity.getEnCode() + copyNum);
VisualdevEntity entity1 = JsonUtil.getJsonToBean(entity, VisualdevEntity.class);
if (entity1.getEnCode().length() > 50 || entity1.getFullName().length() > 50) {
return ActionResult.fail(MsgCode.PRI006.get());
}
visualdevService.create(entity1);
return ActionResult.success(MsgCode.SU007.get());
}
/**
* 更新功能状态
*
* @param id 主键值
* @return
*/
@Operation(summary = "更新功能状态")
@Parameters({
@Parameter(name = "id", description = "主键"),
})
@PutMapping("/{id}/Actions/State")
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
public ActionResult update(@PathVariable("id") String id) throws Exception {
VisualdevEntity entity = visualdevService.getInfo(id);
if (entity != null) {
boolean flag = visualdevService.update(entity.getId(), entity);
if (flag == false) {
return ActionResult.fail(MsgCode.FA002.get());
}
}
return ActionResult.success(MsgCode.SU004.get());
}
@Operation(summary = "新建功能")
@PostMapping
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
public ActionResult create(@RequestBody VisualDevCrForm visualDevCrForm) throws Exception {
VisualdevEntity entity = JsonUtil.getJsonToBean(JsonUtilEx.getObjectToString(visualDevCrForm), VisualdevEntity.class);
if (GenerateConstant.containKeyword(entity.getFullName())) {
return ActionResult.fail("表单名称" + MsgCode.SYS128.get(entity.getFullName()));
}
if (visualdevService.getObjByEncode(entity.getEnCode(), entity.getType()) > 0) {
return ActionResult.fail(MsgCode.EXIST002.get());
}
if (visualdevService.getCountByName(entity.getFullName(), entity.getType()) > 0) {
return ActionResult.fail(MsgCode.EXIST001.get());
}
if (!VisualWebTypeEnum.DATA_VIEW.getType().equals(entity.getWebType())
&& !OnlineDevData.FORM_TYPE_SYS.equals(entity.getType())) {
List<TableModel> tableModelList = JsonUtil.getJsonToList(entity.getVisualTables(), TableModel.class);
FormDataModel formData = JsonUtil.getJsonToBean(entity.getFormData(), FormDataModel.class);
//判断子表是否复用
RecursionForm recursionForm = new RecursionForm();
if (ObjectUtil.isNotNull(formData)) {
//判断有表是否满足主键策略
if (tableModelList.size() > 0) {
boolean isIncre = Objects.equals(formData.getPrimaryKeyPolicy(), 2);
String strategy = !isIncre ? "[雪花ID]" : "[自增长id]";
for (TableModel tableModel : tableModelList) {
Boolean isAutoIncre = visualdevService.getPrimaryDbField(entity.getDbLinkId(), tableModel.getTable());
if (isAutoIncre == null) {
return ActionResult.fail(MsgCode.FM011.get(tableModel.getTable()));
}
if (isIncre != isAutoIncre) {
return ActionResult.fail(MsgCode.FM012.get(strategy, tableModel.getTable()));
}
}
}
List<FieLdsModel> list = JsonUtil.getJsonToList(formData.getFields(), FieLdsModel.class);
recursionForm.setList(list);
recursionForm.setTableModelList(tableModelList);
if (FormCloumnUtil.repetition(recursionForm, new ArrayList<>())) {
return ActionResult.fail(MsgCode.FM003.get());
}
//字段判断
List<FieLdsModel> fields = new ArrayList<>();
OnlinePublicUtils.getAllFields(fields, list);
StringJoiner sj = new StringJoiner(",");
for (FieLdsModel item : fields) {
if (StringUtil.isNotEmpty(item.getVModel()) && GenerateConstant.containKeyword(item.getVModel())) {
sj.add(item.getConfig().getLabel() + "-" + item.getVModel());
}
}
if (StringUtil.isNotEmpty(sj.toString())) {
return ActionResult.fail(MsgCode.SYS128.get(sj));
}
}
}
if (StringUtil.isEmpty(entity.getId())) {
entity.setId(RandomUtil.uuId());
}
visualdevService.create(entity);
return ActionResult.success(MsgCode.SU001.get(), entity.getId());
}
@Operation(summary = "修改功能")
@Parameters({
@Parameter(name = "id", description = "主键"),
})
@PutMapping("/{id}")
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
public ActionResult update(@PathVariable("id") String id, @RequestBody VisualDevUpForm visualDevUpForm) throws Exception {
VisualdevEntity visualdevEntity = visualdevService.getInfo(id);
String enCode = visualdevEntity.getEnCode();
String fullName = visualdevEntity.getFullName();
VisualdevEntity entity = JsonUtil.getJsonToBean(JsonUtilEx.getObjectToString(visualDevUpForm), VisualdevEntity.class);
entity.setState(visualdevEntity.getState());
if (GenerateConstant.containKeyword(entity.getFullName())) {
return ActionResult.fail("表单名称" + MsgCode.SYS128.get(entity.getFullName()));
}
if (!enCode.equals(visualDevUpForm.getEnCode())) {
if (visualdevService.getObjByEncode(entity.getEnCode(), entity.getType()) > 0) {
return ActionResult.fail(MsgCode.EXIST002.get());
}
}
if (!fullName.equals(visualDevUpForm.getFullName())) {
if (visualdevService.getCountByName(entity.getFullName(), entity.getType()) > 0) {
return ActionResult.fail(MsgCode.EXIST001.get());
}
}
VisualdevReleaseEntity releaseEntity = visualdevReleaseService.getById(id);
// 如果不是在线的,默认更新所有配置
if (!VisualWebTypeEnum.DATA_VIEW.getType().equals(entity.getWebType())
&& !OnlineDevData.FORM_TYPE_SYS.equals(entity.getType())) {
Map<String, String> tableMap = visualdevService.getTableMap(entity.getFormData());
filterService.updateRuleList(id, entity, 1, 1, tableMap);
//已发布修改的时候,把表移除掉的时候需要提示选表
List<TableModel> tableModelList = JsonUtil.getJsonToList(entity.getVisualTables(), TableModel.class);
if (releaseEntity != null && !VisualWebTypeEnum.DATA_VIEW.getType().equals(releaseEntity.getWebType())) {
if (tableModelList.size() == 0) {
return ActionResult.fail(MsgCode.VS408.get());
}
}
//判断子表是否复用
if (ObjectUtil.isNotNull(entity.getFormData())) {
FormDataModel formData = JsonUtil.getJsonToBean(entity.getFormData(), FormDataModel.class);
List<FieLdsModel> list = JsonUtil.getJsonToList(formData.getFields(), FieLdsModel.class);
if (tableModelList.size() > 0) {
RecursionForm recursionForm = new RecursionForm();
recursionForm.setList(list);
recursionForm.setTableModelList(tableModelList);
if (FormCloumnUtil.repetition(recursionForm, new ArrayList<>())) {
return ActionResult.fail(MsgCode.FM003.get());
}
}
//字段判断
List<FieLdsModel> fields = new ArrayList<>();
OnlinePublicUtils.getAllFields(fields, list);
StringJoiner sj = new StringJoiner(",");
for (FieLdsModel item : fields) {
if (StringUtil.isNotEmpty(item.getVModel()) && GenerateConstant.containKeyword(item.getVModel())) {
sj.add(item.getConfig().getLabel() + "-" + item.getVModel());
}
}
if (StringUtil.isNotEmpty(sj.toString())) {
return ActionResult.fail(MsgCode.SYS128.get(sj));
}
}
}
//修改状态
boolean released = Objects.equals(visualdevEntity.getState(), 1);
if (visualdevEntity != null && released) {
entity.setState(2);
}
boolean flag = visualdevService.update(id, entity);
if (flag == false) {
return ActionResult.fail(MsgCode.FA002.get());
}
return ActionResult.success(MsgCode.SU004.get());
}
@Operation(summary = "删除功能")
@Parameters({
@Parameter(name = "id", description = "主键"),
})
@DeleteMapping("/{id}")
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
public ActionResult delete(@PathVariable("id") String id) throws WorkFlowException {
VisualdevEntity entity = visualdevService.getInfo(id);
if (entity != null) {
FlowByFormModel flowByFormId = templateApi.getFlowByFormId(id, false);
if (flowByFormId != null && flowByFormId.getIsConfig()) {
return ActionResult.fail(MsgCode.FM005.get());
}
visualdevService.removeById(id);
visualdevReleaseService.removeById(id);
aliasService.removeByVisualId(id);
return ActionResult.success(MsgCode.SU003.get());
}
return ActionResult.fail(MsgCode.FA003.get());
}
@Operation(summary = "获取模板按钮和列表字段")
@Parameters({
@Parameter(name = "moduleId", description = "模板id"),
})
@GetMapping("/ModuleBtn")
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
public ActionResult getModuleBtn(String moduleId) {
VisualdevEntity visualdevEntity = visualdevService.getInfo(moduleId);
//去除模板中的F_
VisualUtil.delfKey(visualdevEntity);
List<BtnData> btnData = new ArrayList<>();
Map<String, Object> column = JsonUtil.stringToMap(visualdevEntity.getColumnData());
if (column.get("columnBtnsList") != null) {
btnData.addAll(JsonUtil.getJsonToList(JsonUtil.getJsonToListMap(column.get("columnBtnsList").toString()), BtnData.class));
}
if (column.get("btnsList") != null) {
btnData.addAll(JsonUtil.getJsonToList(JsonUtil.getJsonToListMap(column.get("btnsList").toString()), BtnData.class));
}
return ActionResult.success(btnData);
}
@Operation(summary = "发布模板")
@Parameters({
@Parameter(name = "id", description = "主键"),
})
@PostMapping("/{id}/Actions/Release")
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
@DSTransactional(rollbackFor = Exception.class)
public ActionResult publish(@PathVariable("id") String id) throws Exception {
VisualdevEntity visualdevEntity = visualdevService.getInfo(id);
if (GenerateConstant.containKeyword(visualdevEntity.getFullName())) {
return ActionResult.fail("表单名称" + MsgCode.SYS128.get(visualdevEntity.getFullName()));
}
List<TableModel> tableModels = JsonUtil.getJsonToList(visualdevEntity.getVisualTables(), TableModel.class);
String s = VisualUtil.checkPublishVisualModel(visualdevEntity, MsgCode.VS004.get());
if (s != null) {
return ActionResult.fail(s);
}
//数据视图没有formdata 系统表单不需要创表
if (!VisualWebTypeEnum.DATA_VIEW.getType().equals(visualdevEntity.getWebType())
&& !OnlineDevData.FORM_TYPE_SYS.equals(visualdevEntity.getType())) {
if (ObjectUtil.isNotNull(visualdevEntity.getFormData())) {
FormDataModel formData = JsonUtil.getJsonToBean(visualdevEntity.getFormData(), FormDataModel.class);
List<FieLdsModel> list = JsonUtil.getJsonToList(formData.getFields(), FieLdsModel.class);
//字段判断
List<FieLdsModel> fields = new ArrayList<>();
OnlinePublicUtils.getAllFields(fields, list);
StringJoiner sj = new StringJoiner(",");
for (FieLdsModel item : fields) {
if (StringUtil.isNotEmpty(item.getVModel()) && GenerateConstant.containKeyword(item.getVModel())) {
sj.add(item.getConfig().getLabel() + "-" + item.getVModel());
}
}
if (StringUtil.isNotEmpty(sj.toString())) {
return ActionResult.fail(MsgCode.SYS128.get(sj));
}
}
if (tableModels.size() == 0) {
try {
visualdevService.createTable(visualdevEntity);
} catch (WorkFlowException e) {
e.printStackTrace();
throw new WorkFlowException(MsgCode.VS003.get());
}
}
Map<String, String> tableMap = visualdevService.getTableMap(visualdevEntity.getFormData());
filterService.updateRuleList(id, visualdevEntity, 1, 1, tableMap);
}
//线上
visualdevEntity.setState(1);
visualdevEntity.setEnabledMark(1);
visualdevService.updateById(visualdevEntity);
//复制旧版本信息存储
VisualdevReleaseEntity newRelease = new VisualdevReleaseEntity();
newRelease.setVisualTables(visualdevEntity.getVisualTables());
newRelease.setFormData(visualdevEntity.getFormData());
newRelease.setColumnData(visualdevEntity.getColumnData());
newRelease.setAppColumnData(visualdevEntity.getAppColumnData());
newRelease.setWebType(visualdevEntity.getWebType());
newRelease.setDbLinkId(visualdevEntity.getDbLinkId());
String newContent = JsonUtil.getObjectToString(newRelease);
VisualdevReleaseEntity byId = visualdevReleaseService.getById(visualdevEntity.getId());
if (byId != null) {
VisualdevReleaseEntity oldRelease = new VisualdevReleaseEntity();
oldRelease.setVisualTables(byId.getVisualTables());
oldRelease.setFormData(byId.getFormData());
oldRelease.setColumnData(byId.getColumnData());
oldRelease.setAppColumnData(byId.getAppColumnData());
oldRelease.setWebType(byId.getWebType());
oldRelease.setDbLinkId(byId.getDbLinkId());
String oldContent = JsonUtil.getObjectToString(oldRelease);
if (oldContent.equals(newContent)) {
newContent = byId.getOldContent();
} else {
newContent = oldContent;
}
}
VisualdevEntity clone = new VisualdevEntity();
BeanUtil.copyProperties(visualdevEntity, clone);
VisualdevReleaseEntity releaseEntity = JsonUtil.getJsonToBean(clone, VisualdevReleaseEntity.class);
releaseEntity.setOldContent(newContent);
visualdevReleaseService.setIgnoreLogicDelete().saveOrUpdate(releaseEntity);
visualdevReleaseService.clearIgnoreLogicDelete();
return ActionResult.success(MsgCode.SU011.get());
}
@Operation(summary = "生成菜单")
@Parameters({
@Parameter(name = "id", description = "主键"),
})
@PostMapping("/{id}/Actions/Module")
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
@Transactional(rollbackFor = Exception.class)
public ActionResult createModule(@PathVariable("id") String id, @RequestBody VisualDevPubModel visualDevPubModel) throws Exception {
VisualdevEntity visualdevEntity = visualdevService.getInfo(id);
if (visualdevEntity == null) {
ActionResult.fail(MsgCode.FA001.get());
}
visualdevEntity.setPlatformRelease(visualDevPubModel.getPlatformRelease());
visualdevService.updateById(visualdevEntity);
//将线上版本发布
VisualdevEntity clone = BeanUtil.copyProperties(visualdevEntity, VisualdevEntity.class);
VisualMenuModel visual = VisualUtil.getVisual(clone, visualDevPubModel);
visual.setApp(visualDevPubModel.getApp());
visual.setPc(visualDevPubModel.getPc());
visual.setPcModuleParentId(visualDevPubModel.getPcModuleParentId());
visual.setAppModuleParentId(visualDevPubModel.getAppModuleParentId());
visual.setType(3);
visual.setWebType(visualdevEntity.getWebType());
pubulishUtil.publishMenu(visual);
return ActionResult.success(MsgCode.VS007.get());
}
@Operation(summary = "回滚模板")
@Parameters({
@Parameter(name = "id", description = "主键"),
})
@GetMapping("/{id}/Actions/RollbackTemplate")
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
public ActionResult RollbackTemplate(@PathVariable("id") String id) {
VisualdevReleaseEntity releaseEntity = visualdevReleaseService.getById(id);
boolean b = releaseEntity == null;
if (b) {
return ActionResult.fail(MsgCode.VS008.get());
} else {
VisualdevEntity visualdevEntity = JsonUtil.getJsonToBean(releaseEntity, VisualdevEntity.class);
visualdevService.updateById(visualdevEntity);
}
return ActionResult.success(MsgCode.SU020.get());
}
@Operation(summary = "获取已发布菜单")
@Parameters({
@Parameter(name = "id", description = "主键"),
})
@GetMapping("/{id}/getReleaseMenu")
@SaCheckPermission(value = {"onlineDev.webDesign", "generator.webForm", "generator.flowForm"}, mode = SaMode.OR)
public ActionResult<VisualFunctionModel> getReleaseMenu(@PathVariable("id") String id) {
VisualdevEntity entity = visualdevService.getById(id);
if (entity != null) {
VisualFunctionModel model = JsonUtil.getJsonToBean(entity, VisualFunctionModel.class);
model.setAppIsRelease(0);
model.setPcIsRelease(0);
ModuleNameVO moduleNameVO = moduleService.getModuleNameList(entity.getId());
if (moduleNameVO != null) {
if (StringUtil.isNotEmpty(moduleNameVO.getPcNames())) {
model.setPcIsRelease(1);
model.setPcReleaseName(moduleNameVO.getPcNames());
}
if (StringUtil.isNotEmpty(moduleNameVO.getAppNames())) {
model.setAppIsRelease(1);
model.setAppReleaseName(moduleNameVO.getAppNames());
}
}
return ActionResult.success(model);
}
return ActionResult.fail(MsgCode.FA012.get());
}
}

View File

@@ -0,0 +1,375 @@
package com.yunzhupaas.base.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.Operation;
import com.yunzhupaas.base.ActionResult;
import com.yunzhupaas.base.model.ColumnDataModel;
import com.yunzhupaas.base.model.OnlineImport.VisualdevModelDataInfoVO;
import com.yunzhupaas.base.model.VisualDevJsonModel;
import com.yunzhupaas.base.model.VisualWebTypeEnum;
import com.yunzhupaas.model.OnlineDevData;
import com.yunzhupaas.onlinedev.model.*;
import com.yunzhupaas.util.NoDataSourceBind;
import com.yunzhupaas.base.UserInfo;
import com.yunzhupaas.base.entity.VisualdevEntity;
import com.yunzhupaas.base.entity.VisualdevReleaseEntity;
import com.yunzhupaas.base.entity.VisualdevShortLinkEntity;
import com.yunzhupaas.base.model.shortLink.*;
import com.yunzhupaas.base.service.VisualdevReleaseService;
import com.yunzhupaas.base.service.VisualdevService;
import com.yunzhupaas.base.service.VisualdevShortLinkService;
import com.yunzhupaas.base.util.VisualUtil;
import com.yunzhupaas.base.vo.PaginationVO;
import com.yunzhupaas.config.ConfigValueUtil;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.consts.DeviceType;
import com.yunzhupaas.database.util.TenantDataSourceUtil;
import com.yunzhupaas.exception.DataException;
import com.yunzhupaas.exception.LoginException;
import com.yunzhupaas.exception.WorkFlowException;
import com.yunzhupaas.onlinedev.service.VisualDevInfoService;
import com.yunzhupaas.onlinedev.service.VisualDevListService;
import com.yunzhupaas.onlinedev.service.VisualdevModelDataService;
import com.yunzhupaas.onlinedev.util.onlineDevUtil.OnlinePublicUtils;
import com.yunzhupaas.onlinedev.util.onlineDevUtil.OnlineSwapDataUtils;
import com.yunzhupaas.util.*;
import com.yunzhupaas.util.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 在线开发表单外链Controller
*
* @author 云筑产品开发平台组
* @version V3.4.2
* @copyright 深圳市乐程软件有限公司
* @date 2024/12/30 11:33:17
*/
@Tag(name = "表单外链" , description = "BaseShortLink" )
@RestController
@RequestMapping("/api/visualdev/ShortLink" )
public class VisualdevShortLinkController extends SuperController<VisualdevShortLinkService, VisualdevShortLinkEntity> {
@Autowired
private VisualdevShortLinkService visualdevShortLinkService;
@Autowired
private ConfigValueUtil configValueUtil;
@Autowired
protected AuthUtil authUtil;
@Autowired
private VisualdevService visualdevService;
@Autowired
private VisualdevReleaseService visualdevReleaseService;
@Autowired
private VisualdevModelDataService visualdevModelDataService;
@Autowired
private OnlineSwapDataUtils onlineSwapDataUtils;
@Autowired
private VisualDevListService visualDevListService;
@Autowired
private VisualDevInfoService visualDevInfoService;
@Operation(summary = "获取外链信息" )
@Parameters({
@Parameter(name = "id" , description = "主键" ),
})
@GetMapping("/{id}" )
@SaCheckPermission("onlineDev.webDesign" )
public ActionResult getInfo(@PathVariable("id" ) String id) {
VisualdevShortLinkEntity info = visualdevShortLinkService.getById(id);
VisualdevShortLinkVo vo;
if (info != null) {
vo = JsonUtil.getJsonToBean(info, VisualdevShortLinkVo.class);
vo.setAlreadySave(true);
} else {
vo = new VisualdevShortLinkVo();
vo.setId(id);
}
vo.setFormLink(geturl(id, "form" ));
vo.setColumnLink(geturl(id, "list" ));
return ActionResult.success(vo);
}
/**
* 获取url
*
* @param
* @return
* @copyright 深圳市乐程软件有限公司
* @date 2023/3/9
*/
private String geturl(String id, String type) {
String url = configValueUtil.getApiDomain() + "/api/visualdev/ShortLink/trigger/" + id + "?encryption=";
UserInfo userInfo = UserProvider.getUser();
JSONObject obj = new JSONObject();
obj.put("type" , type);
if (configValueUtil.isMultiTenancy()) {
obj.put("tenantId" , userInfo.getTenantId());
}
//参数加密
String encryption = DesUtil.aesOrDecode(obj.toJSONString(), true,true);
url += encryption;
return url;
}
@Operation(summary = "修改外链信息" )
@PutMapping("" )
@SaCheckPermission("onlineDev.webDesign" )
public ActionResult saveOrupdate(@RequestBody VisualdevShortLinkForm data) {
VisualdevShortLinkEntity entity = JsonUtil.getJsonToBean(data, VisualdevShortLinkEntity.class);
if(entity.getFormLink().contains(configValueUtil.getApiDomain())){
entity.setFormLink(entity.getFormLink().replace(configValueUtil.getApiDomain(),""));
}
if(entity.getColumnLink().contains(configValueUtil.getApiDomain())){
entity.setColumnLink(entity.getColumnLink().replace(configValueUtil.getApiDomain(),""));
}
VisualdevShortLinkEntity info = visualdevShortLinkService.getById(data.getId());
UserInfo userInfo = UserProvider.getUser();
if (info != null) {
entity.setLastModifyTime(new Date());
entity.setLastModifyUserId(userInfo.getUserId());
} else {
entity.setCreatorTime(new Date());
entity.setCreatorUserId(userInfo.getUserId());
}
String pcLink = "/formShortLink";
String appLink ="/pages/formShortLink/index";
entity.setRealPcLink(pcLink);
entity.setRealAppLink(appLink);
entity.setUserId(userInfo.getUserId());
visualdevShortLinkService.saveOrUpdate(entity);
return ActionResult.success(MsgCode.SU002.get());
}
/**
* 参数解密切换数据源
*
* @param
* @return
* @copyright 深圳市乐程软件有限公司
* @date 2023/3/9
*/
private VisualdevShortLinkModel aesDecodeMatchDatabase(String encryption) throws LoginException {
//参数解密
String str = DesUtil.aesOrDecode(encryption, false,true);
if (StringUtil.isEmpty(str)) {
throw new LoginException(MsgCode.VS009.get());
}
VisualdevShortLinkModel model = JsonUtil.getJsonToBean(str, VisualdevShortLinkModel.class);
if (configValueUtil.isMultiTenancy()) {
if (StringUtil.isNotEmpty(model.getTenantId())) {
//切换成租户库
TenantDataSourceUtil.switchTenant(model.getTenantId());
} else {
throw new LoginException(MsgCode.LOG115.get());
}
}
return model;
}
@NoDataSourceBind
@Operation(summary = "外链请求入口" )
@Parameters({
@Parameter(name = "id" , description = "主键" ),
})
@GetMapping("/trigger/{id}" )
public ActionResult getlink(@PathVariable("id" ) String id,
@RequestParam(value = "encryption" ) String encryption,
HttpServletResponse response) throws LoginException, IOException {
VisualdevShortLinkModel model = aesDecodeMatchDatabase(encryption);
String link = "";
VisualdevShortLinkEntity entity = visualdevShortLinkService.getById(id);
DeviceType deviceType = UserProvider.getDeviceForAgent();
if (entity != null) {
if (DeviceType.PC.equals(deviceType)) {
link = configValueUtil.getFrontDomain() + entity.getRealPcLink();
} else {
link = configValueUtil.getAppDomain() + entity.getRealAppLink();
}
} else {
return ActionResult.fail(MsgCode.VS010.get());
}
JSONObject obj = new JSONObject();
obj.put("modelId" , id);
obj.put("type" , model.getType());
if (configValueUtil.isMultiTenancy()) {
obj.put("tenantId" , model.getTenantId());
}
//新链接参数加密
String encryptionNew = DesUtil.aesOrDecode(obj.toJSONString(), true,true);
link += "?encryption=" + encryptionNew;
// link += "&modelId=" + id;
response.sendRedirect(link);
return ActionResult.success(MsgCode.SU000.get());
}
@NoDataSourceBind
@Operation(summary = "获取外链配置" )
@Parameters({
@Parameter(name = "id" , description = "主键" ),
})
@GetMapping("/getConfig/{id}" )
public ActionResult getConfig(@PathVariable("id" ) String id, @RequestParam("encryption" ) String encryption) throws LoginException {
aesDecodeMatchDatabase(encryption);
VisualdevShortLinkEntity info = visualdevShortLinkService.getById(id);
VisualdevShortLinkConfigVo vo = JsonUtil.getJsonToBean(info, VisualdevShortLinkConfigVo.class);
vo.setFormLink(geturl(id, "form" ));
vo.setColumnLink(geturl(id, "list" ));
return ActionResult.success(vo);
}
@NoDataSourceBind
@Operation(summary = "密码验证" )
@PostMapping("/checkPwd" )
public ActionResult checkPwd(@RequestBody VisualdevShortLinkPwd form) throws LoginException {
//参数解密
VisualdevShortLinkModel model = aesDecodeMatchDatabase(form.getEncryption());
VisualdevShortLinkEntity info = visualdevShortLinkService.getById(form.getId());
boolean flag = false;
if (OnlineDevData.STATE_ENABLE.equals(info.getFormPassUse()) && 0 == form.getType()) {
if (Md5Util.getStringMd5(info.getFormPassword()).equals(form.getPassword())) {
flag = true;
}
} else if (OnlineDevData.STATE_ENABLE.equals(info.getColumnPassUse()) && 1 == form.getType()) {
if (Md5Util.getStringMd5(info.getColumnPassword()).equals(form.getPassword())) {
flag = true;
}
}
if (flag) {
return ActionResult.success();
}
return ActionResult.fail(MsgCode.VS011.get());
}
@NoDataSourceBind
@Operation(summary = "获取列表表单配置JSON" )
@GetMapping("/{modelId}/Config" )
public ActionResult getData(@PathVariable("modelId" ) String modelId, @RequestParam(value = "type" , required = false) String type,
@RequestParam("encryption" ) String encryption) throws WorkFlowException, LoginException {
aesDecodeMatchDatabase(encryption);
VisualdevEntity entity;
//线上版本
if ("0".equals(type)) {
entity = visualdevService.getInfo(modelId);
} else {
VisualdevReleaseEntity releaseEntity = visualdevReleaseService.getById(modelId);
entity = JsonUtil.getJsonToBean(releaseEntity, VisualdevEntity.class);
}
if (entity == null) {
return ActionResult.fail(MsgCode.VS012.get());
}
String s = VisualUtil.checkPublishVisualModel(entity, MsgCode.VS005.get());
if (s != null) {
return ActionResult.fail(s);
}
DataInfoVO vo = JsonUtil.getJsonToBean(entity, DataInfoVO.class);
return ActionResult.success(vo);
}
@NoDataSourceBind
@Operation(summary = "外链数据列表" )
@Parameters({
@Parameter(name = "modelId" , description = "模板id" ),
})
@PostMapping("/{modelId}/ListLink" )
public ActionResult ListLink(@PathVariable("modelId" ) String modelId, @RequestParam("encryption" ) String encryption,
@RequestBody PaginationModel paginationModel) throws WorkFlowException, LoginException {
aesDecodeMatchDatabase(encryption);
VisualdevReleaseEntity visualdevEntity = visualdevReleaseService.getById(modelId);
VisualDevJsonModel visualJsonModel = OnlinePublicUtils.getVisualJsonModel(visualdevEntity);
//判断请求客户端来源
if (!RequestContext.isOrignPc()) {
visualJsonModel.setColumnData(visualJsonModel.getAppColumnData());
}
List<Map<String, Object>> realList;
if (VisualWebTypeEnum.DATA_VIEW.getType().equals(visualdevEntity.getWebType())) {//
//数据视图的接口数据获取、
ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(visualdevEntity.getColumnData(), ColumnDataModel.class);
realList = onlineSwapDataUtils.getInterfaceData(visualdevEntity, paginationModel, columnDataModel);
} else {
realList = visualDevListService.getDataListLink(visualJsonModel, paginationModel);
}
PaginationVO paginationVO = JsonUtil.getJsonToBean(paginationModel, PaginationVO.class);
return ActionResult.page(realList, paginationVO);
}
@NoDataSourceBind
@Operation(summary = "获取数据信息(带转换数据)" )
@Parameters({
@Parameter(name = "modelId" , description = "模板id" ),
@Parameter(name = "id" , description = "数据id" ),
})
@GetMapping("/{modelId}/{id}/DataChange" )
public ActionResult infoWithDataChange(@PathVariable("modelId" ) String modelId, @PathVariable("id" ) String id,
@RequestParam("encryption" ) String encryption) throws DataException, ParseException, IOException, SQLException, LoginException {
aesDecodeMatchDatabase(encryption);
modelId = XSSEscape.escape(modelId);
id = XSSEscape.escape(id);
VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(modelId);
//有表
if (!StringUtil.isEmpty(visualdevEntity.getVisualTables()) && !OnlineDevData.TABLE_CONST.equals(visualdevEntity.getVisualTables())) {
VisualdevModelDataInfoVO vo = visualDevInfoService.getDetailsDataInfo(id, visualdevEntity);
return ActionResult.success(vo);
}
//无表
VisualdevModelDataInfoVO vo = visualdevModelDataService.infoDataChange(id, visualdevEntity);
return ActionResult.success(vo);
}
//**********以下微服务和单体不同
@NoDataSourceBind
@Operation(summary = "添加数据" )
@Parameters({
@Parameter(name = "modelId" , description = "模板id" ),
@Parameter(name = "visualdevModelDataCrForm" , description = "功能数据创建表单" ),
})
@PostMapping("/{modelId}" )
public ActionResult create(@PathVariable("modelId" ) String modelId, @RequestParam("encryption" ) String encryption,
@RequestBody VisualdevModelDataCrForm visualdevModelDataCrForm) throws WorkFlowException, LoginException {
VisualdevShortLinkModel visualdevShortLinkModel = aesDecodeMatchDatabase(encryption);
VisualdevShortLinkEntity info = visualdevShortLinkService.getById(modelId);
if (1 != info.getFormUse()) {
return ActionResult.fail(MsgCode.VS013.get());
}
String tenantId=visualdevShortLinkModel.getTenantId();
try {
if (configValueUtil.isMultiTenancy()) {
if (StringUtil.isNotEmpty(tenantId)) {
//切换成租户库
TenantDataSourceUtil.switchTenant(tenantId);
} else {
return ActionResult.fail(MsgCode.LOG115.get());
}
}
VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(modelId);
Map<String, Object> map = JsonUtil.stringToMap(visualdevModelDataCrForm.getData());
visualdevModelDataService.visualCreate(VisualParamModel.builder().visualdevEntity(visualdevEntity).data(map).isLink(true).build());
}catch (Exception e){
throw new WorkFlowException(e.getMessage(), e);
}
return ActionResult.success(MsgCode.SU001.get());
}
}