BaseServiceImpl.java 3.8 KB
package com.yanzuoguang.service.Impl;

import com.yanzuoguang.dao.BaseDao;
import com.yanzuoguang.service.BaseService;
import com.yanzuoguang.util.exception.CodeException;
import com.yanzuoguang.util.helper.StringHelper;

import java.util.ArrayList;
import java.util.List;

/**
 * 基本服务实现
 * created by yanzu on 2017/5/31.
 */
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;
    }


    /**
     * @param
     * @return
     * @description 获取Dao类来处理
     */
    protected abstract BaseDao getDao();

    /**
     * 创建数据
     *
     * @param models 需要创建的数据
     */
    public List<String> create(T... models) {
        List<String> ids = new ArrayList<String>();
        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 需要修改的数据
     */
    public List<String> update(T... models) {
        List<String> ids = new ArrayList<String>();
        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 需要保存的数据
     */
    public List<String> save(T... models) {
        List<String> ids = new ArrayList<String>();
        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 需要删除的数据
     */
    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 需要删除的数据
     */
    public List<T> load(T... models) {
        List<T> tos = new ArrayList<T>();
        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 CodeException(opTag + serviceTag + "失败,该数据可能已被修改");
        }
    }

}