Browse Source

feat(tenant): 添加权限数据规则方案管理功能

- 新增权限数据规则方案实体类 PermissionDataRuleSchema
- 创建权限数据规则方案服务接口和实现类
- 添加权限数据规则方案控制器提供增删改查接口
- 实现分页查询、按formId查询启用规则等功能
- 添加数据校验和业务逻辑验证机制
- 集成按钮权限校验功能
- 优化在线表单相关模型和控制器代码结构
feature/form-permission-control
chenchuchuan 3 weeks ago
parent
commit
9f5efe49e3
  1. 183
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/controller/PermissionDataRuleSchemaController.java
  2. 27
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dao/PermissionDataRuleSchemaMapper.java
  3. 24
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dao/mapper/PermissionDataRuleSchemaMapper.xml
  4. 131
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/model/PermissionDataRuleSchema.java
  5. 50
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/IPermissionDataRuleSchemaService.java
  6. 93
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/PermissionDataRuleSchemaServiceImpl.java
  7. 19
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/vo/PermissionDataRuleSchemaVo.java
  8. 3
      common/common-generator/src/main/java/apelet/common/generator/model/OnlCgreportItem.java
  9. 2
      common/common-generator/src/main/java/apelet/common/generator/model/OnlFormHead.java
  10. 22
      common/common-online/src/main/java/apelet/common/online/controller/OnlineFormController.java
  11. 76
      common/common-online/src/main/java/apelet/common/online/controller/OnlineOperationController.java
  12. 2
      common/common-online/src/main/java/apelet/common/online/service/impl/OnlineFormServiceImpl.java

183
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/controller/PermissionDataRuleSchemaController.java

@ -0,0 +1,183 @@
package apelet.tenantadmin.tenant.controller;
import apelet.common.core.annotation.MyRequestBody;
import apelet.common.core.constant.ErrorCodeEnum;
import apelet.common.core.object.CallResult;
import apelet.common.core.object.MyOrderParam;
import apelet.common.core.object.MyPageParam;
import apelet.common.core.object.ResponseResult;
import apelet.common.core.util.MyCommonUtil;
import apelet.common.core.util.MyPageUtil;
import apelet.common.core.validator.UpdateGroup;
import apelet.common.log.annotation.OperationLog;
import apelet.common.log.model.constant.SysOperationLogType;
import apelet.tenantadmin.tenant.model.PermissionDataRuleSchema;
import apelet.tenantadmin.tenant.service.IPermissionDataRuleSchemaService;
import com.github.pagehelper.page.PageMethod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.groups.Default;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* 权限数据规则方案表 控制器
*
* @author chenchuchuan
* @date 2026-07-15
*/
@RestController
@RequestMapping("/tenantadmin/tenant/permissionDataRuleSchema")
public class PermissionDataRuleSchemaController {
@Autowired
private IPermissionDataRuleSchemaService service;
// ========== 新增 ==========
/**
* 新增数据规则方案
*
* @param schema 新增的规则方案对象
* @return 新增后的规则方案对象
*/
@OperationLog(type = SysOperationLogType.ADD)
@PostMapping("/add")
public ResponseResult<?> add(@RequestBody PermissionDataRuleSchema schema) {
schema.setCreateTime(new Date());
// 1. 基础字段校验(@NotBlank / @NotNull)
String errorMessage = MyCommonUtil.getModelValidationError(schema);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
// 2. 业务校验:formId → 主表/单表,并填充 tableType
CallResult result = service.verifyRelatedData(schema);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
// 3. 保存
service.saveNew(schema);
return ResponseResult.success(schema);
}
// ========== 编辑(含启用/禁用) ==========
/**
* 更新数据规则方案含启用/禁用
*
* @param schema 更新的规则方案对象
* @return 应答结果
*/
@OperationLog(type = SysOperationLogType.UPDATE)
@PostMapping("/update")
public ResponseResult<?> update(@RequestBody PermissionDataRuleSchema schema) {
// 1. 基础校验(需校验 id 非空 + 其他必填字段)
String errorMessage = MyCommonUtil.getModelValidationError(schema, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
// 2. 检查数据是否存在
PermissionDataRuleSchema original = service.getById(schema.getId());
if (original == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST,
"数据验证失败,当前规则方案不存在,请刷新后重试!");
}
// 3. 业务校验:formId → 主表/单表,填充 tableType
CallResult result = service.verifyRelatedData(schema);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
// 4. 更新
schema.setUpdateTime(new Date());
if (!service.updateById(schema)) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success();
}
// ========== 删除(启用状态禁止删) ==========
/**
* 删除数据规则方案已启用的规则不允许删除
*
* @param id 主键ID
* @return 应答结果
*/
@OperationLog(type = SysOperationLogType.DELETE)
@PostMapping("/delete")
public ResponseResult<?> delete(@RequestBody Long id) {
if (MyCommonUtil.existBlankArgument(id)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
PermissionDataRuleSchema schema = service.getById(id);
if (schema == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
// 启用状态不允许删除
if (Objects.equals(schema.getStatus(), 1)) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED,
"该规则方案已启用,请先禁用后再删除!");
}
if (!service.removeById(id)) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success();
}
// ========== 分页列表 ==========
/**
* 分页查询数据规则方案列表
*
* @param filter 过滤条件支持 ruleCode/ruleName/status
* @param orderParam 排序参数
* @param pageParam 分页参数
* @return 分页结果
*/
@PostMapping("/list")
public ResponseResult<?> list(
@MyRequestBody PermissionDataRuleSchema filter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
List<PermissionDataRuleSchema> list = service.getListByFilter(
filter, MyOrderParam.buildOrderBy(orderParam, PermissionDataRuleSchema.class));
return ResponseResult.success(MyPageUtil.makeResponseData(
list, PermissionDataRuleSchema.INSTANCE));
}
// ========== 根据 formId 查询启用的规则(运行时用) ==========
/**
* 根据 formId 查询启用状态的数据规则方案运行时用
*
* @param formId 在线表ID
* @return 启用状态的规则方案列表
*/
@GetMapping("/listByFormId")
public ResponseResult<List<PermissionDataRuleSchema>> listByFormId(@RequestParam Long formId) {
if (MyCommonUtil.existBlankArgument(formId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
List<PermissionDataRuleSchema> list = service.listByFormId(formId);
return ResponseResult.success(list);
}
// ========== 查看详情 ==========
/**
* 查看数据规则方案详情
*
* @param id 主键ID
* @return 规则方案详情
*/
@GetMapping("/view")
public ResponseResult<PermissionDataRuleSchema> view(@RequestParam Long id) {
if (MyCommonUtil.existBlankArgument(id)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
PermissionDataRuleSchema schema = service.getById(id);
if (schema == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(schema);
}
}

27
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dao/PermissionDataRuleSchemaMapper.java

@ -0,0 +1,27 @@
package apelet.tenantadmin.tenant.dao;
import apelet.common.core.base.dao.BaseDaoMapper;
import apelet.tenantadmin.tenant.model.PermissionDataRuleSchema;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 权限数据规则方案表 Mapper 接口
*
* @author chenchuchuan
* @date 2026-07-15
*/
public interface PermissionDataRuleSchemaMapper extends BaseDaoMapper<PermissionDataRuleSchema> {
/**
* 分页条件查询支持 rule_code/rule_name/status 过滤 + 排序
*
* @param filter 过滤条件
* @param orderBy 排序语句
* @return 规则方案列表
*/
List<PermissionDataRuleSchema> getListByFilter(
@Param("filter") PermissionDataRuleSchema filter,
@Param("orderBy") String orderBy);
}

24
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dao/mapper/PermissionDataRuleSchemaMapper.xml

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="apelet.tenantadmin.tenant.dao.PermissionDataRuleSchemaMapper">
<select id="getListByFilter"
resultType="apelet.tenantadmin.tenant.model.PermissionDataRuleSchema">
SELECT * FROM zz_permission_data_rule_schema
WHERE 1=1
<if test="filter.ruleCode != null and filter.ruleCode != ''">
AND rule_code LIKE CONCAT('%', #{filter.ruleCode}, '%')
</if>
<if test="filter.ruleName != null and filter.ruleName != ''">
AND rule_name LIKE CONCAT('%', #{filter.ruleName}, '%')
</if>
<if test="filter.status != null">
AND status = #{filter.status}
</if>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
</mapper>

131
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/model/PermissionDataRuleSchema.java

@ -0,0 +1,131 @@
package apelet.tenantadmin.tenant.model;
import apelet.common.core.base.mapper.BaseModelMapper;
import apelet.common.core.base.model.BaseModel;
import apelet.common.core.validator.UpdateGroup;
import apelet.tenantadmin.tenant.vo.PermissionDataRuleSchemaVo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* 权限数据规则方案表 实体对象
*
* @author chenchuchuan
* @date 2026-07-15
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("zz_permission_data_rule_schema")
public class PermissionDataRuleSchema extends BaseModel implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
@NotNull(message = "数据验证失败,id不能为空!", groups = {UpdateGroup.class})
private Long id;
/**
* zz_online_table表Id
*/
@TableField(value = "form_id")
@NotNull(message = "数据验证失败,form_id不能为空!")
private Long formId;
/**
* 表单元数据编码
*/
@TableField(value = "meta_code")
// @NotBlank(message = "数据验证失败,表单元数据编码不能为空!")
private String metaCode;
/**
* 主表类型1-主表2-单表由后端自动填充前端无需传入
*/
@TableField(value = "table_type")
private Integer tableType;
/**
* 规则编码
*/
@TableField(value = "rule_code")
@NotBlank(message = "数据验证失败,规则编码不能为空!")
private String ruleCode;
/**
* 规则方案名称
*/
@TableField(value = "rule_name")
@NotBlank(message = "数据验证失败,规则方案名称不能为空!")
private String ruleName;
/**
* 条件表达式JSON
*/
@TableField(value = "condition_expression")
@NotBlank(message = "数据验证失败,条件表达式不能为空!")
private String conditionExpression;
/**
* 元数据展示名称
*/
@TableField(value = "meta_show_name")
private String metaShowName;
/**
* 状态1-启用0-禁用
*/
@TableField(value = "status")
private Integer status;
/**
* 备注
*/
@TableField(value = "remark")
private String remark;
/**
* 创建人
*/
@TableField(value = "create_by")
private String createBy;
/**
* 创建时间
*/
@TableField(value = "create_time")
private Date createTime;
/**
* 更新人
*/
@TableField(value = "update_by")
private String updateBy;
/**
* 更新时间
*/
@TableField(value = "update_time")
private Date updateTime;
// ========== MapStruct ==========
@Mapper
public interface PermissionDataRuleSchemaModelMapper
extends BaseModelMapper<PermissionDataRuleSchemaVo, PermissionDataRuleSchema> {
}
public static final PermissionDataRuleSchemaModelMapper INSTANCE =
Mappers.getMapper(PermissionDataRuleSchemaModelMapper.class);
}

50
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/IPermissionDataRuleSchemaService.java

@ -0,0 +1,50 @@
package apelet.tenantadmin.tenant.service;
import apelet.common.core.base.service.IBaseService;
import apelet.common.core.object.CallResult;
import apelet.tenantadmin.tenant.model.PermissionDataRuleSchema;
import java.util.List;
/**
* 权限数据规则方案表 服务接口
*
* @author chenchuchuan
* @date 2026-07-15
*/
public interface IPermissionDataRuleSchemaService
extends IBaseService<PermissionDataRuleSchema, Long> {
/**
* 分页条件查询规则方案列表
*
* @param filter 过滤条件
* @param orderBy 排序语句
* @return 规则方案列表
*/
List<PermissionDataRuleSchema> getListByFilter(PermissionDataRuleSchema filter, String orderBy);
/**
* 根据 tableId 查询启用状态的规则运行时用
*
* @param tableId 在线表ID
* @return 启用状态的规则列表
*/
List<PermissionDataRuleSchema> listByFormId(Long tableId);
/**
* 校验关联数据验证 tableId 对应的是主表或单表并自动填充 tableType
*
* @param schema 待校验的规则方案对象
* @return 校验结果
*/
CallResult verifyRelatedData(PermissionDataRuleSchema schema);
/**
* 保存新增 ID生成 + 默认状态设置
*
* @param schema 新增的规则方案对象
* @return 新增后的规则方案对象
*/
PermissionDataRuleSchema saveNew(PermissionDataRuleSchema schema);
}

93
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/PermissionDataRuleSchemaServiceImpl.java

@ -0,0 +1,93 @@
package apelet.tenantadmin.tenant.service.impl;
import apelet.common.core.base.dao.BaseDaoMapper;
import apelet.common.core.base.service.BaseService;
import apelet.common.core.object.CallResult;
import apelet.common.generator.model.OnlFormHead;
import apelet.common.generator.service.IOnlFormHeadService;
import apelet.common.sequence.wrapper.IdGeneratorWrapper;
import apelet.tenantadmin.tenant.dao.PermissionDataRuleSchemaMapper;
import apelet.tenantadmin.tenant.model.PermissionDataRuleSchema;
import apelet.tenantadmin.tenant.service.IPermissionDataRuleSchemaService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 权限数据规则方案表 服务实现类
*
* @author chenchuchuan
* @date 2026-07-15
*/
@Service
@Slf4j
public class PermissionDataRuleSchemaServiceImpl
extends BaseService<PermissionDataRuleSchema, Long>
implements IPermissionDataRuleSchemaService {
@Autowired
PermissionDataRuleSchemaMapper mapper;
@Autowired
private IdGeneratorWrapper idGenerator;
@Autowired
private IOnlFormHeadService onlFormHeadService;
// ========== BaseService 要求重写 ==========
@Override
protected BaseDaoMapper<PermissionDataRuleSchema> mapper() {
return mapper;
}
// ========== 分页查询 ==========
@Override
public List<PermissionDataRuleSchema> getListByFilter(
PermissionDataRuleSchema filter, String orderBy) {
return mapper.getListByFilter(filter, orderBy);
}
// ========== 按 tableId 查询启用状态的规则 ==========
@Override
public List<PermissionDataRuleSchema> listByFormId(Long formId) {
LambdaQueryWrapper<PermissionDataRuleSchema> qw = new LambdaQueryWrapper<>();
qw.eq(PermissionDataRuleSchema::getFormId, formId)
.eq(PermissionDataRuleSchema::getStatus, 1);
return this.list(qw);
}
// ========== 新增(含 ID生成 + 默认状态) ==========
@Override
public PermissionDataRuleSchema saveNew(PermissionDataRuleSchema schema) {
schema.setId(idGenerator.nextLongId());
if (schema.getStatus() == null) {
schema.setStatus(1);
}
this.save(schema);
return schema;
}
// ========== 核心校验: tableId → 主表/单表,自动填充 tableType ==========
@Override
public CallResult verifyRelatedData(PermissionDataRuleSchema schema) {
// 1. 通过 tableName 查询 onl_form_head 获取 tableType
OnlFormHead formHead = onlFormHeadService.getById(schema.getFormId());
if (formHead == null) {
return CallResult.error("数据验证失败,无法获取表类型信息,请检查表单配置!");
}
// 2. tableType 校验: 0=附表拒绝, 1=主表, 2=单表
String tableType = formHead.getTableType();
if (!"1".equals(tableType) && !"2".equals(tableType)) {
return CallResult.error("数据验证失败,仅主表和单表支持配置数据规则,当前为附表!");
}
// 3. 自动填充 tableType
schema.setTableType(Integer.valueOf(tableType));
return CallResult.ok();
}
}

19
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/vo/PermissionDataRuleSchemaVo.java

@ -0,0 +1,19 @@
package apelet.tenantadmin.tenant.vo;
import apelet.tenantadmin.tenant.model.PermissionDataRuleSchema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* 权限数据规则方案表 VO
*
* @author chenchuchuan
* @date 2026-07-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PermissionDataRuleSchemaVo extends PermissionDataRuleSchema implements Serializable {
private static final long serialVersionUID = 1L;
}

3
common/common-generator/src/main/java/apelet/common/generator/model/OnlCgreportItem.java

@ -56,6 +56,9 @@ public class OnlCgreportItem extends BaseModel implements Serializable {
@Schema(description = "是否显示 0否,1显示") @Schema(description = "是否显示 0否,1显示")
private Integer isShow; private Integer isShow;
@Schema(description = "是否下拉显示 0否,1显示")
private Integer isSelectShow;
@Schema(description = "排序") @Schema(description = "排序")
private Integer orderNum; private Integer orderNum;

2
common/common-generator/src/main/java/apelet/common/generator/model/OnlFormHead.java

@ -26,7 +26,7 @@ public class OnlFormHead extends BaseModel implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@TableId(value = "id") @TableId(value = "id")
private Long id; private Long id;
// 0 附表,1 主表,2单表
@Schema(description = "表类型") @Schema(description = "表类型")
private String tableType; private String tableType;

22
common/common-online/src/main/java/apelet/common/online/controller/OnlineFormController.java

@ -10,15 +10,13 @@ import apelet.common.core.util.MyCommonUtil;
import apelet.common.core.util.MyModelUtil; import apelet.common.core.util.MyModelUtil;
import apelet.common.core.util.MyPageUtil; import apelet.common.core.util.MyPageUtil;
import apelet.common.core.validator.UpdateGroup; import apelet.common.core.validator.UpdateGroup;
import apelet.common.dbutil.object.SqlTable;
import apelet.common.dbutil.object.SqlTableColumn;
import apelet.common.generator.model.OnlFormHead; import apelet.common.generator.model.OnlFormHead;
import apelet.common.generator.service.IOnlFormHeadService; import apelet.common.generator.service.IOnlFormHeadService;
import apelet.common.log.annotation.OperationLog; import apelet.common.log.annotation.OperationLog;
import apelet.common.log.model.constant.SysOperationLogType; import apelet.common.log.model.constant.SysOperationLogType;
import apelet.common.online.config.OnlineProperties; import apelet.common.online.config.OnlineProperties;
import apelet.common.online.dto.*;
import apelet.common.online.dto.OnlineEventPluginExecuteDto; import apelet.common.online.dto.OnlineEventPluginExecuteDto;
import apelet.common.online.dto.OnlineFormDto;
import apelet.common.online.model.*; import apelet.common.online.model.*;
import apelet.common.online.service.*; import apelet.common.online.service.*;
import apelet.common.online.util.OnlineRedisKeyUtil; import apelet.common.online.util.OnlineRedisKeyUtil;
@ -47,7 +45,6 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.groups.Default; import javax.validation.groups.Default;
import java.lang.reflect.Method;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -89,6 +86,9 @@ public class OnlineFormController {
@Resource(name = "caffeineCacheManager") @Resource(name = "caffeineCacheManager")
private CacheManager cacheManager; private CacheManager cacheManager;
@Autowired(required = false)
private FormButtonPermissionChecker buttonPermissionChecker;
/** /**
* 新增在线表单数据 * 新增在线表单数据
* *
@ -574,10 +574,22 @@ public class OnlineFormController {
@PostMapping("/eventPluginExecute") @PostMapping("/eventPluginExecute")
public ResponseResult<List<Object>> eventPluginExecute( public ResponseResult<List<Object>> eventPluginExecute(
@MyRequestBody OnlineEventPluginExecuteDto onlineEventPluginExecuteDto) { @MyRequestBody OnlineEventPluginExecuteDto onlineEventPluginExecuteDto) {
// //todo 暂时不开启 按钮权限校验
// if (buttonPermissionChecker != null) {
// Long formId = onlineEventPluginExecuteDto.getFormId();
// String buttonName = onlineEventPluginExecuteDto.getEventWidgetVariableName();
// if (formId != null && buttonName != null) {
// if (!buttonPermissionChecker.hasPermission(formId, buttonName)) {
// return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION,
// "当前角色无此按钮操作权限!");
// }
// }
// }
List<Object> eventPluginExecuteVoList = List<Object> eventPluginExecuteVoList =
onlineFormService.eventPluginExecute(onlineEventPluginExecuteDto); onlineFormService.eventPluginExecute(onlineEventPluginExecuteDto);
return ResponseResult.success(eventPluginExecuteVoList); return ResponseResult.success(eventPluginExecuteVoList);
// return ResponseResult.success(new ArrayList<>());
} }
private Long findNotExistDictId(Set<Long> originalDictIdSet, Set<Long> dictIdSet) { private Long findNotExistDictId(Set<Long> originalDictIdSet, Set<Long> dictIdSet) {

76
common/common-online/src/main/java/apelet/common/online/controller/OnlineOperationController.java

@ -1,54 +1,60 @@
package apelet.common.online.controller; package apelet.common.online.controller;
import apelet.common.core.upload.LocalUpDownloader;
import apelet.common.eas.service.impl.EASSyncService;
import apelet.common.generator.model.OnlFormField;
import apelet.common.generator.model.OnlFormHead;
import apelet.common.generator.service.IOnlFormFieldService;
import apelet.common.generator.service.IOnlFormHeadService;
import apelet.common.generator.utils.OrmGenDataSourceUtil;
import apelet.common.online.abstractplugin.ListDataEasService;
import apelet.common.online.abstractplugin.ListDataOrmService;
import apelet.common.online.abstractplugin.ListDataService;
import apelet.common.online.abstractplugin.model.ExportData;
import apelet.common.online.abstractplugin.model.GridData;
import apelet.common.online.dto.OnlineEventPluginExecuteDto;
import apelet.common.online.dto.OnlinePluginExecuteDto;
import apelet.common.online.model.constant.*;
import apelet.common.online.vo.OnlineEventPluginExecuteVo;
import apelet.common.orm.impl.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.tags.Tag;
import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import apelet.common.core.annotation.MyRequestBody; import apelet.common.core.annotation.MyRequestBody;
import apelet.common.core.constant.DictType; import apelet.common.core.constant.DictType;
import apelet.common.core.constant.ErrorCodeEnum; import apelet.common.core.constant.ErrorCodeEnum;
import apelet.common.core.constant.ObjectFieldType; import apelet.common.core.constant.ObjectFieldType;
import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.exception.MyRuntimeException;
import apelet.common.core.object.*; import apelet.common.core.object.*;
import apelet.common.core.upload.LocalUpDownloader;
import apelet.common.core.util.*; import apelet.common.core.util.*;
import apelet.common.dict.model.GlobalDictItem; import apelet.common.dict.model.GlobalDictItem;
import apelet.common.dict.model.TenantGlobalDict; import apelet.common.dict.model.TenantGlobalDict;
import apelet.common.dict.model.TenantGlobalDictItem; import apelet.common.dict.model.TenantGlobalDictItem;
import apelet.common.dict.service.GlobalDictService; import apelet.common.dict.service.GlobalDictService;
import apelet.common.dict.service.TenantGlobalDictService; import apelet.common.dict.service.TenantGlobalDictService;
import apelet.common.eas.service.impl.EASSyncService;
import apelet.common.generator.model.OnlFormField;
import apelet.common.generator.model.OnlFormHead;
import apelet.common.generator.service.IOnlFormFieldService;
import apelet.common.generator.service.IOnlFormHeadService;
import apelet.common.generator.utils.OrmGenDataSourceUtil;
import apelet.common.log.annotation.OperationLog; import apelet.common.log.annotation.OperationLog;
import apelet.common.log.model.constant.SysOperationLogType; import apelet.common.log.model.constant.SysOperationLogType;
import apelet.common.online.abstractplugin.ListDataEasService;
import apelet.common.online.abstractplugin.ListDataOrmService;
import apelet.common.online.abstractplugin.ListDataService;
import apelet.common.online.abstractplugin.model.ExportData;
import apelet.common.online.abstractplugin.model.GridData;
import apelet.common.online.config.OnlineProperties; import apelet.common.online.config.OnlineProperties;
import apelet.common.online.dto.OnlineEventPluginExecuteDto;
import apelet.common.online.dto.OnlineFilterDto; import apelet.common.online.dto.OnlineFilterDto;
import apelet.common.online.dto.OnlinePluginExecuteDto;
import apelet.common.online.exception.OnlineRuntimeException; import apelet.common.online.exception.OnlineRuntimeException;
import apelet.common.online.model.*; import apelet.common.online.model.*;
import apelet.common.online.model.constant.EventEnum;
import apelet.common.online.model.constant.FieldFilterType;
import apelet.common.online.model.constant.FieldKind;
import apelet.common.online.model.constant.RelationType;
import apelet.common.online.service.*; import apelet.common.online.service.*;
import apelet.common.online.util.OnlineConstant; import apelet.common.online.util.OnlineConstant;
import apelet.common.online.util.OnlineOperationHelper; import apelet.common.online.util.OnlineOperationHelper;
import apelet.common.online.vo.OnlineEventPluginExecuteVo;
import apelet.common.orm.impl.*;
import apelet.common.redis.cache.SessionCacheHelper; import apelet.common.redis.cache.SessionCacheHelper;
import apelet.common.redis.util.CommonRedisUtil; import apelet.common.redis.util.CommonRedisUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -59,7 +65,8 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.*; import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -113,6 +120,9 @@ public class OnlineOperationController {
@Autowired @Autowired
private OnlineDblinkService onlineDblinkService; private OnlineDblinkService onlineDblinkService;
@Autowired(required = false)
private FormButtonPermissionChecker buttonPermissionChecker;
/** /**
* 执行功能插件 * 执行功能插件
* *
@ -127,6 +137,18 @@ public class OnlineOperationController {
@MyRequestBody JSONObject masterData, @MyRequestBody JSONObject masterData,
@MyRequestBody JSONObject slaveData) { @MyRequestBody JSONObject slaveData) {
// //todo 暂时不开启 按钮权限校验
// if (buttonPermissionChecker != null) {
// Long formId = onlinePluginExecuteDto.getFormId();
// String buttonName = onlinePluginExecuteDto.getButtonName();
// if (formId != null && buttonName != null) {
// if (!buttonPermissionChecker.hasPermission(formId, buttonName)) {
// return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION,
// "当前角色无此按钮操作权限!");
// }
// }
// }
return ResponseResult.success(onlineOperationService.executePlugin(onlinePluginExecuteDto, masterData, slaveData)); return ResponseResult.success(onlineOperationService.executePlugin(onlinePluginExecuteDto, masterData, slaveData));
} }

2
common/common-online/src/main/java/apelet/common/online/service/impl/OnlineFormServiceImpl.java

@ -35,7 +35,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.redisson.api.RBucket; import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
@ -358,6 +357,7 @@ public class OnlineFormServiceImpl extends BaseService<OnlineForm, Long> impleme
return pluginResult; return pluginResult;
} }
try { try {
//todo 这里要写 数据权限那块
JSONObject jsonObject = JSONObject.parseObject(onlineForm.getWidgetJson()); JSONObject jsonObject = JSONObject.parseObject(onlineForm.getWidgetJson());
String deviceType = AppDeviceType.getDeviceType(); String deviceType = AppDeviceType.getDeviceType();
JSONArray jsonArray = jsonObject.getJSONObject(deviceType).getJSONArray("pluginList"); JSONArray jsonArray = jsonObject.getJSONObject(deviceType).getJSONArray("pluginList");

Loading…
Cancel
Save