DatasourceController.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package com.xjrsoft.module.system.controller;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6. import com.github.yulichang.toolkit.MPJWrappers;
  7. import com.xjrsoft.common.constant.GlobalConstant;
  8. import com.xjrsoft.common.model.result.R;
  9. import com.xjrsoft.common.page.ConventPage;
  10. import com.xjrsoft.common.page.PageOutput;
  11. import com.xjrsoft.common.utils.VoToColumnUtil;
  12. import com.xjrsoft.module.organization.entity.User;
  13. import com.xjrsoft.module.system.dto.AddDatasourceDto;
  14. import com.xjrsoft.module.system.dto.DatasourcePageDto;
  15. import com.xjrsoft.module.system.dto.GetDataPageDto;
  16. import com.xjrsoft.module.system.dto.UpdateDatasourceDto;
  17. import com.xjrsoft.module.system.entity.Databaselink;
  18. import com.xjrsoft.module.system.entity.Datasource;
  19. import com.xjrsoft.module.system.service.IDatasourceService;
  20. import com.xjrsoft.module.system.vo.DatasourceListVo;
  21. import com.xjrsoft.module.system.vo.DatasourcePageVo;
  22. import com.xjrsoft.module.system.vo.DatasourceVo;
  23. import io.swagger.annotations.Api;
  24. import io.swagger.annotations.ApiOperation;
  25. import lombok.AllArgsConstructor;
  26. import org.springframework.web.bind.annotation.*;
  27. import javax.validation.Valid;
  28. import java.util.List;
  29. /**
  30. * <p>
  31. * 数据源表 前端控制器
  32. * </p>
  33. *
  34. * @author tzx
  35. * @since 2022-03-08
  36. */
  37. @RestController
  38. @RequestMapping(GlobalConstant.SYSTEM_MODULE_PREFIX + "/datasource")
  39. @Api(value = GlobalConstant.SYSTEM_MODULE_PREFIX + "/datasource", tags = "数据源")
  40. @AllArgsConstructor
  41. public class DatasourceController {
  42. private final IDatasourceService datasourceService;
  43. @GetMapping(value = "/list")
  44. @ApiOperation(value = "数据源列表(不分页)")
  45. public R list() {
  46. List<Datasource> list = datasourceService.list(Wrappers.lambdaQuery(Datasource.class)
  47. .select(Datasource.class, x -> VoToColumnUtil.fieldsToColumns(DatasourceListVo.class).contains(x.getProperty())));
  48. List<DatasourceListVo> datasourceListVos = BeanUtil.copyToList(list, DatasourceListVo.class);
  49. return R.ok(datasourceListVos);
  50. }
  51. @GetMapping(value = "/page")
  52. @ApiOperation(value = "数据源列表(分页)")
  53. public R page(@Valid DatasourcePageDto dto) {
  54. //因为多表关联 会有多个表都使用了id字段, 所以必须专门指定主表的Id
  55. IPage<DatasourcePageVo> page = datasourceService.selectJoinListPage(ConventPage.getPage(dto), DatasourcePageVo.class,
  56. MPJWrappers.<Datasource>lambdaJoin()
  57. .like(StrUtil.isNotBlank(dto.getKeyword()), Datasource::getName, dto.getKeyword())
  58. .or()
  59. .like(StrUtil.isNotBlank(dto.getKeyword()), Datasource::getCode, dto.getKeyword())
  60. .disableSubLogicDel()
  61. .select(Datasource::getId)
  62. .select(Datasource.class, x -> VoToColumnUtil.fieldsToColumns(DatasourcePageVo.class).contains(x.getProperty()))
  63. .selectAs(Databaselink::getDbName, DatasourcePageVo::getDbName)
  64. .leftJoin(Databaselink.class, Databaselink::getId, Datasource::getDatabaselinkId));
  65. PageOutput<DatasourcePageVo> pageOutput = ConventPage.getPageOutput(page);
  66. return R.ok(pageOutput);
  67. }
  68. @GetMapping(value = "/info")
  69. @ApiOperation(value = "根据id查询数据源信息")
  70. public R get(Long id) {
  71. Datasource datasource = datasourceService.getById(id);
  72. if (datasource == null) {
  73. R.error("找不到此数据源!");
  74. }
  75. return R.ok(BeanUtil.toBean(datasource, DatasourceVo.class));
  76. }
  77. @PostMapping
  78. @ApiOperation(value = "新增数据源")
  79. public R add(@Valid @RequestBody AddDatasourceDto dto) {
  80. long count = datasourceService.count(Wrappers.<Datasource>query().lambda().eq(Datasource::getName, dto.getName()).or().eq(Datasource::getCode, dto.getCode()));
  81. if (count > 0) {
  82. return R.error("数据源已经存在!");
  83. }
  84. Datasource datasource = BeanUtil.toBean(dto, Datasource.class);
  85. return R.ok(datasourceService.save(datasource));
  86. }
  87. @PutMapping
  88. @ApiOperation(value = "修改数据源")
  89. public R update(@Valid @RequestBody UpdateDatasourceDto dto) {
  90. long count = datasourceService.count(Wrappers.<Datasource>query().lambda()
  91. .eq(Datasource::getCode, dto.getCode())
  92. .ne(Datasource::getId, dto.getId()));
  93. if (count > 0) {
  94. return R.error("数据源编码已经存在!");
  95. }
  96. Datasource datasource = BeanUtil.toBean(dto, Datasource.class);
  97. return R.ok(datasourceService.updateById(datasource));
  98. }
  99. @DeleteMapping
  100. @ApiOperation(value = "批量删除数据源")
  101. public R delete(@Valid @RequestBody List<Long> ids) {
  102. return R.ok(datasourceService.removeByIds(ids));
  103. }
  104. @GetMapping("/column")
  105. @ApiOperation(value = "根据id获取sql所返回列")
  106. private R getColumns(@RequestParam Long id) {
  107. return R.ok(datasourceService.getColumns(id));
  108. }
  109. @GetMapping("/data")
  110. @ApiOperation(value = "根据id获取sql返回值 (不分页)")
  111. private R getData(@RequestParam Long id) {
  112. return R.ok(datasourceService.getData(id));
  113. }
  114. @GetMapping("/data/page")
  115. @ApiOperation(value = "根据id获取sql返回值 (分页)")
  116. private R getDataPage(@Valid GetDataPageDto dto) {
  117. return R.ok(datasourceService.getDataPage(dto));
  118. }
  119. }