diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/controller/PermissionDataRuleSchemaController.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/controller/PermissionDataRuleSchemaController.java new file mode 100644 index 0000000..0309a30 --- /dev/null +++ b/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 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> listByFormId(@RequestParam Long formId) { + if (MyCommonUtil.existBlankArgument(formId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + List list = service.listByFormId(formId); + return ResponseResult.success(list); + } + + // ========== 查看详情 ========== + /** + * 查看数据规则方案详情。 + * + * @param id 主键ID。 + * @return 规则方案详情。 + */ + @GetMapping("/view") + public ResponseResult 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); + } +} diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dao/PermissionDataRuleSchemaMapper.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dao/PermissionDataRuleSchemaMapper.java new file mode 100644 index 0000000..528138a --- /dev/null +++ b/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 { + + /** + * 分页条件查询(支持 rule_code/rule_name/status 过滤 + 排序)。 + * + * @param filter 过滤条件。 + * @param orderBy 排序语句。 + * @return 规则方案列表。 + */ + List getListByFilter( + @Param("filter") PermissionDataRuleSchema filter, + @Param("orderBy") String orderBy); +} diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dao/mapper/PermissionDataRuleSchemaMapper.xml b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dao/mapper/PermissionDataRuleSchemaMapper.xml new file mode 100644 index 0000000..55a38bb --- /dev/null +++ b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dao/mapper/PermissionDataRuleSchemaMapper.xml @@ -0,0 +1,24 @@ + + + + + + + diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/model/PermissionDataRuleSchema.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/model/PermissionDataRuleSchema.java new file mode 100644 index 0000000..7a6f07d --- /dev/null +++ b/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 { + } + + public static final PermissionDataRuleSchemaModelMapper INSTANCE = + Mappers.getMapper(PermissionDataRuleSchemaModelMapper.class); +} diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/IPermissionDataRuleSchemaService.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/IPermissionDataRuleSchemaService.java new file mode 100644 index 0000000..978aed0 --- /dev/null +++ b/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 { + + /** + * 分页条件查询规则方案列表。 + * + * @param filter 过滤条件。 + * @param orderBy 排序语句。 + * @return 规则方案列表。 + */ + List getListByFilter(PermissionDataRuleSchema filter, String orderBy); + + /** + * 根据 tableId 查询启用状态的规则(运行时用)。 + * + * @param tableId 在线表ID。 + * @return 启用状态的规则列表。 + */ + List listByFormId(Long tableId); + + /** + * 校验关联数据:验证 tableId 对应的是主表或单表,并自动填充 tableType。 + * + * @param schema 待校验的规则方案对象。 + * @return 校验结果。 + */ + CallResult verifyRelatedData(PermissionDataRuleSchema schema); + + /** + * 保存新增(含 ID生成 + 默认状态设置)。 + * + * @param schema 新增的规则方案对象。 + * @return 新增后的规则方案对象。 + */ + PermissionDataRuleSchema saveNew(PermissionDataRuleSchema schema); +} diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/PermissionDataRuleSchemaServiceImpl.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/PermissionDataRuleSchemaServiceImpl.java new file mode 100644 index 0000000..5fd1c92 --- /dev/null +++ b/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 + implements IPermissionDataRuleSchemaService { + + @Autowired + PermissionDataRuleSchemaMapper mapper; + + @Autowired + private IdGeneratorWrapper idGenerator; + + @Autowired + private IOnlFormHeadService onlFormHeadService; + + // ========== BaseService 要求重写 ========== + @Override + protected BaseDaoMapper mapper() { + return mapper; + } + + // ========== 分页查询 ========== + @Override + public List getListByFilter( + PermissionDataRuleSchema filter, String orderBy) { + return mapper.getListByFilter(filter, orderBy); + } + + // ========== 按 tableId 查询启用状态的规则 ========== + @Override + public List listByFormId(Long formId) { + LambdaQueryWrapper 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(); + } +} diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/vo/PermissionDataRuleSchemaVo.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/vo/PermissionDataRuleSchemaVo.java new file mode 100644 index 0000000..242f778 --- /dev/null +++ b/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; +} diff --git a/common/common-generator/src/main/java/apelet/common/generator/model/OnlCgreportItem.java b/common/common-generator/src/main/java/apelet/common/generator/model/OnlCgreportItem.java index 1b8a0e7..2f45d4f 100644 --- a/common/common-generator/src/main/java/apelet/common/generator/model/OnlCgreportItem.java +++ b/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显示") private Integer isShow; + @Schema(description = "是否下拉显示 0否,1显示") + private Integer isSelectShow; + @Schema(description = "排序") private Integer orderNum; diff --git a/common/common-generator/src/main/java/apelet/common/generator/model/OnlFormHead.java b/common/common-generator/src/main/java/apelet/common/generator/model/OnlFormHead.java index f2477eb..8c3f2c9 100644 --- a/common/common-generator/src/main/java/apelet/common/generator/model/OnlFormHead.java +++ b/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; @TableId(value = "id") private Long id; - + // 0 附表,1 主表,2单表 @Schema(description = "表类型") private String tableType; diff --git a/common/common-online/src/main/java/apelet/common/online/controller/OnlineFormController.java b/common/common-online/src/main/java/apelet/common/online/controller/OnlineFormController.java index fa8dc0c..7d10bdb 100644 --- a/common/common-online/src/main/java/apelet/common/online/controller/OnlineFormController.java +++ b/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.MyPageUtil; 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.service.IOnlFormHeadService; import apelet.common.log.annotation.OperationLog; import apelet.common.log.model.constant.SysOperationLogType; import apelet.common.online.config.OnlineProperties; -import apelet.common.online.dto.*; import apelet.common.online.dto.OnlineEventPluginExecuteDto; +import apelet.common.online.dto.OnlineFormDto; import apelet.common.online.model.*; import apelet.common.online.service.*; import apelet.common.online.util.OnlineRedisKeyUtil; @@ -47,7 +45,6 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.groups.Default; -import java.lang.reflect.Method; import java.util.*; import java.util.stream.Collectors; @@ -89,6 +86,9 @@ public class OnlineFormController { @Resource(name = "caffeineCacheManager") private CacheManager cacheManager; + @Autowired(required = false) + private FormButtonPermissionChecker buttonPermissionChecker; + /** * 新增在线表单数据。 * @@ -574,10 +574,22 @@ public class OnlineFormController { @PostMapping("/eventPluginExecute") public ResponseResult> eventPluginExecute( @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 eventPluginExecuteVoList = onlineFormService.eventPluginExecute(onlineEventPluginExecuteDto); return ResponseResult.success(eventPluginExecuteVoList); -// return ResponseResult.success(new ArrayList<>()); } private Long findNotExistDictId(Set originalDictIdSet, Set dictIdSet) { diff --git a/common/common-online/src/main/java/apelet/common/online/controller/OnlineOperationController.java b/common/common-online/src/main/java/apelet/common/online/controller/OnlineOperationController.java index a30b721..65dcef9 100644 --- a/common/common-online/src/main/java/apelet/common/online/controller/OnlineOperationController.java +++ b/common/common-online/src/main/java/apelet/common/online/controller/OnlineOperationController.java @@ -1,54 +1,60 @@ 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.constant.DictType; import apelet.common.core.constant.ErrorCodeEnum; import apelet.common.core.constant.ObjectFieldType; import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.*; +import apelet.common.core.upload.LocalUpDownloader; import apelet.common.core.util.*; import apelet.common.dict.model.GlobalDictItem; import apelet.common.dict.model.TenantGlobalDict; import apelet.common.dict.model.TenantGlobalDictItem; import apelet.common.dict.service.GlobalDictService; 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.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.dto.OnlineEventPluginExecuteDto; import apelet.common.online.dto.OnlineFilterDto; +import apelet.common.online.dto.OnlinePluginExecuteDto; import apelet.common.online.exception.OnlineRuntimeException; 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.util.OnlineConstant; 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.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.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -59,7 +65,8 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; -import java.io.*; +import java.io.IOException; +import java.io.Serializable; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -113,6 +120,9 @@ public class OnlineOperationController { @Autowired private OnlineDblinkService onlineDblinkService; + @Autowired(required = false) + private FormButtonPermissionChecker buttonPermissionChecker; + /** * 执行功能插件 * @@ -127,6 +137,18 @@ public class OnlineOperationController { @MyRequestBody JSONObject masterData, @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)); } diff --git a/common/common-online/src/main/java/apelet/common/online/service/impl/OnlineFormServiceImpl.java b/common/common-online/src/main/java/apelet/common/online/service/impl/OnlineFormServiceImpl.java index 2898c9e..b60b661 100644 --- a/common/common-online/src/main/java/apelet/common/online/service/impl/OnlineFormServiceImpl.java +++ b/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.github.pagehelper.Page; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.NotNull; import org.redisson.api.RBucket; import org.redisson.api.RedissonClient; @@ -358,6 +357,7 @@ public class OnlineFormServiceImpl extends BaseService impleme return pluginResult; } try { + //todo 这里要写 数据权限那块 JSONObject jsonObject = JSONObject.parseObject(onlineForm.getWidgetJson()); String deviceType = AppDeviceType.getDeviceType(); JSONArray jsonArray = jsonObject.getJSONObject(deviceType).getJSONArray("pluginList");