package cn.jeesoft.mvc.services;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import cn.jeesoft.core.model.BaseBean;
import cn.jeesoft.core.model.PagerModel;
import cn.jeesoft.core.utils.DateUtils;
import cn.jeesoft.core.utils.DateUtils.FieldType;
import cn.jeesoft.mvc.dao.BaseDao;
/**
* 服务基类
* @author king
*/
public abstract class BaseService<M extends BaseBean> {
@Resource
private BaseDao dao;
@Resource(name = "baseDao")
public void setDao(BaseDao dao) {
this.dao = dao;
}
public BaseDao getDao() {
return dao;
}
/**
* 获取表名
*/
public abstract String getTablename();
/**
* 查询集合
* @param bean
* @return
*/
public List<M> selectList(M bean) {
return dao.selectList(getTablename()+".selectList", bean);
}
/**
* 分页查询
* @param pager
* @return
*/
public <Q extends BaseBean, P extends PagerModel<M, Q>> P selectPageList(P pager) {
return selectPageList("selectPageList", "selectPageCount", pager);
}
/**
* 分页查询
* @param selectList 查询SQL的ID名称
* @param selectCount 查询SQL的ID名称
* @param pager
* @return
*/
public <Q extends BaseBean, P extends PagerModel<M, Q>> P selectPageList(String selectList, String selectCount, P pager) {
if (pager.getOffset() < 0)
pager.setOffset(0);
if (pager.getQuery() == null) {
pager.setQuery(pager.createQueryBean());
}
if (pager.getEndTime() != null) {
pager.setEndTime(DateUtils.append(pager.getEndTime(), FieldType.DAY, 1));
}
// 执行查询
pager = (P) dao.selectPageList(getTablename()+"."+selectList,
getTablename()+"."+selectCount,
pager);
if (pager.getEndTime() != null) {
pager.setEndTime(DateUtils.append(pager.getEndTime(), FieldType.DAY, -1));
}
// 计算总页数
pager.setPageCount((pager.getTotal() + pager.getPageSize() - 1) / pager.getPageSize());
return pager;
}
/**
* 查询单个实体
* @param bean
* @return
*/
public M selectOne(M bean) {
return dao.selectOne(getTablename()+".selectOne", bean);
}
/**
* 删除单个实体
* @param bean
* @return 删除的记录条数
*/
public int delete(M bean) {
return dao.delete(getTablename()+".delete", bean);
}
/**
* 更新单个实体
* @param bean
* @return 更新的记录条数
* @throws Exception
*/
public int update(M bean) {
return dao.update(getTablename()+".update", bean);
}
/**
* 插入单条记录
* @param bean
* @return 新插入记录的主键ID
*/
public int insert(M bean) {
return dao.insert(getTablename()+".insert", bean);
}
/**
* 删除单条记录
* @param id
* @return 删除的记录条数
*/
public int deleteById(int id) {
return dao.delete(getTablename()+".deleteById", id);
}
/**
* 查询单条记录
* @param id
* @return
*/
public M selectById(int id) {
return dao.selectOne(getTablename()+".selectById", id);
}
/**
* 统计
* @return 统计结果
*/
public int selectCount() {
return dao.getCount(getTablename()+".selectCount");
}
/**
* 删除多条记录
* @param ids 要删除的行ID
* @return 删除成功的记录集合
*/
public List<Integer> deletes(int... ids) {
List<Integer> idArray = new ArrayList<Integer>();
for (int i = 0; i < ids.length; i++) {
int id = ids[i];
if (deleteById(id) > 0) {
idArray.add(id);
}
}
return idArray;
}
}