添加"客户端管理"模块

This commit is contained in:
dataprince 2024-01-02 19:50:08 +08:00
parent 6e9d42088b
commit a2e904d1f2
8 changed files with 240 additions and 61 deletions

View File

@ -88,14 +88,14 @@ Ruoyi-Flex实行前后端分离仓库本项目是java后端部分前端项
## 7、Ruoyi-Flex交流群 ## 7、Ruoyi-Flex交流群
本软件完全开源,作者很忙,如果您在使用过程中遇到问题,请付点小费(扫码微信支付199元后申请加入微信群寻求帮助 本软件完全开源作者很忙如果您在使用过程中遇到问题请付点小费扫码微信支付99元后申请加入微信群寻求帮助
<table> <table>
<tr> <tr>
<td>1、免费QQ交流群</td> <td>1、免费QQ交流群</td>
<td>762217712[交流1群]</td> <td>762217712[交流1群]</td>
</tr> </tr>
<tr> <tr>
<td>2、付费微信交流群</td> <td>2、付费微信VIP群微信扫码支付99元加好友入群</td>
<td><img src="https://gitee.com/dataprince/ruoyi-flex/raw/master/image/dataprince.jpg"/></td> <td><img src="https://gitee.com/dataprince/ruoyi-flex/raw/master/image/dataprince.jpg"/></td>
</tr> </tr>
</table> </table>

View File

@ -65,8 +65,4 @@ public class MyBatisFlexConfig implements ConfigurationCustomizer, MyBatisFlexCu
AuditManager.setMessageCollector(new ConsoleMessageCollector()); AuditManager.setMessageCollector(new ConsoleMessageCollector());
} }
//TODO:动态表名
//TODO:多租户配置
} }

View File

@ -1,7 +1,20 @@
package com.ruoyi.system.controller.system; package com.ruoyi.system.controller.system;
import com.mybatisflex.core.paginate.Page; import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.core.core.domain.R;
import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.orm.core.page.TableDataInfo;
import com.ruoyi.common.web.annotation.RepeatSubmit;
import com.ruoyi.system.domain.bo.SysClientBo;
import com.ruoyi.system.domain.vo.SysClientVo;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
@ -10,92 +23,114 @@ import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.system.service.ISysClientService; import com.ruoyi.system.service.ISysClientService;
import com.ruoyi.system.domain.SysClient;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.io.Serializable;
import java.util.List; import java.util.List;
/** /**
* 系统授权表 控制层 * 系统授权表 控制层
* *
* @author mybatis-flex-helper automatic generation * @author 数据小王子
* @since 1.0
*/ */
@Validated
@RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/sysClient") @RequestMapping("/system/client")
public class SysClientController { public class SysClientController {
@Resource @Resource
private ISysClientService sysClientService; private ISysClientService sysClientService;
/** /**
* 添加 系统授权表 * 查询客户端管理列表
*
* @param sysClient 系统授权表
* @return {@code true} 添加成功{@code false} 添加失败
*/ */
@PostMapping("/save") @SaCheckPermission("system:client:list")
public boolean save(@RequestBody SysClient sysClient) { @GetMapping("/list")
return sysClientService.save(sysClient); public TableDataInfo<SysClientVo> list(SysClientBo sysClientBo) {
return sysClientService.selectPage(sysClientBo);
} }
/**
* 导出客户端管理列表
*/
@SaCheckPermission("system:client:export")
@Log(title = "客户端管理", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysClientBo sysClientBo, HttpServletResponse response) {
List<SysClientVo> list = sysClientService.selectList(sysClientBo);
ExcelUtil.exportExcel(list, "客户端管理", SysClientVo.class, response);
}
/** /**
* 根据主键删除系统授权表 * 获取客户端管理详细信息
* *
* @param id 主键 * @param id 主键
* @return {@code true} 删除成功{@code false} 删除失败
*/ */
@DeleteMapping("/remove/{id}") @SaCheckPermission("system:client:query")
public boolean remove(@PathVariable Serializable id) { @GetMapping("/{id}")
return sysClientService.removeById(id); public R<SysClientVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(sysClientService.selectById(id));
} }
/** /**
* 根据主键更新系统授权表 * 新增客户端管理
*
* @param sysClient 系统授权表
* @return {@code true} 更新成功{@code false} 更新失败
*/ */
@PutMapping("/update") @SaCheckPermission("system:client:add")
public boolean update(@RequestBody SysClient sysClient) { @Log(title = "客户端管理", businessType = BusinessType.INSERT)
return sysClientService.updateById(sysClient); @RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated @RequestBody SysClientBo sysClientBo) {
boolean inserted = sysClientService.insert(sysClientBo);
if (!inserted) {
return R.fail("新增客户端管理记录失败!");
}
return R.ok();
} }
/** /**
* 查询所有系统授权表 * 修改客户端管理
*
* @return 所有数据
*/ */
@GetMapping("/list") @SaCheckPermission("system:client:edit")
public List<SysClient> list() { @Log(title = "客户端管理", businessType = BusinessType.UPDATE)
return sysClientService.list(); @RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated @RequestBody SysClientBo sysClientBo) {
Boolean updated = sysClientService.update(sysClientBo);
if (!updated) {
R.fail("修改客户端管理记录失败!");
}
return R.ok();
} }
/** /**
* 根据系统授权表主键获取详细信息 * 状态修改
*
* @param id sysClient主键
* @return 系统授权表详情
*/ */
@GetMapping("/getInfo/{id}") @SaCheckPermission("system:client:edit")
public SysClient getInfo(@PathVariable Serializable id) { @Log(title = "客户端管理", businessType = BusinessType.UPDATE)
return sysClientService.getById(id); @PutMapping("/changeStatus")
public R<Void> changeStatus(@RequestBody SysClientBo sysClientBo) {
Boolean updated = sysClientService.updateStatus(sysClientBo.getId(),sysClientBo.getStatus());
if (!updated) {
R.fail("修改客户端管理状态失败!");
}
return R.ok();
} }
/** /**
* 分页查询系统授权表 * 删除客户端管理
* *
* @param page 分页对象 * @param ids 主键串
* @return 分页对象
*/ */
@GetMapping("/page") @SaCheckPermission("system:client:remove")
public Page<SysClient> page(Page<SysClient> page) { @Log(title = "客户端管理", businessType = BusinessType.DELETE)
return sysClientService.page(page); @DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
boolean deleted = sysClientService.deleteByIds(List.of(ids));
if (!deleted) {
R.fail("删除客户端管理记录失败!");
}
return R.ok();
} }
} }

