Cloud native 与 Spring Cloud 最佳实践

Cloud native 与 Spring Cloud_入门_3_CRUD之service层

Service 接口

service/ProductService.java

public interface ProductService {
    Product findById(Integer id);

    PageInfo<Product> search(ProductSearchInput input);

    Integer create(ProductInput record);

    int batchInsert(List<Product> list);

    int update(Integer productId, ProductInput record);

    void deleteByIds(List<String> ids);

    ResponseEntity<InputStreamResource> exportCsv(ProductSearchInput searchInput);

    void importCsv(InputStream is);

}
Service 实现

service/ProductServiceImpl.java

@Service
@Slf4j
public class ProductServiceImpl implements ProductService {
    @Resource
    private ProductMapper productMapper;

    public PageInfo<Product> search(ProductSearchInput input) {
        PageHelper.startPage(input.getPage(), input.getLimit());
        List<Product> records = productMapper.search(input.getKeyword());
        return new PageInfo<Product>(records);
    }

    @Override
    public Product findById(Integer productId) {
        return productMapper.selectByPrimaryKey(productId);
    }

    @Override
    public Integer create(ProductInput input) {
        Product record = new Product();
        BeanUtil.copyProperties(input, record);
        record.setCreateTime(new Date());
        record.setUpdateTime(new Date());

        productMapper.insertSelective(record);
        Integer productId = record.getProductId();
        return productId;
    }

    @Override
    public int batchInsert(List<Product> list) {
        return productMapper.batchInsert(list);
    }

    @Override
    public int update(Integer productId, ProductInput input) {
        Product record = new Product();
        BeanUtil.copyProperties(input, record);
        record.setProductId(productId);
        record.setUpdateTime(new Date());
        return productMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public void deleteByIds(List<String> ids) {
        List<Integer> deletedIds = ids.stream().map(Integer::parseInt).collect(Collectors.toList());
        if (!deletedIds.isEmpty()) {
            productMapper.deleteByIds(deletedIds);
        }
    }

    @Override
    public ResponseEntity<InputStreamResource> exportCsv(ProductSearchInput input) {
        // replace this with your header (if required)
        String[] csvHeader = {"Id", "Name", "Weight"};

        // replace this with your data retrieving logic
        List<Product> products = productMapper.search(input.getKeyword());

        List<Object[]> records = new ArrayList<>();
        for (Product product : products) {
            records.add(new Object[]{product.getProductId(), product.getName(), product.getWeight()});
        }
        ResponseEntity<InputStreamResource> res = CsvUtil.export(csvHeader, records, "product.csv");

        return res;

    }

    @Override
    public void importCsv(InputStream is) {
        try {
            Reader reader = new InputStreamReader(is);
            List<CSVRecord> records = CSVFormat.EXCEL.parse(reader).getRecords();

            List<Product> products = new ArrayList<>();
            for (CSVRecord record : records) {
                Product product = new Product();
                // skip product id
                product.setName(record.get(1));
                product.setWeight(Integer.parseInt(record.get(2)));
                product.setCreateTime(new Date());
                product.setUpdateTime(new Date());

                products.add(product);
            }
            productMapper.batchInsert(products);

        } catch (Exception e) {
            log.error("Error import csv.", e);
            throw new RuntimeException(e.getMessage());
        }
    }

}