All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.yt.mybatis.service.impl.ServiceSupport Maven / Gradle / Ivy

There is a newer version: 3.0.1
Show newest version
package com.github.yt.mybatis.service.impl;

import com.github.yt.mybatis.config.fields.FieldsConfiguration;
import com.github.yt.mybatis.config.fields.FieldsDefault;
import com.github.yt.mybatis.dao.BaseMapper;
import com.github.yt.mybatis.domain.BaseEntity;
import com.github.yt.mybatis.handler.QueryHandler;
import com.github.yt.mybatis.result.QueryResult;
import com.github.yt.mybatis.service.BaseService;
import com.github.yt.mybatis.utils.BeanUtils;
import com.github.yt.mybatis.utils.JPAUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


public abstract class ServiceSupport> implements BaseService {

    protected Logger logger = LoggerFactory.getLogger(this.getClass());

    public abstract M getMapper();

    @Override
    public void save(T entity) {
        this.processCreateColumns(entity);
        getMapper().save(entity);
    }

    @Override
    public void saveBatch(List entities) {
        if (CollectionUtils.isEmpty(entities)) {
            return;
        }
        if (BaseEntity.class.isAssignableFrom(entities.get(0).getClass())) {
            for (T entity : entities) {
                this.processCreateColumns(entity);
            }
        }
        getMapper().saveBatch(entities);
    }

    @Override
    public void saveForSelective(T entity) {
        this.processCreateColumns(entity);
        getMapper().saveForSelective(entity);
    }

    @Override
    public void update(T entity) {
        if (null == JPAUtils.gtIdValue(entity)) {
            return;
        }
        processModifyColumns(entity);
        getMapper().update(entity);
    }

    @Override
    public void updateForSelective(T entity) {
        if (null == JPAUtils.gtIdValue(entity)) {
            return;
        }
        this.processModifyColumns(entity);
        getMapper().updateForSelective(entity);
    }

    @Override
    public void delete(Class clazz, Serializable id) {
        getMapper().delete(clazz, id);
    }

    @Override
    public void logicDelete(Class clazz, Serializable id) {
        getMapper().logicDelete(clazz, id);
    }

    @Override
    public T find(Class clazz, Serializable id) {
        return getMapper().find(clazz, id);
    }

    @Override
    public List findAll(T entity) {
        return getMapper().findAll((Class) entity.getClass(), BeanUtils.getValueMap(null, entity));
    }

    @Override
    public List findAll(T entity, QueryHandler queryHandler) {
        if (queryHandler == null) {
            return getMapper().findAll((Class) entity.getClass(), BeanUtils.getValueMap(queryHandler, entity));
        } else {
            return getMapper().findAll((Class) entity.getClass(), BeanUtils.getValueMap(queryHandler, entity)
                    .chainPutAll(queryHandler == null ? null : queryHandler.getExpandData()));
        }
    }

    @Override
    public QueryResult getData(T entity, QueryHandler queryHandle) {
        QueryResult qr = new QueryResult();
        qr.setRecordsTotal(getMapper().pageTotalRecord((Class) entity.getClass(), BeanUtils.getValueMap(queryHandle, entity)
                .chainPutAll(queryHandle == null ? null : queryHandle.getExpandData())));
        if (qr.getRecordsTotal() == 0) {
            qr.setData(new ArrayList());
            return qr;
        }
        qr.setData(getMapper().pageData((Class) entity.getClass(), BeanUtils.getValueMap(queryHandle, entity).chainPutAll
                (queryHandle == null ? null : queryHandle.getExpandData())));
        return qr;
    }

    private Object getSessionAttr(String attr) {
        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getSession()
                .getAttribute(attr);
    }

    private void setFounder(BaseEntity entity) {
        FieldsDefault fieldsDefault = FieldsConfiguration.create();
        try {
            if (StringUtils.isEmpty(entity.getFounderId())) {
                entity.setFounderId(fieldsDefault.getOperatorId());
            }
            if (StringUtils.isEmpty(entity.getFounderName())) {
                entity.setFounderName(fieldsDefault.getOperator());
            }
        } catch (Exception e) {
            logger.debug("setFounder时session获取失败!");
            entity.setFounderId(fieldsDefault.getOperatorId());
            entity.setFounderName(fieldsDefault.getOperator());
        }
    }

    private void setModifyFounder(BaseEntity entity) {
        FieldsDefault fieldsDefault = FieldsConfiguration.create();
        try {
            if (StringUtils.isEmpty(entity.getModifierId())) {
                entity.setFounderId(fieldsDefault.getModifyOperatorId());
            }
            if (StringUtils.isEmpty(entity.getModifierName())) {
                entity.setFounderName(fieldsDefault.getModifyOperator());
            }
        } catch (Exception e) {
            logger.info("update时session获取失败!");
            entity.setModifierId(fieldsDefault.getModifyOperatorId());
            entity.setModifierName(fieldsDefault.getModifyOperator());
        }
    }

    private void processCreateColumns(T entity) {
        if (entity instanceof BaseEntity) {
            BaseEntity baseEntity = ((BaseEntity) entity);
            if (baseEntity.getCreateDateTime() == null) {
                baseEntity.setCreateDateTime(new Date());
            }
            if (baseEntity.getModifyDateTime() == null) {
                baseEntity.setModifyDateTime(baseEntity.getCreateDateTime());
            }
            setFounder((BaseEntity) entity);
        }
    }

    private void processModifyColumns(T entity) {
        if (entity instanceof BaseEntity) {
            BaseEntity baseEntity = ((BaseEntity) entity);
            if (baseEntity.getModifyDateTime() == null) {
                baseEntity.setModifyDateTime(new Date());
            }
            this.setModifyFounder((BaseEntity) entity);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy