
ars.database.service.StandardGeneralService Maven / Gradle / Ivy
The newest version!
package ars.database.service;
import java.util.List;
import java.io.Serializable;
import ars.util.Beans;
import ars.invoke.request.Requester;
import ars.database.model.TreeModel;
import ars.database.repository.Repository;
import ars.database.repository.Repositories;
/**
* 通用业务操作接口抽象实现
*
* @param 数据模型
* @author wuyongqiang
*/
public abstract class StandardGeneralService extends AbstractService {
/**
* 新增对象实体
*
* @param requester 请求对象
* @return 新增对象实体主键
*/
public Serializable add(Requester requester) {
T entity = Beans.getInstance(this.getModel());
this.initObject(requester, entity);
return this.saveObject(requester, entity);
}
/**
* 删除对象
*
* @param requester 请求对象
*/
public void delete(Requester requester) {
List entities = this.getQuery(requester, true).custom(requester.getParameters()).list();
for (int i = 0; i < entities.size(); i++) {
this.deleteObject(requester, entities.get(i));
}
}
/**
* 修改对象实体
*
* @param requester 请求对象
* @param identifiers 对象主键数组
*/
@SuppressWarnings("unchecked")
public void update(Requester requester, Object[] identifiers) {
if (identifiers.length > 0) {
Repository repository = this.getRepository();
String primary = repository.getPrimary();
List entities = this.getQuery(requester).or(primary, identifiers).list();
for (int i = 0; i < entities.size(); i++) {
T entity = entities.get(i);
Boolean active = entity instanceof TreeModel ? ((TreeModel>) entity).getActive() : null;
this.initObject(requester, entity);
this.updateObject(requester, entity);
if (active != null && active != ((TreeModel>) entity).getActive()) {
TreeModel> tree = (TreeModel>) entity;
if (tree.getActive() == Boolean.TRUE) {
TreeModel> parent = (TreeModel>) tree.getParent();
while (parent != null) {
if (parent.getActive() != Boolean.TRUE) {
parent.setActive(true);
((Repository>) repository).update(parent);
}
parent = (TreeModel>) parent.getParent();
}
} else if (tree.getActive() == Boolean.FALSE) {
List children = repository.query().ne(primary, tree.getId()).eq("active", true)
.start("key", tree.getKey()).list();
for (int j = 0; j < children.size(); j++) {
TreeModel> child = (TreeModel>) children.get(j);
if (child.getActive() != Boolean.FALSE) {
child.setActive(false);
((Repository>) repository).update(child);
}
}
}
}
}
}
}
/**
* 统计数量
*
* @param requester 请求对象
* @return 数量
*/
public int count(Requester requester) {
return this.getQuery(requester).custom(requester.getParameters()).count();
}
/**
* 数据统计
*
* @param requester 请求对象
* @return 统计数据列表
*/
public List> stats(Requester requester) {
return this.getQuery(requester).custom(requester.getParameters()).stats();
}
/**
* 获取单个对象
*
* @param requester 请求对象
* @return 对象实例
*/
public T object(Requester requester) {
return this.getQuery(requester, true).custom(requester.getParameters()).single();
}
/**
* 获取对象列表
*
* @param requester 请求对象
* @return 对象实例列表
*/
public List objects(Requester requester) {
return this.getQuery(requester).custom(requester.getParameters()).list();
}
/**
* 获取树对象列表
*
* @param requester 请求对象
* @return 树对象实例列表
*/
@SuppressWarnings({"rawtypes", "unchecked"})
public List trees(Requester requester) {
List objects = this.getQuery(requester).custom(requester.getParameters()).list();
return (List) Repositories.mergeTrees((List) objects);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy