REQ-2299 基础开发&创建数据对象

This commit is contained in:
yangheng 2024-04-23 09:38:12 +08:00
parent 12caa4a41e
commit d185bb2b5f
48 changed files with 1191 additions and 220 deletions

View File

@ -0,0 +1,51 @@
package cn.axzo.tyr.client.common.enums;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* 系统返回码枚举类
*
* @author zhaoyong_sh
* @see ReturnCodeEnum
* @since 2021-03-29 18:16
*/
@RequiredArgsConstructor
@Getter
public enum ReturnCodeEnum{
/**
* 系统返回码枚举类
*/
SUCCESS(200, "success"),
INVALID_PARAMETER(400, "无效的请求参数"),
SYSTEM_ERROR(500, "system error"),
RPC_ERROR(601, "rpc error"),
/**
* 业务异常 900--1200
*/
PERMISSION_ERROR(901,"您无此操作权限"),
USER_NOT_FOUND(902, "用户不存在"),
IDENTITY_NOT_FOUND(903, "当前身份错误"),
IDENTITY_QUERY_USER_NOT_FOUND(904, "获取用户信息失败"),
PARAM_NOT_NULL(905, "参数不允许为空"),
DATA_OBJECT_NAME_DUPLICATE(906, "数据对象名重复,请修改对象名"),
DATA_OBJECT_CODE_DUPLICATE(907, "数据对象code重复请修改对象code"),
DATA_OBJECT_NAME_CODE_DUPLICATE(907, "数据对象名、code均重复请修改"),
DATA_OBJECT_ATTR_NAME_CODE_DUPLICATE(908, "数据对象字段名或code有重复请检查"),
DATA_OBJECT_RULE_DUPLICATE(908, "规则名有重复,请检查"),
;
private final Integer code;
private final String message;
}

View File

@ -0,0 +1,14 @@
package cn.axzo.tyr.client.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum YesNoEnum {
YES(2),
NO(1),
;
private final Integer value;
}

View File

@ -0,0 +1,29 @@
package cn.axzo.tyr.client.feign;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
/**
* 数据权限
*/
@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}")
public interface DataObjectApi {
@PostMapping("/api/dataObject/create")
ApiResult<Long> createDataObject(@RequestBody @Valid CreateDataObjectReq req);
/**
* 修改数据对象
* @param req
* @return
*/
@PostMapping("/api/dataObject/edit")
ApiResult<Void> editDataObject(@RequestBody @Valid EditDataObjectReq req);
}

View File

@ -1,7 +1,7 @@
package cn.axzo.tyr.client.feign;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.req.CreateDataPermissionReq;
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
import cn.axzo.tyr.client.model.req.GetWorkflowQueryAndUpdatePermissionReq;
import cn.axzo.tyr.client.model.res.GetWorkflowQueryAndUpdatePermissionRes;
import org.springframework.cloud.openfeign.FeignClient;
@ -20,9 +20,4 @@ public interface DataPermissionApi {
/** 查询审批流表单查看/编辑权限 **/
@PostMapping(value = "/api/v1/dataPermission/getWorkflowQueryAndUpdatePermission")
ApiResult<GetWorkflowQueryAndUpdatePermissionRes> getWorkflowQueryAndUpdatePermission(@RequestBody @Validated GetWorkflowQueryAndUpdatePermissionReq req);
// ******************************************************************
// 数据权限
@PostMapping("/api/dataPermission/create")
ApiResult<Long> createDataPermission(@RequestBody @Valid CreateDataPermissionReq req);
}

View File

@ -0,0 +1,24 @@
package cn.axzo.tyr.client.model.data.object;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class AttributeBO {
/**
* 数据对象属性id
*/
private Long dataObjectAttrId;
Integer sort; // 序号
String attrName; //字段名
String attrCode; // 字段code
Integer unmaskSupport; // 是否支持脱敏 1-不支持 2-支持
Integer editSupport; // 是否支持编辑 1-不支持 2-支持
}

View File

@ -0,0 +1,21 @@
package cn.axzo.tyr.client.model.data.object;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class AttributePermissionBO {
Integer sort; // 序号
String attrName; //字段名
String attrCode; // 字段code
Integer visibilityScope; // 字段值查看范围 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据 5:仅本单位数据 6:本单位及下级直属单位数据 7:本单位及下级协同直属+合作单位数据 8:本单位及以下协同直属+合作单位数据 9:本项目部数据 10:同行级数据权限
Integer isUnmaskable; // 是否可脱敏 1-不可操作脱敏 2-可操作脱敏
Integer isEditable; // 是否可编辑 1-不可编辑 2-可编辑
}

View File

@ -0,0 +1,28 @@
package cn.axzo.tyr.client.model.data.object;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class DataObjectAttrQueryBO {
/**
* 数据对象属性id
*/
private Long dataObjectAttrId;
Integer sort; // 序号
String attrName; //字段名
List<String> attrNameList; //字段名List
String attrCode; // 字段code
List<String> attrCodeList; // 字段codeList
Integer unmaskSupport; // 是否支持脱敏 1-不支持 2-支持
Integer editSupport; // 是否支持编辑 1-不支持 2-支持
}

View File

@ -0,0 +1,31 @@
package cn.axzo.tyr.client.model.data.object;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class DataObjectQueryBO {
/**
* 数据权限code
*/
private String dataObjectCode;
/**
* 数据权限名 全局唯一
*/
private String dataObjectName;
/**
* 租户范围单选插入后不可编辑 1项目租户 2单位租户 3:OMS 4:政务监管平台
*/
private Integer tenantScope;
/**
* 排序 从小到大
*/
private Integer sort;
}

View File

