package com.yanzuoguang.service.impl; import com.yanzuoguang.dao.BaseDao; import com.yanzuoguang.service.BaseService; import com.yanzuoguang.util.helper.StringHelper; import java.util.ArrayList; import java.util.List; /** * 基本服务实现 * * @author 颜佐光 */ public abstract class BaseServiceImpl<T> implements BaseService<T> { /** * 数据类的类型 */ protected Class<T> dataClass; /** * 标识 */ protected String tag; /** * 构造函数 * * @param cls */ public BaseServiceImpl(Class<T> cls, String tag) { this.dataClass = cls; this.tag = tag; } /** * 获取Dao类来处理 * * @return Dao层操作类 */ protected abstract BaseDao getDao(); /** * 创建数据 * * @param models 需要创建的数据 */ @Override public List<String> create(T... models) { List<String> ids = new ArrayList<>(); for (T t : models) { String id = createItem(t); ids.add(id); } return ids; } /** * 创建一项 * * @param item * @return */ protected String createItem(T item) { String id = this.getDao().create(item); check("创建", this.tag, id); return id; } /** * 修改数据 * * @param models 需要修改的数据 */ @Override public List<String> update(T... models) { List<String> ids = new ArrayList<>(); for (T t : models) { String id = updateItem(t); ids.add(id); } return ids; } /** * 修改一项数据 * * @param item * @return */ protected String updateItem(T item) { String id = this.getDao().update(item); check("修改", this.tag, id); return id; } /** * 保存数据 * * @param models 需要保存的数据 */ @Override public List<String> save(T... models) { List<String> ids = new ArrayList<>(); for (T item : models) { String id = saveItem(item); ids.add(id); } return ids; } /** * 保存其中一项 * * @param item * @return */ protected String saveItem(T item) { String id = this.getDao().save(item); check("保存", this.tag, id); return id; } /** * 删除数据 * * @param models 需要删除的数据 */ @Override public int remove(T... models) { int ret = 0; for (T item : models) { ret += removeItem(item); } return ret; } /** * 删除其中一项 * * @param item * @return */ protected int removeItem(T item) { int id = this.getDao().remove(item); check("删除", this.tag, id); return id; } /** * 加载数据 * * @param models 需要删除的数据 */ @Override public List<T> load(T... models) { List<T> tos = new ArrayList<>(); for (T item : models) { T to = loadItem(item); tos.add(to); } return tos; } /** * 加载单个数据 * * @param item * @return */ protected T loadItem(T item) { T to = this.getDao().load(item, dataClass); check("加载", this.tag, to); return to; } /** * 检测编号 * * @param opTag 操作标识 * @param serviceTag 服务标识 * @param id ID编号 */ private void check(String opTag, String serviceTag, Object id) { if (StringHelper.isEmpty(id)) { throw new RuntimeException(opTag + serviceTag + "失败,该数据可能已被修改"); } } }