package com.xjrsoft.module.system.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.yulichang.toolkit.MPJWrappers; import com.xjrsoft.common.constant.GlobalConstant; import com.xjrsoft.common.model.result.R; import com.xjrsoft.common.page.ConventPage; import com.xjrsoft.common.page.PageOutput; import com.xjrsoft.common.utils.VoToColumnUtil; import com.xjrsoft.module.organization.entity.User; import com.xjrsoft.module.system.dto.AddDatasourceDto; import com.xjrsoft.module.system.dto.DatasourcePageDto; import com.xjrsoft.module.system.dto.GetDataPageDto; import com.xjrsoft.module.system.dto.UpdateDatasourceDto; import com.xjrsoft.module.system.entity.Databaselink; import com.xjrsoft.module.system.entity.Datasource; import com.xjrsoft.module.system.service.IDatasourceService; import com.xjrsoft.module.system.vo.DatasourceListVo; import com.xjrsoft.module.system.vo.DatasourcePageVo; import com.xjrsoft.module.system.vo.DatasourceVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; /** *

* 数据源表 前端控制器 *

* * @author tzx * @since 2022-03-08 */ @RestController @RequestMapping(GlobalConstant.SYSTEM_MODULE_PREFIX + "/datasource") @Api(value = GlobalConstant.SYSTEM_MODULE_PREFIX + "/datasource", tags = "数据源") @AllArgsConstructor public class DatasourceController { private final IDatasourceService datasourceService; @GetMapping(value = "/list") @ApiOperation(value = "数据源列表(不分页)") public R list() { List list = datasourceService.list(Wrappers.lambdaQuery(Datasource.class) .select(Datasource.class, x -> VoToColumnUtil.fieldsToColumns(DatasourceListVo.class).contains(x.getProperty()))); List datasourceListVos = BeanUtil.copyToList(list, DatasourceListVo.class); return R.ok(datasourceListVos); } @GetMapping(value = "/page") @ApiOperation(value = "数据源列表(分页)") public R page(@Valid DatasourcePageDto dto) { //因为多表关联 会有多个表都使用了id字段, 所以必须专门指定主表的Id IPage page = datasourceService.selectJoinListPage(ConventPage.getPage(dto), DatasourcePageVo.class, MPJWrappers.lambdaJoin() .like(StrUtil.isNotBlank(dto.getKeyword()), Datasource::getName, dto.getKeyword()) .or() .like(StrUtil.isNotBlank(dto.getKeyword()), Datasource::getCode, dto.getKeyword()) .disableSubLogicDel() .select(Datasource::getId) .select(Datasource.class, x -> VoToColumnUtil.fieldsToColumns(DatasourcePageVo.class).contains(x.getProperty())) .selectAs(Databaselink::getDbName, DatasourcePageVo::getDbName) .leftJoin(Databaselink.class, Databaselink::getId, Datasource::getDatabaselinkId)); PageOutput pageOutput = ConventPage.getPageOutput(page); return R.ok(pageOutput); } @GetMapping(value = "/info") @ApiOperation(value = "根据id查询数据源信息") public R get(Long id) { Datasource datasource = datasourceService.getById(id); if (datasource == null) { R.error("找不到此数据源!"); } return R.ok(BeanUtil.toBean(datasource, DatasourceVo.class)); } @PostMapping @ApiOperation(value = "新增数据源") public R add(@Valid @RequestBody AddDatasourceDto dto) { long count = datasourceService.count(Wrappers.query().lambda().eq(Datasource::getName, dto.getName()).or().eq(Datasource::getCode, dto.getCode())); if (count > 0) { return R.error("数据源已经存在!"); } Datasource datasource = BeanUtil.toBean(dto, Datasource.class); return R.ok(datasourceService.save(datasource)); } @PutMapping @ApiOperation(value = "修改数据源") public R update(@Valid @RequestBody UpdateDatasourceDto dto) { long count = datasourceService.count(Wrappers.query().lambda() .eq(Datasource::getCode, dto.getCode()) .ne(Datasource::getId, dto.getId())); if (count > 0) { return R.error("数据源编码已经存在!"); } Datasource datasource = BeanUtil.toBean(dto, Datasource.class); return R.ok(datasourceService.updateById(datasource)); } @DeleteMapping @ApiOperation(value = "批量删除数据源") public R delete(@Valid @RequestBody List ids) { return R.ok(datasourceService.removeByIds(ids)); } @GetMapping("/column") @ApiOperation(value = "根据id获取sql所返回列") private R getColumns(@RequestParam Long id) { return R.ok(datasourceService.getColumns(id)); } @GetMapping("/data") @ApiOperation(value = "根据id获取sql返回值 (不分页)") private R getData(@RequestParam Long id) { return R.ok(datasourceService.getData(id)); } @GetMapping("/data/page") @ApiOperation(value = "根据id获取sql返回值 (分页)") private R getDataPage(@Valid GetDataPageDto dto) { return R.ok(datasourceService.getDataPage(dto)); } }