@ -0,0 +1,53 @@
package cn.axzo.tyr.client.model.data.object;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class DataObjectRuleBO {
/**
* 排序 从小到大
*/
private Integer sort;
/**
* 数据对象规则id
*/
private Long dataObjectRuleId;
/**
* 规则名称
*/
@NotEmpty(message = "请输入规则名称")
private String dataObjectRuleName;
/**
* 规则范围 1岗位 2角色
*/
@NotNull(message = "请选择规则范围")
private Integer ruleScopeType;
/**
* 岗位/角色id
*/
private List<Long> relationId;
/**
* 行级数据权限单选 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据
* 5:仅本单位数据 6:本单位及下级直属单位数据 7:本单位及下级协同直属+合作单位数据 8:本单位及以下协同直属+合作单位数据 9:本项目部数据
*/
private Integer rowPermission;
/**
* 字段级权限规则
*/
private List<AttributePermissionBO> attributePermissionBOList;
}

View File

@ -0,0 +1,26 @@
package cn.axzo.tyr.client.model.data.object;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class DataObjectRuleQueryBO {
/**
* 数据对象id
*/
private Long dataObjectId;
/**
* 规则名称List
*/
private List<String> dataObjectRuleNameList;
}

View File

@ -0,0 +1,44 @@
package cn.axzo.tyr.client.model.data.object;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class DefaultDataObjectRuleBO {
/**
* 数据对象规则id
*/
private Long dataObjectRuleId;
/**
* 规则名称
*/
private String dataObjectRuleName;
/**
* 规则范围 1岗位 2角色
*/
private Integer ruleScopeType;
/**
* 岗位/角色id
*/
private List<Long> relationId;
/**
* 行级数据权限单选 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据
* 5:仅本单位数据 6:本单位及下级直属单位数据 7:本单位及下级协同直属+合作单位数据 8:本单位及以下协同直属+合作单位数据 9:本项目部数据
*/
private Integer rowPermission;
/**
* 字段级权限规则
*/
private List<AttributePermissionBO> attributePermissionBOList;
}

View File

@ -1,20 +0,0 @@
package cn.axzo.tyr.client.model.data.permission;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class Attribute {
Integer sort; // 序号
String attrName; //字段名
String attrCode;
Integer unmaskSupport; // 是否支持脱敏 1-支持 0-不支持
Integer editSupport; // 是否支持编辑 1-支持 0-不支持
}

View File

@ -1,21 +0,0 @@
package cn.axzo.tyr.client.model.data.permission;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class AttributePermission {
Integer sort; // 序号
String attrName; //字段名
String attrCode;
Integer visibilityScope; // 字段值查看范围 0:同行级数据权限 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据 5:仅本单位数据 6:本单位及下级直属单位数据 7:本单位及下级协同直属+合作单位数据 8:本单位及以下协同直属+合作单位数据 9:本项目部数据
Integer isUnmaskable; // 是否可脱敏 1-可操作脱敏 0-不可操作脱敏
Integer isEditable; // 是否可编辑 1-可编辑 0-不可编辑
}

View File

@ -0,0 +1,70 @@
package cn.axzo.tyr.client.model.req;
import cn.axzo.tyr.client.model.data.object.AttributeBO;
import cn.axzo.tyr.client.model.data.object.DataObjectRuleBO;
import cn.axzo.tyr.client.model.data.object.DefaultDataObjectRuleBO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CreateDataObjectReq {
/**
* 数据对象code
*/
@NotEmpty(message = "请输入数据对象code")
private String dataObjectCode;
/**
* 数据对象名 全局唯一
*/
@NotNull(message = "请输入数据对象名")
@Size(min = 1, max = 10,message = "请输入数据对象名")
private String dataObjectName;
/**
* 备注
*/
private String memo;
/**
* 租户范围单选插入后不可编辑 1项目租户 2单位租户 3:OMS 4:政务监管平台
*/
@NotNull(message = "请选择租户范围")
private Integer tenantScope;
/**
* 字段
*/
private List<AttributeBO> attrs;
/**
* 默认规则
*/
private List<DefaultDataObjectRuleBO> defaultDataObjectRuleBOList;
/**
* 自定义规则
*/
@Valid
private List<DataObjectRuleBO> dataObjectRuleBOList;
/**
* 排序 从小到大
*/
private Integer sort;
/**
* 创建人自然人id
*/
private Long createBy;
/**
* 修改人自然人id
*/
private Long updateBy;
}

View File

@ -1,52 +0,0 @@
package cn.axzo.tyr.client.model.req;
import cn.axzo.tyr.client.model.data.permission.Attribute;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CreateDataPermissionReq {
/**
* 数据权限code
*/
@NotEmpty(message = "请输入数据权限code")
private String dataPermissionCode;
/**
* 数据权限名 全局唯一
*/
@NotNull(message = "请输入数据权限名")
@Size(min = 1, max = 10,message = "请输入数据权限名")
private String dataPermissionName;
/**
* 备注
*/
private String memo;
/**
* 字段
*/
private List<Attribute> attrs;
/**
* 排序 从小到大
*/
private Integer sort;
/**
* 创建人自然人id
*/
private Long createBy;
/**
* 修改人自然人id
*/
private Long updateBy;
}

View File

