ModuleDataAuthorizeLinkController.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package jnpf.base.controller;
  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import cn.dev33.satoken.annotation.SaMode;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import io.swagger.v3.oas.annotations.Operation;
  6. import io.swagger.v3.oas.annotations.Parameter;
  7. import io.swagger.v3.oas.annotations.Parameters;
  8. import io.swagger.v3.oas.annotations.tags.Tag;
  9. import jakarta.validation.Valid;
  10. import jnpf.base.ActionResult;
  11. import jnpf.base.Pagination;
  12. import jnpf.base.entity.ModuleDataAuthorizeLinkEntity;
  13. import jnpf.base.entity.ModuleEntity;
  14. import jnpf.base.model.dbtable.vo.DbFieldVO;
  15. import jnpf.base.model.module.PropertyJsonModel;
  16. import jnpf.base.model.moduledataauthorize.DataAuthorizeLinkForm;
  17. import jnpf.base.model.moduledataauthorize.DataAuthorizeTableNameVO;
  18. import jnpf.base.service.DbTableService;
  19. import jnpf.base.service.ModuleDataAuthorizeLinkDataService;
  20. import jnpf.base.service.ModuleService;
  21. import jnpf.base.vo.PaginationVO;
  22. import jnpf.constant.MsgCode;
  23. import jnpf.database.model.dbfield.DbFieldModel;
  24. import jnpf.model.visualJson.TableModel;
  25. import jnpf.util.*;
  26. import jnpf.util.context.SpringContext;
  27. import jnpf.workflow.service.TemplateApi;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.web.bind.annotation.*;
  30. import java.util.*;
  31. import java.util.stream.Collectors;
  32. /**
  33. * 数据权限字段管理 数据连接
  34. *
  35. * @author JNPF开发平台组
  36. * @version V3.4.2
  37. * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com)
  38. * @date 2022/6/7
  39. */
  40. @Tag(name = "数据权限字段管理数据连接", description = "ModuleDataAuthorizeLink")
  41. @RestController
  42. @RequestMapping("/api/system/ModuleDataAuthorizeLink")
  43. public class ModuleDataAuthorizeLinkController {
  44. @Autowired
  45. private ModuleDataAuthorizeLinkDataService linkDataService;
  46. @Autowired
  47. private ModuleService moduleService;
  48. @Autowired
  49. private DbTableService dbTableService;
  50. @Autowired
  51. private TemplateApi templateApi;
  52. /**
  53. * 页面参数
  54. *
  55. * @param linkForm 页面参数
  56. * @return
  57. */
  58. @Operation(summary = "保存编辑数据连接")
  59. @Parameters({
  60. @Parameter(name = "linkForm", description = "页面参数", required = true)
  61. })
  62. @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR)
  63. @PostMapping("/saveLinkData")
  64. public ActionResult saveLinkData(@RequestBody @Valid DataAuthorizeLinkForm linkForm) {
  65. ModuleDataAuthorizeLinkEntity linkDataEntity = JsonUtil.getJsonToBean(linkForm, ModuleDataAuthorizeLinkEntity.class);
  66. if (StringUtil.isEmpty(linkDataEntity.getId())) {
  67. linkDataEntity.setId(RandomUtil.uuId());
  68. linkDataService.save(linkDataEntity);
  69. return ActionResult.success(MsgCode.SU002.get());
  70. } else {
  71. linkDataService.updateById(linkDataEntity);
  72. return ActionResult.success(MsgCode.SU004.get());
  73. }
  74. }
  75. /**
  76. * 获取表名
  77. *
  78. * @param menuId 菜单id
  79. * @param type 分类
  80. * @return
  81. */
  82. @Operation(summary = "获取表名")
  83. @Parameters({
  84. @Parameter(name = "menuId", description = "菜单id", required = true),
  85. @Parameter(name = "type", description = "分类", required = true)
  86. })
  87. @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR)
  88. @GetMapping("/getVisualTables/{menuId}/{type}")
  89. public ActionResult<DataAuthorizeTableNameVO> getVisualTables(@PathVariable("menuId") String menuId, @PathVariable("type") Integer type) {
  90. ModuleEntity info = moduleService.getInfo(menuId);
  91. DataAuthorizeTableNameVO vo = null;
  92. if (ObjectUtil.isNotNull(info)) {
  93. PropertyJsonModel model = JsonUtil.getJsonToBean(info.getPropertyJson(), PropertyJsonModel.class);
  94. if (model == null) {
  95. model = new PropertyJsonModel();
  96. }
  97. //功能
  98. if (info.getType() == 3 || info.getType() == 9 || info.getType() == 11) {
  99. String formId = model.getModuleId();
  100. if (info.getType() == 9) {
  101. formId = templateApi.getFormByFlowId(model.getModuleId());
  102. }
  103. // 得到bean
  104. Object bean = SpringContext.getBean("visualdevServiceImpl");
  105. Object method = ReflectionUtil.invokeMethod(bean, "getInfo", new Class[]{String.class}, new Object[]{formId});
  106. Map<String, Object> map = JsonUtil.entityToMap(method);
  107. if (map != null) {
  108. List<TableModel> tables = JsonUtil.getJsonToList(String.valueOf(map.get("tables")), TableModel.class);
  109. List<String> collect = tables.stream().map(t -> t.getTable()).collect(Collectors.toList());
  110. vo = DataAuthorizeTableNameVO.builder().linkTables(collect).linkId(String.valueOf(map.get("dbLinkId"))).build();
  111. }
  112. } else {
  113. ModuleDataAuthorizeLinkEntity linkDataEntity = linkDataService.getLinkDataEntityByMenuId(menuId, type);
  114. String linkTables = linkDataEntity.getLinkTables();
  115. List<String> tables = StringUtil.isNotEmpty(linkTables) ? Arrays.asList(linkTables.split(",")) : new ArrayList<>();
  116. vo = DataAuthorizeTableNameVO.builder().linkTables(tables).linkId(linkDataEntity.getLinkId()).build();
  117. }
  118. }
  119. return ActionResult.success(vo);
  120. }
  121. /**
  122. * 数据连接信息
  123. *
  124. * @param menudId 菜单id
  125. * @param type 分类
  126. * @return
  127. */
  128. @Operation(summary = "数据连接信息")
  129. @Parameters({
  130. @Parameter(name = "menudId", description = "菜单id", required = true),
  131. @Parameter(name = "type", description = "分类", required = true)
  132. })
  133. @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR)
  134. @GetMapping("/getInfo/{menudId}/{type}")
  135. public ActionResult getInfo(@PathVariable("menudId") String menudId, @PathVariable("type") Integer type) {
  136. ModuleDataAuthorizeLinkEntity linkDataEntity = linkDataService.getLinkDataEntityByMenuId(menudId, type);
  137. DataAuthorizeLinkForm linkForm = JsonUtil.getJsonToBean(linkDataEntity, DataAuthorizeLinkForm.class);
  138. return ActionResult.success(linkForm);
  139. }
  140. /**
  141. * 表名获取数据表字段
  142. *
  143. * @param linkId 连接id
  144. * @param tableName 表名
  145. * @param menuType 菜单类型
  146. * @param dataType 数据类型
  147. * @param pagination 分页模型
  148. * @return
  149. * @throws Exception
  150. */
  151. @Operation(summary = "表名获取数据表字段")
  152. @Parameters({
  153. @Parameter(name = "linkId", description = "连接id", required = true),
  154. @Parameter(name = "tableName", description = "表名", required = true),
  155. @Parameter(name = "menuType", description = "菜单类型", required = true),
  156. @Parameter(name = "dataType", description = "数据类型", required = true)
  157. })
  158. @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR)
  159. @GetMapping("/{linkId}/Tables/{tableName}/Fields/{menuType}/{dataType}")
  160. public ActionResult getTableInfoByTableName(@PathVariable("linkId") String linkId, @PathVariable("tableName") String tableName, @PathVariable("menuType") Integer menuType, @PathVariable("dataType") Integer dataType, Pagination pagination) throws Exception {
  161. List<DbFieldModel> data = dbTableService.getFieldList(linkId, tableName);
  162. List<DbFieldVO> vos = JsonUtil.getJsonToList(data, DbFieldVO.class);
  163. if (StringUtil.isNotEmpty(pagination.getKeyword())) {
  164. vos = vos.stream().filter(vo -> {
  165. boolean ensure;
  166. String fieldName = vo.getFieldName();
  167. fieldName = Optional.ofNullable(fieldName).orElse("");
  168. ensure = fieldName.toLowerCase().contains(pagination.getKeyword().toLowerCase()) || vo.getField().toLowerCase().contains(pagination.getKeyword().toLowerCase());
  169. return ensure;
  170. }).collect(Collectors.toList());
  171. }
  172. List listPage = PageUtil.getListPage((int) pagination.getCurrentPage(), (int) pagination.getPageSize(), vos);
  173. PaginationVO paginationVO = JsonUtil.getJsonToBean(pagination, PaginationVO.class);
  174. paginationVO.setTotal(vos.size());
  175. return ActionResult.page(listPage, paginationVO);
  176. }
  177. }