View File

@ -1,11 +1,8 @@
package com.ruoyi.system.domain; package com.ruoyi.system.domain;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table; import com.mybatisflex.annotation.Table;
import com.ruoyi.common.orm.core.domain.BaseEntity; import com.ruoyi.common.orm.core.domain.BaseEntity;
import com.ruoyi.common.orm.listener.EntityInsertListener;
import com.ruoyi.common.orm.listener.EntityUpdateListener;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -27,7 +24,7 @@ public class SysClient extends BaseEntity {
/** /**
* id * id
*/ */
@Id() @Id
private Long id; private Long id;
/** /**
@ -71,9 +68,8 @@ public class SysClient extends BaseEntity {
private String status; private String status;
/** /**
* 删除标志0代表存在 1代表删除 * 删除标志0代表存在 1代表删除
*/ */
@Column(isLogicDelete = true)
private Integer delFlag; private Integer delFlag;

View File

@ -1,5 +1,6 @@
package com.ruoyi.system.domain; package com.ruoyi.system.domain;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table; import com.mybatisflex.annotation.Table;
import lombok.Data; import lombok.Data;
@ -22,6 +23,12 @@ public class SysConfig extends BaseEntity
@Id @Id
private Long configId; private Long configId;
/**
* 租户编号
*/
@Column(tenantId = true)
private Long tenantId;
/** 参数名称 */ /** 参数名称 */
private String configName; private String configName;

View File

@ -54,7 +54,7 @@ public class SysClientVo implements Serializable {
/** /**
* 授权类型 * 授权类型
*/ */
@ExcelProperty(value = "授权类型") //@ExcelProperty(value = "授权类型")
private List<String> grantTypeList; private List<String> grantTypeList;
/** /**

View File

@ -1,8 +1,15 @@
package com.ruoyi.system.service; package com.ruoyi.system.service;
import com.ruoyi.common.orm.core.page.PageQuery;
import com.ruoyi.common.orm.core.page.TableDataInfo;
import com.ruoyi.system.domain.SysClient; import com.ruoyi.system.domain.SysClient;
import com.mybatisflex.core.service.IService; import com.mybatisflex.core.service.IService;
import com.ruoyi.system.domain.bo.SysClientBo;
import com.ruoyi.system.domain.vo.SysClientVo;
import java.util.Collection;
import java.util.List;
/** /**
* 系统授权表 服务层 * 系统授权表 服务层
@ -11,5 +18,43 @@ import com.mybatisflex.core.service.IService;
* @since 1.0 * @since 1.0
*/ */
public interface ISysClientService extends IService<SysClient> { public interface ISysClientService extends IService<SysClient> {
/**
* 查询客户端管理
*/
SysClientVo selectById(Long id);
/**
* 查询客户端信息基于客户端id
*/
SysClient selectByClientId(String clientId);
/**
* 查询客户端管理列表
*/
TableDataInfo<SysClientVo> selectPage(SysClientBo sysClientBo);
/**
* 查询客户端管理列表
*/
List<SysClientVo> selectList(SysClientBo sysClientBo);
/**
* 新增客户端管理
*/
Boolean insert(SysClientBo sysClientBo);
/**
* 修改客户端管理
*/
Boolean update(SysClientBo sysClientBo);
/**
* 修改状态
*/
boolean updateStatus(Long id, String status);
/**
* 校验并批量删除客户端管理信息
*/
Boolean deleteByIds(Collection<Long> ids);
} }

View File

@ -1,12 +1,27 @@
package com.ruoyi.system.service.impl; package com.ruoyi.system.service.impl;
import cn.hutool.crypto.SecureUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.util.UpdateEntity;
import com.ruoyi.common.core.utils.MapstructUtils;
import com.ruoyi.common.orm.core.page.PageQuery;
import com.ruoyi.common.orm.core.page.TableDataInfo;
import com.ruoyi.system.domain.bo.SysClientBo;
import com.ruoyi.system.domain.vo.SysClientVo;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.system.service.ISysClientService; import com.ruoyi.system.service.ISysClientService;
import com.ruoyi.system.domain.SysClient; import com.ruoyi.system.domain.SysClient;
import com.ruoyi.system.mapper.SysClientMapper; import com.ruoyi.system.mapper.SysClientMapper;
import com.mybatisflex.spring.service.impl.ServiceImpl; import com.mybatisflex.spring.service.impl.ServiceImpl;
import java.util.Collection;
import java.util.List;
import static com.ruoyi.system.domain.table.SysClientTableDef.SYS_CLIENT;
/** /**
* 系统授权表 服务层实现 * 系统授权表 服务层实现
* *
@ -15,4 +30,89 @@ import com.mybatisflex.spring.service.impl.ServiceImpl;
@Service @Service
public class SysClientServiceImpl extends ServiceImpl<SysClientMapper, SysClient> implements ISysClientService { public class SysClientServiceImpl extends ServiceImpl<SysClientMapper, SysClient> implements ISysClientService {
@Resource
private SysClientMapper clientMapper;
@Override
public QueryWrapper query() {
return super.query().from(SYS_CLIENT);
}
private QueryWrapper buildQueryWrapper(SysClientBo bo) {
return query()
.where(SYS_CLIENT.CLIENT_ID.eq(bo.getClientId()))
.and(SYS_CLIENT.CLIENT_KEY.eq(bo.getClientKey()))
.and(SYS_CLIENT.CLIENT_SECRET.eq(bo.getClientSecret()))
.and(SYS_CLIENT.STATUS.eq(bo.getStatus()))
.orderBy(SYS_CLIENT.ID, true);
}
@Override
public SysClientVo selectById(Long id) {
SysClientVo sysClientVo = this.getOneAs(query().where(SYS_CLIENT.ID.eq(id)), SysClientVo.class);
sysClientVo.setGrantTypeList(List.of(sysClientVo.getGrantType().split(",")));
return sysClientVo;
}
@Override
public SysClient selectByClientId(String clientId) {
return this.getOne(query().where(SYS_CLIENT.CLIENT_ID.eq(clientId)));
}
@Override
public TableDataInfo<SysClientVo> selectPage(SysClientBo sysClientBo) {
QueryWrapper queryWrapper = buildQueryWrapper(sysClientBo);
Page<SysClientVo> page = this.pageAs(PageQuery.build(), queryWrapper, SysClientVo.class);
page.getRecords().forEach(r -> r.setGrantTypeList(List.of(r.getGrantType().split(","))));
return TableDataInfo.build(page);
}
@Override
public List<SysClientVo> selectList(SysClientBo sysClientBo) {
QueryWrapper queryWrapper = buildQueryWrapper(sysClientBo);
List<SysClientVo> list = this.listAs(queryWrapper, SysClientVo.class);
list.forEach(r -> r.setGrantTypeList(List.of(r.getGrantType().split(","))));
return list;
}
/**
* 新增客户端管理
*/
@Override
public Boolean insert(SysClientBo sysClientBo) {
SysClient sysClient = MapstructUtils.convert(sysClientBo, SysClient.class);
sysClient.setGrantType(String.join(",", sysClientBo.getGrantTypeList()));
// 生成clientId
String clientKey = sysClientBo.getClientKey();
String clientSecret = sysClientBo.getClientSecret();
sysClient.setClientId(SecureUtil.md5(clientKey + clientSecret));
return this.save(sysClient);
}
/**
* 修改客户端管理
*/
@Override
public Boolean update(SysClientBo sysClientBo) {
SysClient sysClient = MapstructUtils.convert(sysClientBo, SysClient.class);
sysClient.setGrantType(String.join(",", sysClientBo.getGrantTypeList()));
return this.updateById(sysClient);
}
/**
* 修改状态
*/
@Override
public boolean updateStatus(Long id, String status) {
SysClient sysClient = UpdateEntity.of(SysClient.class, id);
sysClient.setStatus(status);
return clientMapper.update(sysClient) > 0;
}
/**
* 批量删除客户端管理
*/
@Override
public Boolean deleteByIds(Collection<Long> ids) {
return this.removeByIds(ids);
}
} }