@ -0,0 +1,68 @@
package cn.axzo.tyr.client.model.req;
import cn.axzo.tyr.client.model.data.object.AttributeBO;
import cn.axzo.tyr.client.model.data.object.DataObjectRuleBO;
import cn.axzo.tyr.client.model.data.object.DefaultDataObjectRuleBO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EditDataObjectReq {
/**
* 数据对象id
*/
private Long dataObjectId;
/**
* 数据对象名 全局唯一
*/
@NotNull(message = "请输入数据对象名")
@Size(min = 1, max = 10,message = "请输入数据对象名")
private String dataObjectName;
/**
* 备注
*/
private String memo;
/**
* 租户范围单选插入后不可编辑 1项目租户 2单位租户 3:OMS 4:政务监管平台
*/
private Integer tenantScope;
/**
* 字段
*/
private List<AttributeBO> attrs;
/**
* 默认规则
*/
private DefaultDataObjectRuleBO defaultDataObjectRuleBO;
/**
* 自定义规则
*/
@Valid
private List<DataObjectRuleBO> z;
/**
* 排序 从小到大
*/
private Integer sort;
/**
* 创建人自然人id
*/
private Long createBy;
/**
* 修改人自然人id
*/
private Long updateBy;
}

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>tyr</artifactId>
<groupId>cn.axzo.tyr</groupId>
@ -97,6 +98,11 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>
cn.axzo.tyr.server.TyrApplication
</mainClass>
</configuration>
</plugin>
</plugins>
</build>

View File

@ -1,5 +1,6 @@
package cn.axzo.tyr.server;
import cn.axzo.pokonyan.config.mybatisplus.EntityMetaObjectHandler;
import cn.axzo.tyr.server.job.CMSRoleJobHandler;
import cn.hutool.extra.spring.SpringUtil;
import lombok.extern.slf4j.Slf4j;

View File

@ -0,0 +1,53 @@
package cn.axzo.tyr.server;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication(scanBasePackages = "cn.axzo", exclude = {
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
})
@EnableFeignClients(basePackages = {"cn.axzo"})
@Log4j2
@EnableAsync
public class TyrServerDevApplication {
public static void main(String[] args) throws Exception {
System.setProperty("spring.profiles.active","dev");
System.setProperty("NACOS_HOST","https://dev-nacos.axzo.cn");
System.setProperty("NACOS_PORT","443");
System.setProperty("NACOS_NAMESPACE_ID","35eada10-9574-4db8-9fea-bc6a4960b6c7");
System.setProperty("CUSTOM_ENV","dev");
System.setProperty("spring.redis.port","31270");
System.setProperty("spring.redis.host","172.16.2.23");
System.setProperty("xxl.job.admin.addresses","http://dev-xxl-job.axzo.cn/xxl-job-admin");
System.setProperty("rocketmq.name-server", "172.16.2.82:9876");
SpringApplication application = new SpringApplication(TyrServerDevApplication.class);
ApplicationContext applicationContext = application.run(args);
Environment env = applicationContext.getEnvironment();
log.info(
"--------------------------------------------------------------------------------------------------------------------\n" +
"Application 【{}】 is running on 【{}】 environment!\n" +
"Api Local: \thttp://127.0.0.1:{}\n" +
"Mysql: \t{}\t username:{}\n" +
"Redis: \t{}:{}\t database:{}\n" +
"RabbitMQ: \t{}\t username:{}",
env.getProperty("spring.application.name"),
env.getProperty("spring.profiles.active"),
env.getProperty("server.port"),
env.getProperty("spring.datasource.url"),
env.getProperty("spring.datasource.username"),
env.getProperty("spring.redis.host"),
env.getProperty("spring.redis.port"),
env.getProperty("spring.redis.database"),
env.getProperty("spring.rabbitmq.addresses"),
env.getProperty("spring.rabbitmq.username") +
"\n----------------------------------------------------------");
}
}

View File

@ -0,0 +1,54 @@
package cn.axzo.tyr.server;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableAsync;
/**
*/
@SpringBootApplication(scanBasePackages = "cn.axzo", exclude = {
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
})
@EnableFeignClients(basePackages = {"cn.axzo"})
@Log4j2
@EnableAsync
public class TyrServerPreApplication {
public static void main(String[] args) throws Exception {
System.setProperty("spring.profiles.active", "pre");
System.setProperty("NACOS_HOST", "https://pre-nacos.axzo.cn");
System.setProperty("NACOS_NAMESPACE_ID", "8b4cf725-7595-4c92-b2a6-9260a51ce078");
System.setProperty("CUSTOM_ENV", "pre");
System.setProperty("NACOS_PORT", "443");
System.setProperty("spring.redis.port", "6379");
System.setProperty("spring.redis.host", "172.16.1.76");
SpringApplication application = new SpringApplication(TyrServerPreApplication.class);
ApplicationContext applicationContext = application.run(args);
Environment env = applicationContext.getEnvironment();
log.info(
"--------------------------------------------------------------------------------------------------------------------\n" +
"Application 【{}】 is running on 【{}】 environment!\n" +
"Api Local: \thttp://127.0.0.1:{}\n" +
"Mysql: \t{}\t username:{}\n" +
"Redis: \t{}:{}\t database:{}\n" +
"RabbitMQ: \t{}\t username:{}",
env.getProperty("spring.application.name"),
env.getProperty("spring.profiles.active"),
env.getProperty("server.port"),
env.getProperty("spring.datasource.url"),
env.getProperty("spring.datasource.username"),
env.getProperty("spring.redis.host"),
env.getProperty("spring.redis.port"),
env.getProperty("spring.redis.database"),
env.getProperty("spring.rabbitmq.addresses"),
env.getProperty("spring.rabbitmq.username") +
"\n----------------------------------------------------------");
}
}

View File

