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()); } } }