BServiceImpl.java 5.14 KB
package com.bsth.service.schedule.impl;

import com.bsth.entity.search.CustomerSpecs;
import com.bsth.repository.BaseRepository;
import com.bsth.service.schedule.BService;
import com.bsth.service.schedule.exception.ScheduleException;
import com.bsth.service.schedule.utils.DataToolsService;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;

import javax.persistence.EntityManager;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 基础BService实现。
 */
public class BServiceImpl<T, ID extends Serializable> implements BService<T, ID> {
    @Autowired
    private BaseRepository<T, ID> baseRepository;
    @Autowired
    private EntityManager entityManager;
    @Value("${hibernate.jdbc.batch_size}")
    private int batchSize;

    @Autowired
    @Qualifier(value = "dataToolsServiceImpl")
    private DataToolsService dataToolsService;

    /** 日志记录器 */
    protected Logger logger = LoggerFactory.getLogger(this.getClass());

    // CRUD 操作
    // Create,Update操作
    @Override
    public T save(T t) {
        if (logger.isDebugEnabled()) {
            logger.debug("save...");
        }
        return baseRepository.save(t);
    }
    @Override
    public <S extends T> List<S> bulkSave(List<S> entities) {
        if (logger.isDebugEnabled()) {
            logger.debug("bulkSave...");
        }

        // 不使用内部批量保存,自己实现批量保存
        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;
    }

    // Research操作
    @Override
    public T findById(ID id) {
        if (logger.isDebugEnabled()) {
            logger.debug("findById...");
        }

        return baseRepository.findOne(id);
    }
    @Override
    public List<T> findAll() {
        if (logger.isDebugEnabled()) {
            logger.debug("findAll...");
        }

        return (List<T>) baseRepository.findAll();
    }
    @Override
    public Page<T> list(Map<String, Object> param, Pageable pageable) {
        if (logger.isDebugEnabled()) {
            logger.debug("list(...,pageable)...");
        }

        // 自定义查询参数
        Specification<T> specification = new CustomerSpecs<>(param);
        return baseRepository.findAll(specification, pageable);
    }
    @Override
    public List<T> list(Map<String, Object> param) {
        if (logger.isDebugEnabled()) {
            logger.debug("list...");
        }

        // 自定义查询参数
        Specification<T> specification = new CustomerSpecs<>(param);
        return baseRepository.findAll(specification);
    }
    // Delete操作
    @Override
    public void delete(ID id) throws ScheduleException {
        if (logger.isDebugEnabled()) {
            logger.debug("delete...");
        }

        baseRepository.delete(id);
    }

    @Override
    public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
        try {
            // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1
            File file = dataToolsService.uploadFile(filename, filedata);
            Workbook workbook = Workbook.getWorkbook(file);
            Sheet sheet = workbook.getSheet(0);

            File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");
            WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);
            WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);
            for (int i = 0; i < sheet.getRows(); i++) {
                Cell[] cells = sheet.getRow(i);
                for (int j = 0; j < cells.length; j++) {
                    writableSheet.addCell(new Label(j, i, cells[j].getContents()));
                }
            }
            writableWorkbook.write();
            writableWorkbook.close();

            return fileCal;

        } catch (Exception exp) {
            throw new ScheduleException(exp);
        }

    }

    @Override
    public void importData(File file, Map<String, Object> params) throws ScheduleException {
        dataToolsService.importData(file, params);
    }

    @Override
    public File exportData(Map<String, Object> params) throws ScheduleException {
        return dataToolsService.exportData(params);
    }
}