@ -0,0 +1,56 @@
package cn.axzo.tyr.server;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableAsync;
/**
*/
@SpringBootApplication(scanBasePackages = "cn.axzo", exclude = {
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
})
@EnableFeignClients(basePackages = {"cn.axzo"})
@Log4j2
@EnableAsync
public class TyrServerTestApplication {
public static void main(String[] args) throws Exception {
System.setProperty("spring.profiles.active", "test");
System.setProperty("NACOS_HOST", "https://test-nacos.axzo.cn");
System.setProperty("NACOS_NAMESPACE_ID","f3c0f0d2-bac4-4498-bee7-9c3636b3afdf");
System.setProperty("CUSTOM_ENV","test");
System.setProperty("NACOS_PORT", "443");
System.setProperty("spring.redis.port","6379");
System.setProperty("spring.redis.host","172.16.2.149");
System.setProperty("rocketmq.name-server", "172.16.2.82:9876");
SpringApplication application = new SpringApplication(TyrServerTestApplication.class);
ApplicationContext applicationContext = application.run(args);
Environment env = applicationContext.getEnvironment();
log.info(
"--------------------------------------------------------------------------------------------------------------------\n" +
"Application 【{}】 is running on 【{}】 environment!\n" +
"Api Local: \thttp://127.0.0.1:{}\n" +
"Mysql: \t{}\t username:{}\n" +
"Redis: \t{}:{}\t database:{}\n" +
"RabbitMQ: \t{}\t username:{}",
env.getProperty("spring.application.name"),
env.getProperty("spring.profiles.active"),
env.getProperty("server.port"),
env.getProperty("spring.datasource.url"),
env.getProperty("spring.datasource.username"),
env.getProperty("spring.redis.host"),
env.getProperty("spring.redis.port"),
env.getProperty("spring.redis.database"),
env.getProperty("spring.rabbitmq.addresses"),
env.getProperty("spring.rabbitmq.username") +
"\n----------------------------------------------------------");
}
}

View File

@ -0,0 +1,27 @@
package cn.axzo.tyr.server.config.mybatisplus;
import cn.axzo.pokonyan.config.mybatisplus.EntityMetaObjectHandler;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @author lijiacheng 李嘉成 Jache
*/
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}
}

View File

@ -0,0 +1,33 @@
package cn.axzo.tyr.server.controller.data.object;
import cn.axzo.framework.auth.domain.ContextInfoHolder;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.feign.DataObjectApi;
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
import cn.axzo.tyr.server.service.DataObjectService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
/**
* 数据权限
*/
@Slf4j
@RestController
@RequiredArgsConstructor
public class DataObjectController implements DataObjectApi {
private final DataObjectService dataObjectService;
public ApiResult<Long> createDataObject(CreateDataObjectReq req) {
return ApiResult.ok(dataObjectService.createDataObject(req));
}
@Override
public ApiResult<Void> editDataObject(EditDataObjectReq req) {
return ApiResult.ok(dataObjectService.editDataObject(req));
}
}

View File

