初始代码
This commit is contained in:
@@ -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>
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user