BaseServiceImpl.java 3.57 KB
package com.bsth.service.impl;

import com.bsth.common.ResponseCode;
import com.bsth.entity.search.CustomerSpecs;
import com.bsth.repository.BaseRepository;
import com.bsth.service.BaseService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import javax.persistence.EntityManager;
import java.io.Serializable;
import java.util.*;

public class BaseServiceImpl<T, ID extends Serializable> implements BaseService<T, ID>{

	@Autowired
	private BaseRepository<T, ID> baseRepository;
    @Autowired
    private EntityManager entityManager;
    @Value("${hibernate.jdbc.batch_size}")
    private int batchSize;
	
	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Override
	public Page<T> list(Map<String, Object> map, Pageable pageable) {
		return this.baseRepository.findAll(new CustomerSpecs<T>(map), pageable);
	}
	
	@Override
	public Iterable<T> list(Map<String, Object> map) {
		return this.baseRepository.findAll(new CustomerSpecs<T>(map));
	}
	
	@Override
	public T findById(ID id) {
		return baseRepository.findOne(id);
	}

	@Override
	public Map<String, Object> save(T t) {
		Map<String, Object> map = new HashMap<>();
        baseRepository.save(t);
        map.put("status", ResponseCode.SUCCESS);
        map.put("t", t);
		return map;
	}

    @Override
    public <S extends T> Collection<S> bulkSave(Collection<S> entities) {
        final List<S> savedEntities = new ArrayList<>(entities.size());
        int i = 0;
        for (S t : entities) {
            entityManager.persist(t);
            savedEntities.add(t);
            i++;
            if (i % batchSize == 0) {
                entityManager.flush();
                entityManager.clear();
            }
        }

        return savedEntities;
    }

    @Override
	public Iterable<T> findAll() {
		return baseRepository.findAll();
	}

	@Override
	public Map<String, Object> delete(ID id) {
		Map<String, Object> map = new HashMap<>();
		try{
			baseRepository.delete(id);
			map.put("status", ResponseCode.SUCCESS);
		}catch(DataIntegrityViolationException de){
			map.put("status", ResponseCode.ERROR);
			map.put("msg", "“完整性约束”校验失败,请检查要删除的对象是否存在外键约束");
		}
		return map;
	}

    @Override
    public Map<String, Object> validateEquale(Map<String, Object> params) {
        Map<String, Object> returnMap = new HashMap<>();

        try {
            if (params == null || params.size() == 0) {
                returnMap.put("status", ResponseCode.SUCCESS);
                returnMap.put("msg", "此时没有重复");
            } else {
                Iterable<T> iterable = list(params);
                if (iterable.iterator().hasNext()) {
                    returnMap.put("status", ResponseCode.ERROR);
                    returnMap.put("msg", "数据重复");
                } else {
                    returnMap.put("status", ResponseCode.SUCCESS);
                    returnMap.put("msg", "没有重复");
                }
            }
        } catch (Exception exp) {
            logger.error("validateEquale error", exp);
            returnMap.put("status", ResponseCode.ERROR);
            returnMap.put("msg", exp.getLocalizedMessage());
        }

        return returnMap;
    }
}