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