@ -1,19 +1,17 @@
package cn.axzo.tyr.server.controller.dataPermission;
import cn.axzo.framework.domain.web.ApiException;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.feign.DataPermissionApi;
import cn.axzo.tyr.client.model.req.CreateDataPermissionReq;
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
import cn.axzo.tyr.client.model.req.GetWorkflowQueryAndUpdatePermissionReq;
import cn.axzo.tyr.client.model.res.GetWorkflowQueryAndUpdatePermissionRes;
import cn.axzo.tyr.server.service.DataPermissionService;
import cn.axzo.tyr.server.service.DataObjectService;
import cn.axzo.tyr.server.utils.RpcExternalUtil;
import cn.axzo.workflow.client.feign.bpmn.ProcessInstanceApi;
import cn.axzo.workflow.client.feign.bpmn.ProcessTaskApi;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQueryDTO;
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO;
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceVO;
import cn.azxo.framework.common.model.CommonResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
@ -34,10 +32,6 @@ public class DataPermissionController implements DataPermissionApi {
private final ProcessTaskApi processTaskApi;
private final ProcessInstanceApi processInstanceApi;
// ******************************************************************
// 数据权限
private final DataPermissionService dataPermissionService;
@Override
public ApiResult<GetWorkflowQueryAndUpdatePermissionRes> getWorkflowQueryAndUpdatePermission(GetWorkflowQueryAndUpdatePermissionReq req) {
@ -72,11 +66,4 @@ public class DataPermissionController implements DataPermissionApi {
return ApiResult.ok(result);
}
// ******************************************************************
// 数据权限
@Override
public ApiResult<Long> createDataPermission(CreateDataPermissionReq req) {
return ApiResult.ok(dataPermissionService.createDataPermission(req));
}
}

View File

@ -0,0 +1,11 @@
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.tyr.server.repository.entity.DataObjectAttr;
import cn.axzo.tyr.server.repository.mapper.DataObjectAttrMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
@Repository
public class DataObjectAttrDao extends ServiceImpl<DataObjectAttrMapper, DataObjectAttr> {
}

View File

@ -0,0 +1,22 @@
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.tyr.client.model.data.object.DataObjectQueryBO;
import cn.axzo.tyr.server.repository.entity.DataObject;
import cn.axzo.tyr.server.repository.mapper.DataObjectMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class DataObjectDao extends ServiceImpl<DataObjectMapper, DataObject> {
public List<DataObject> duplicateListByBO(DataObjectQueryBO bo) {
return lambdaQuery()
.eq(StringUtils.isNotEmpty(bo.getDataObjectCode()), DataObject::getDataObjectCode, bo.getDataObjectCode())
.or(StringUtils.isNotEmpty(bo.getDataObjectCode()))
.eq(StringUtils.isNotEmpty(bo.getDataObjectName()), DataObject::getDataObjectName, bo.getDataObjectName())
.list();
}
}

View File

@ -0,0 +1,10 @@
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.tyr.server.repository.entity.DataObjectRuleAttr;
import cn.axzo.tyr.server.repository.mapper.DataObjectRuleAttrMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
@Repository
public class DataObjectRuleAttrDao extends ServiceImpl<DataObjectRuleAttrMapper, DataObjectRuleAttr> {
}

View File

@ -0,0 +1,22 @@
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.tyr.client.model.data.object.DataObjectRuleQueryBO;
import cn.axzo.tyr.server.repository.entity.DataObjectRule;
import cn.axzo.tyr.server.repository.mapper.DataObjectRuleMapper;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Objects;
@Repository
public class DataObjectRuleDao extends ServiceImpl<DataObjectRuleMapper, DataObjectRule> {
public List<DataObjectRule> listByBO(DataObjectRuleQueryBO bo) {
return lambdaQuery()
.eq(Objects.nonNull(bo.getDataObjectId()), DataObjectRule::getDataObjectId, bo.getDataObjectId())
.in(CollUtil.isNotEmpty(bo.getDataObjectRuleNameList()), DataObjectRule::getName, bo.getDataObjectRuleNameList())
.list();
}
}

View File

@ -0,0 +1,10 @@
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.tyr.server.repository.entity.DataObjectRuleScope;
import cn.axzo.tyr.server.repository.mapper.DataObjectRuleScopeMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
@Repository
public class DataObjectRuleScopeDao extends ServiceImpl<DataObjectRuleScopeMapper, DataObjectRuleScope> {
}

View File

@ -1,10 +0,0 @@
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.tyr.server.repository.entity.DataPermission;
import cn.axzo.tyr.server.repository.mapper.DataPermissionMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
@Repository
public class DataPermissionDao extends ServiceImpl<DataPermissionMapper, DataPermission> {
}

View File

@ -1,11 +0,0 @@
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.tyr.server.repository.entity.DataPermission;
import cn.axzo.tyr.server.repository.entity.DataObjectRule;
import cn.axzo.tyr.server.repository.mapper.DataPermissionRuleMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
@Repository
public class DataPermissionRuleDao extends ServiceImpl<DataPermissionRuleMapper, DataObjectRule> {
}

View File

@ -1,6 +1,7 @@
package cn.axzo.tyr.server.repository.entity;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.server.utils.BaseOperatorEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -14,7 +15,7 @@ import java.io.Serializable;
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "data_object", autoResultMap = true)
public class DataObject extends BaseEntity<DataObject> implements Serializable {
public class DataObject extends BaseOperatorEntity<DataObject> implements Serializable {
/**
* 数据权限code
*/
@ -28,19 +29,11 @@ public class DataObject extends BaseEntity<DataObject> implements Serializable {
*/
private String memo;
/**
* 租户范围插入后不可编辑 1项目租户 2单位租户 3:OMS 4:政务监管平台
* 租户范围单选插入后不可编辑 1项目租户 2单位租户 3:OMS 4:政务监管平台
*/
private Integer tenantScope;
/**
* 排序 从小到大
*/
private Integer sort;
/**
* 创建人自然人id
*/
private Long createBy;
/**
* 修改人自然人id
*/
private Long updateBy;
}

View File

@ -1,20 +1,31 @@
package cn.axzo.tyr.server.repository.entity;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.server.utils.BaseOperatorEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@Builder
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "data_object_attr", autoResultMap = true)
public class DataObjectAttr extends BaseEntity<DataObjectAttr> implements Serializable {
public class DataObjectAttr extends BaseOperatorEntity<DataObjectAttr> implements Serializable {
/**
* 数据权限id
*/
private Long dataObjectId;
/**
* 数据权限code
*/
private String dataObjectCode;
/**
* 序号
*/
@ -25,19 +36,12 @@ public class DataObjectAttr extends BaseEntity<DataObjectAttr> implements Seria
private String attrName;
private String attrCode;
/**
* 是否支持脱敏 1-支持 0-支持
* 是否支持脱敏 1-不支持 2-支持
*/
// @TableField(value = "unmask_support")
private Integer unmaskSupport;
/**
* 是否支持编辑 1-支持 0-支持
* 是否支持编辑 1-不支持 2-支持
*/
private Integer editSupport;
/**
* 创建人自然人id
*/
private Long createBy;
/**
* 修改人自然人id
*/
private Long updateBy;
}

View File

@ -1,24 +1,29 @@
package cn.axzo.tyr.server.repository.entity;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.server.utils.BaseOperatorEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
@Data
@Builder
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "data_object_rule", autoResultMap = true)
public class DataObjectRule extends BaseEntity<DataObjectRule> implements Serializable {
public class DataObjectRule extends BaseOperatorEntity<DataObjectRule> implements Serializable {
/**
* 数据权限id
*/
private String dataObjectId;
private Long dataObjectId;
/**
* 数据权限code
*/
@ -35,29 +40,25 @@ public class DataObjectRule extends BaseEntity<DataObjectRule> implements Serial
/**
* 规则范围 1岗位 2角色
*/
private Integer ruleScope;
private Integer ruleScopeType;
/**
* 岗位id
*/
private Long jobId;
/**
* 角色id
*/
private Long roleId;
/**
* 是否为默认规则 0-不是 1-
* 是否为默认规则 1-不是 2-
*/
private Integer isDefault;
/**
* 排序 从小到大
*/
private Integer sort;
/**
* 创建人自然人id
* 规则字段
*/
private Long createBy;
@TableField(exist = false)
private List<DataObjectRuleAttr> dataObjectRuleAttrList;
/**
* 修改人自然人id
* 规则范围
*/
private Long updateBy;
@TableField(exist = false)
private List<DataObjectRuleScope> dataObjectRuleScopeList;
}

View File

@ -1,17 +1,20 @@
package cn.axzo.tyr.server.repository.entity;
import cn.axzo.tyr.server.utils.BaseOperatorEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "data_object_rule_attr_relation", autoResultMap = true)
public class DataObjectRuleAttrRelation {
@TableName(value = "data_object_rule_attr", autoResultMap = true)
public class DataObjectRuleAttr extends BaseOperatorEntity<DataObjectRuleAttr> implements Serializable {
/**
* 数据对象id
*/
@ -19,34 +22,35 @@ public class DataObjectRuleAttrRelation {
/**
* 数据对象code
*/
private Long dataObjectName;
private String dataObjectCode;
/**
* 数据对象字段id
*/
private Long dataObjectAttrId;
/**
* 数据对象规则id
*/
private Long dataObjectRuleId;
/**
* 字段code
*/
String attrCode;
/**
* 序号
*/
private Integer sort;
/**
* 字段值查看范围 0:同行级数据权限 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据
* 字段值查看范围 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据
* 5:仅本单位数据 6:本单位及下级直属单位数据 7:本单位及下级协同直属+合作单位数据 8:本单位及以下协同直属+合作单位数据 9:本项目部数据
* 10:同行级数据权限
*/
private Integer visibilityScope;
/**
* 是否可脱敏 1-可操作脱敏 0-可操作脱敏
* 是否可脱敏 1-不可操作脱敏 2-可操作脱敏
*/
private Integer isUnmaskable;
/**
* 是否可编辑 1-可编辑 0-可编辑
* 是否可编辑 1-不可编辑 2-可编辑
*/
private Integer isEditable;
/**
* 创建人自然人id
*/
private Long createBy;
/**
* 修改人自然人id
*/
private Long updateBy;
}

View File

@ -0,0 +1,39 @@
package cn.axzo.tyr.server.repository.entity;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.server.utils.BaseOperatorEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "data_object_rule_scope", autoResultMap = true)
public class DataObjectRuleScope extends BaseOperatorEntity<DataObjectRuleScope> implements Serializable {
/**
* 数据权限id
*/
private Long dataObjectId;
/**
* 数据权限code
*/
private String dataObjectCode;
/**
* 数据权限规则id
*/
private Long dataObjectRuleId;
/**
* 规则范围 1岗位 2角色
*/
private Integer ruleScopeType;
/**
* 岗位id/角色id
*/
private Long relationId;
}

View File

@ -1,9 +1,9 @@
package cn.axzo.tyr.server.repository.mapper;
import cn.axzo.tyr.server.repository.entity.DataPermission;
import cn.axzo.tyr.server.repository.entity.DataObjectAttr;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DataPermissionMapper extends BaseMapper<DataPermission> {
public interface DataObjectAttrMapper extends BaseMapper<DataObjectAttr> {
}

View File

@ -0,0 +1,9 @@
package cn.axzo.tyr.server.repository.mapper;
import cn.axzo.tyr.server.repository.entity.DataObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DataObjectMapper extends BaseMapper<DataObject> {
}

View File

@ -0,0 +1,9 @@
package cn.axzo.tyr.server.repository.mapper;
import cn.axzo.tyr.server.repository.entity.DataObjectRuleAttr;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DataObjectRuleAttrMapper extends BaseMapper<DataObjectRuleAttr> {
}

View File

@ -5,5 +5,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DataPermissionRuleMapper extends BaseMapper<DataObjectRule> {
public interface DataObjectRuleMapper extends BaseMapper<DataObjectRule> {
}

View File

@ -0,0 +1,9 @@
package cn.axzo.tyr.server.repository.mapper;
import cn.axzo.tyr.server.repository.entity.DataObjectRuleScope;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DataObjectRuleScopeMapper extends BaseMapper<DataObjectRuleScope> {
}

View File

@ -0,0 +1,10 @@
package cn.axzo.tyr.server.service;
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
public interface DataObjectService {
Long createDataObject(CreateDataObjectReq req);
Void editDataObject(EditDataObjectReq req);
}

View File

@ -1,7 +0,0 @@
package cn.axzo.tyr.server.service;
import cn.axzo.tyr.client.model.req.CreateDataPermissionReq;
public interface DataPermissionService {
Long createDataPermission(CreateDataPermissionReq req);
}

View File

@ -0,0 +1,196 @@
package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.exception.ServiceException;
import cn.axzo.tyr.client.common.enums.ReturnCodeEnum;
import cn.axzo.tyr.client.common.enums.YesNoEnum;
import cn.axzo.tyr.client.model.data.object.AttributeBO;
import cn.axzo.tyr.client.model.data.object.DataObjectAttrQueryBO;
import cn.axzo.tyr.client.model.data.object.DataObjectQueryBO;
import cn.axzo.tyr.client.model.data.object.DataObjectRuleBO;
import cn.axzo.tyr.client.model.data.object.DataObjectRuleQueryBO;
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
import cn.axzo.tyr.server.repository.dao.DataObjectAttrDao;
import cn.axzo.tyr.server.repository.dao.DataObjectDao;
import cn.axzo.tyr.server.repository.dao.DataObjectRuleAttrDao;
import cn.axzo.tyr.server.repository.dao.DataObjectRuleDao;
import cn.axzo.tyr.server.repository.dao.DataObjectRuleScopeDao;
import cn.axzo.tyr.server.repository.entity.DataObject;
import cn.axzo.tyr.server.repository.entity.DataObjectAttr;
import cn.axzo.tyr.server.repository.entity.DataObjectRule;
import cn.axzo.tyr.server.repository.entity.DataObjectRuleAttr;
import cn.axzo.tyr.server.repository.entity.DataObjectRuleScope;
import cn.axzo.tyr.server.service.DataObjectService;
import cn.axzo.tyr.server.utils.mapper.DataObjectMapper;
import cn.hutool.core.collection.CollUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@RequiredArgsConstructor
@Service
public class DataObjectServiceImpl implements DataObjectService {
private final DataObjectDao dataObjectDao;
private final DataObjectRuleDao dataObjectRuleDao;
private final DataObjectAttrDao dataObjectAttrDao;
private final DataObjectRuleAttrDao dataObjectRuleAttrDao;
private final DataObjectRuleScopeDao dataObjectRuleScopeDao;
@Resource
private TransactionTemplate transactionTemplate;
@Override
public Long createDataObject(CreateDataObjectReq req) {
// 校验
// objectNameobjectCode不能重复
checkObjectNameOrCodeUnique(req);
// // 对象属性名和code不能重复
// checkObjectAttrNameOrCodeUnique(req);
// // 规则名 不能重复
// checkRuleNameUnique(req);
// 准备
DataObject dataObject = DataObjectMapper.INSTANCE.createReq2DataObject(req);
List<DataObjectAttr> objectAttrList = DataObjectMapper.INSTANCE.attributeBOs2DataObjectAttrs(req.getAttrs());
List<DataObjectRule> defaultDataObjectRules = DataObjectMapper.INSTANCE.defaultRuleBOs2Rules(req.getDefaultDataObjectRuleBOList());
List<DataObjectRule> dataObjectRules = DataObjectMapper.INSTANCE.ruleBOs2Rules(req.getDataObjectRuleBOList());
int size = (CollUtil.isNotEmpty(defaultDataObjectRules) ? defaultDataObjectRules.size() : 0)
+ (CollUtil.isNotEmpty(dataObjectRules) ? dataObjectRules.size() : 0);
List<DataObjectRule> generalObjectRuleList = new ArrayList<>(size);
// 入库
transactionTemplate.executeWithoutResult(status -> {
// 数据对象
dataObjectDao.save(dataObject);
// 数据对象字段
Map<String, Long> attrMap;
if (CollUtil.isNotEmpty(objectAttrList)) {
objectAttrList.forEach(e -> e.setDataObjectId(dataObject.getId())
.setDataObjectCode(dataObject.getDataObjectCode())
.setCreateBy(req.getCreateBy()));
dataObjectAttrDao.saveBatch(objectAttrList);
attrMap = objectAttrList.stream().collect(Collectors.toMap(DataObjectAttr::getAttrCode, DataObjectAttr::getId, (a, b) -> a));
} else {
attrMap = null;
}
// 数据对象规则
if (CollUtil.isNotEmpty(defaultDataObjectRules)) {
defaultDataObjectRules.forEach(e -> e.setDataObjectId(dataObject.getId())
.setDataObjectCode(dataObject.getDataObjectCode())
.setIsDefault(YesNoEnum.YES.getValue())
.setCreateBy(req.getCreateBy()));
;
generalObjectRuleList.addAll(defaultDataObjectRules);
}
if (CollUtil.isNotEmpty(dataObjectRules)) {
dataObjectRules.forEach(e -> e.setDataObjectId(dataObject.getId())
.setDataObjectCode(dataObject.getDataObjectCode())
.setIsDefault(YesNoEnum.NO.getValue())
.setCreateBy(req.getCreateBy()));
;
generalObjectRuleList.addAll(dataObjectRules);
}
if (CollUtil.isNotEmpty(generalObjectRuleList)) {
dataObjectRuleDao.saveBatch(generalObjectRuleList);
// 数据对象规则字段&范围
List<DataObjectRuleAttr> ruleAttrList = new ArrayList<>(CollUtil.isNotEmpty(attrMap) ? attrMap.size() : 0);
int sum = generalObjectRuleList.stream().map(e -> e.getDataObjectRuleScopeList().size()).mapToInt(Integer::intValue).sum();
List<DataObjectRuleScope> scopeList = new ArrayList<>(sum);
generalObjectRuleList.forEach(rule -> {
if (CollUtil.isNotEmpty(attrMap) && CollUtil.isNotEmpty(rule.getDataObjectRuleAttrList())) {
rule.getDataObjectRuleAttrList().forEach(ruleAttr -> {
ruleAttr.setDataObjectAttrId(attrMap.get(ruleAttr.getAttrCode()));
ruleAttr.setDataObjectId(dataObject.getId());
ruleAttr.setDataObjectCode(dataObject.getDataObjectCode());
ruleAttr.setDataObjectRuleId(rule.getId());
ruleAttr.setCreateBy(req.getCreateBy());
ruleAttrList.add(ruleAttr);
});
rule.getDataObjectRuleScopeList().forEach(scope -> {
scope.setRuleScopeType(rule.getRuleScopeType());
scope.setCreateBy(req.getCreateBy());
scope.setDataObjectRuleId(rule.getId());
scope.setDataObjectId(rule.getDataObjectId());
scope.setDataObjectCode(rule.getDataObjectCode());
scopeList.add(scope);
});
}
});
dataObjectRuleAttrDao.saveBatch(ruleAttrList);
dataObjectRuleScopeDao.saveBatch(scopeList);
}
});
return dataObject.getId();
}
@Override
public Void editDataObject(EditDataObjectReq req) {
}
private void checkRuleNameUnique(CreateDataObjectReq req) {
if (CollUtil.isNotEmpty(req.getDataObjectRuleBOList())) {
List<String> nameList = req.getDataObjectRuleBOList().stream().map(DataObjectRuleBO::getDataObjectRuleName).distinct().collect(Collectors.toList());
if (nameList.size() < req.getDataObjectRuleBOList().size()) {
throw new ServiceException(ReturnCodeEnum.DATA_OBJECT_RULE_DUPLICATE.getMessage());
}
}
}
private static void checkObjectAttrNameOrCodeUnique(CreateDataObjectReq req) {
if (CollUtil.isNotEmpty(req.getAttrs())) {
List<String> attrNameList = req.getAttrs().stream().map(AttributeBO::getAttrName).distinct().collect(Collectors.toList());
List<String> attrCodeList = req.getAttrs().stream().map(AttributeBO::getAttrCode).distinct().collect(Collectors.toList());
if (attrNameList.size() < req.getAttrs().size() || attrCodeList.size() < req.getAttrs().size()) {
throw new ServiceException(ReturnCodeEnum.DATA_OBJECT_ATTR_NAME_CODE_DUPLICATE.getMessage());
}
}
}
private void checkObjectNameOrCodeUnique(CreateDataObjectReq req) {
DataObjectQueryBO bo = DataObjectQueryBO.builder()
.dataObjectName(req.getDataObjectName())
.dataObjectCode(req.getDataObjectCode())
.build();
List<DataObject> dataObjects = dataObjectDao.duplicateListByBO(bo);
if (CollUtil.isNotEmpty(dataObjects)) {
boolean nameDuplicate = false;
boolean codeDuplicate = false;
for (DataObject dataObject : dataObjects) {
if (dataObject.getDataObjectName().equals(req.getDataObjectName())) {
nameDuplicate = true;
}
if (dataObject.getDataObjectCode().equals(req.getDataObjectCode())) {
codeDuplicate = true;
}
}
if (nameDuplicate && codeDuplicate) {
throw new ServiceException(ReturnCodeEnum.DATA_OBJECT_NAME_CODE_DUPLICATE.getMessage());
} else if (nameDuplicate) {
throw new ServiceException(ReturnCodeEnum.DATA_OBJECT_NAME_DUPLICATE.getMessage());
} else if (codeDuplicate) {
throw new ServiceException(ReturnCodeEnum.DATA_OBJECT_CODE_DUPLICATE.getMessage());
}
}
}
}

View File

@ -1,22 +0,0 @@
package cn.axzo.tyr.server.service.impl;
import cn.axzo.tyr.client.model.req.CreateDataPermissionReq;
import cn.axzo.tyr.server.repository.dao.DataPermissionDao;
import cn.axzo.tyr.server.repository.dao.DataPermissionRuleDao;
import cn.axzo.tyr.server.service.DataPermissionService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@RequiredArgsConstructor
@Service
public class DataPermissionServiceImpl implements DataPermissionService {
private final DataPermissionDao dataPermissionDao;
private final DataPermissionRuleDao dataPermissionRuleDao;
@Override
public Long createDataPermission(CreateDataPermissionReq req) {
}
}

View File

@ -0,0 +1,9 @@
package cn.axzo.tyr.server.utils;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import com.baomidou.mybatisplus.extension.activerecord.Model;
public abstract class BaseDataEntity <T extends Model<T>> extends BaseEntity<T> {
public BaseDataEntity() {
}
}

View File

@ -0,0 +1,24 @@
package cn.axzo.tyr.server.utils;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import java.io.Serializable;
@Data
public abstract class BaseOperatorEntity<T extends Model<T>> extends BaseDataEntity<T> implements Serializable {
@TableField(
fill = FieldFill.INSERT
)
protected Long createBy = 0L;
@TableField(
fill = FieldFill.UPDATE
)
protected Long updateBy = 0L;
protected boolean canEqual(final Object other) {
return other instanceof BaseOperatorEntity;
}
}

View File

@ -0,0 +1,61 @@
package cn.axzo.tyr.server.utils.mapper;
import cn.axzo.tyr.client.model.data.object.AttributeBO;
import cn.axzo.tyr.client.model.data.object.AttributePermissionBO;
import cn.axzo.tyr.client.model.data.object.DataObjectRuleBO;
import cn.axzo.tyr.client.model.data.object.DefaultDataObjectRuleBO;
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
import cn.axzo.tyr.server.repository.entity.DataObject;
import cn.axzo.tyr.server.repository.entity.DataObjectAttr;
import cn.axzo.tyr.server.repository.entity.DataObjectRule;
import cn.axzo.tyr.server.repository.entity.DataObjectRuleAttr;
import cn.axzo.tyr.server.repository.entity.DataObjectRuleScope;
import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Lists;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Mapper
public interface DataObjectMapper {
DataObjectMapper INSTANCE = Mappers.getMapper(DataObjectMapper.class);
DataObject createReq2DataObject(CreateDataObjectReq req);
DataObjectAttr attributeBO2DataObjectAttr(AttributeBO bo);
DataObjectRuleAttr attrBO2Attr(AttributePermissionBO bo);
@Mapping(source = "dataObjectRuleName", target = "name")
@Mapping(source = "attributePermissionBOList", target = "dataObjectRuleAttrList")
@Mapping(source = "relationId", target = "dataObjectRuleScopeList", qualifiedByName = "mapRelationId2RuleScope")
DataObjectRule defaultRuleBO2Rule(DefaultDataObjectRuleBO bo);
@Mapping(source = "dataObjectRuleName", target = "name")
@Mapping(source = "attributePermissionBOList", target = "dataObjectRuleAttrList")
@Mapping(source = "relationId", target = "dataObjectRuleScopeList", qualifiedByName = "mapRelationId2RuleScope")
DataObjectRule ruleBO2Rule(DataObjectRuleBO bo);
List<DataObjectAttr> attributeBOs2DataObjectAttrs(List<AttributeBO> bo);
List<DataObjectRule> defaultRuleBOs2Rules(List<DefaultDataObjectRuleBO> bo);
List<DataObjectRule> ruleBOs2Rules(List<DataObjectRuleBO> bo);
@Named("mapRelationId2RuleScope")
default List<DataObjectRuleScope> mapIntegerToBoolean(List<Long> relationId) {
if (CollUtil.isNotEmpty(relationId)) {
return relationId.stream().distinct()
.map(id -> DataObjectRuleScope.builder().relationId(id).build())
.collect(Collectors.toList());
}
return Lists.newArrayList();
}
}