跳转到内容

业务维度

示例代码

在某些应用下,需要以业务维度区分不同的资源。例如,在trantor的交付控制台里,制品版本就属于一个业务维度,用户可以通过切换不同的制品版本,获取对应版本下的数据,达到一个资源隔离的效果。

business_demion

实现

在本文中,将使用最简单的班级-学生作为模型,其中,班级作为业务维度,如:一班有哪些学生,二 班有哪些学生。

在线定义业务维度

todo 陈功 暂未实现

  1. 如班级作为业务维度时,返回的Classes需要继承自BusinessDimensionData,实现其中的getId()getTitle(),其中getId()为业务维度id,getTitle()为下拉展示的业务维度名称。
  2. 业务维度列表通过@TBusinessDimension注解定义,并继承BusinessDimensionAction实现load方法,返回的业务维度列表List<BusinessDimensionData>数据。BusinessDimensionData是一个接口,返回的实际数据需要继承BusinessDimensionData。
@Data
public class Classes implements BusinessDimensionData {
private Long id;
private String title;
@Override
public @NotNull Long getId() {
return this.id;
}
/**
* 业务维度下拉展示名称
*
* @return
*/
@Override
public String getTitle() {
return this.title;
}
}
@TBusinessDimension("以班级区分")
public class ClassesBusinessDimension implements BusinessDimensionAction {
@Autowired
private ClassesDao classesDao;
@Override
public List<BusinessDimensionData> load() {
List<Classes> product = classesDao.find(query -> {
});
// 按课程编码排序
return product.stream().sorted(Comparator.comparing(Classes::getClassesNo).reversed()).collect(Collectors.toList());
}
}

业务维度进行数据隔离

在通过DataAction获取数据时,实际上是需要用户通过编码的方式按照业务维度id 进行数据隔离。如通过业务维度获取某个特定班级的学生列表时,用户可以通过上下文Integer id = TContext.getFrontendContext().getCurrentBusinessDimensionId()获取班级id,之后在获取学生列表时,可以通过制定班级id获取数据。

ServerAction设置业务维度

@TAction(modelClass = Student.class)
public void save(@TParam Student student) {
Integer id = TContext.getFrontendContext().getCurrentBusinessDimensionId();
Classes classes = new Classes();
classes.setId(Long.valueOf(id));
student.setClasses(classes);
studentDao.saveWithRelationSkipNull(student);
}

DataAction业务维度隔离

@Component
public class StudentDataAction implements MultiDataAction<Student> {
@Resource
StudentDao studentDao;
@Override
public MultiDataResult<Student> load(MultiDataParams multiDataParams) {
// 获取业务维度id,对应班级的id
Integer id = TContext.getFrontendContext().getCurrentBusinessDimensionId();
List<Student> response = studentDao.find(query -> {
query.where(conditionSet -> {
conditionSet.condition(Student.classes_field, classes -> {
classes.eq(Classes.id_field, id);
});
});
query.selectAll();
query.orderBy(Student.createdAt_field, false);
});
return new MultiDataResult(response, (long) response.size());
}
}

使用

配置应用业务维度和快速链接应用

业务维度是应用级别下的配置,用户在配置应用时,可以配置一个应用负责展示业务维度下的数据,一个应用负责管理业务维度(增删改查)。然后通过快速链接应用对应用之间进行跳转。

business_demion1

业务维度隔离数据展示

  1. 首先需要创建业务维度,本示例使用用班级作为业务维度。
  2. 然后通过在不同班级隔离学生数据。

business_demion2