开发中遇到的场景描述
- 使用 Echars 做订单金额统计, 横纵坐标分别要用到两组数据. 采用OrderStatisticsVo 返回, 但是要查询的表, 查完后需要对数据进行处理,分别是两个集合
- OrderStatisticsVo
@Data
@Schema(description = "统计结果实体类")
public class OrderStatisticsVo {@Schema(description = "日期数据集合")private List<String> dateList ;@Schema(description = "总金额数据集合")private List<BigDecimal> amountList ;
}
@Data
public class OrderStatistics extends BaseEntity {private Date orderDate;private BigDecimal totalAmount;private Integer totalNum;
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.chen.manager.mapper.OrderStatisticsMapper"><select id="getOrderStatisticsData" resultType="com.chen.model.entity.order.OrderStatistics">select * from order_statistics<where>is_deleted=0<if test="createTimeBegin!=null and createTimeBegin!=''">and create_time >=#{createTimeBegin}</if><if test="createTimeEnd!=null and createTimeEnd!=''">and create_time <=#{createTimeEnd}</if></where></select>
</mapper>
- services 层的代码,调用mapper去查询 OrderStatistics 实体类
然后对数据进行封装.传统的写法
@Service
public class OrderInfoServiceImpl implements OrderInfoService {@Autowiredprivate OrderStatisticsMapper orderStatisticsMapper;@Overridepublic OrderStatisticsVo getOrderStatisticsData(OrderStatisticsDto orderStatisticsDto) {OrderStatisticsVo orderStatisticsVo = new OrderStatisticsVo();List<OrderStatistics> orderStatisticsList=orderStatisticsMapper.getOrderStatisticsData(orderStatisticsDto);if(CollectionUtil.isEmpty(orderStatisticsList)){throw new MyException(229,"所选时间没有数据");}ArrayList<String> dataList = new ArrayList<>();ArrayList<BigDecimal> amountList = new ArrayList<>();for (OrderStatistics orderStatistics : orderStatisticsList) {dataList.add(DateUtil.format(orderStatistics.getOrderDate(),"yyyy-MM-dd"));amountList.add(orderStatistics.getTotalAmount());}orderStatisticsVo.setAmountList(amountList);orderStatisticsVo.setDateList(dataList);return orderStatisticsVo;}
}
用stream流中的方法 map 进行处理
演变过程 (看了好理解)
@Service
public class OrderInfoServiceImpl implements OrderInfoService {@Autowiredprivate OrderStatisticsMapper orderStatisticsMapper;@Overridepublic OrderStatisticsVo getOrderStatisticsData(OrderStatisticsDto orderStatisticsDto) {OrderStatisticsVo orderStatisticsVo = new OrderStatisticsVo();List<OrderStatistics> orderStatisticsList=orderStatisticsMapper.getOrderStatisticsData(orderStatisticsDto);if(CollectionUtil.isEmpty(orderStatisticsList)){throw new MyException(229,"所选时间没有数据");}
orderStatisticsVo.setDateList(orderStatisticsList.stream().map(orderStatistics ->DateUtil.format(orderStatistics.getOrderDate(), "yyyy-MM-dd")).collect(Collectors.toList()));
orderStatisticsVo.setAmountList(orderStatisticsList.stream().map(orderStatistics -> orderStatistics.getTotalAmount()).collect(Collectors.toList()));return orderStatisticsVo;}
}
最简写法
@Service
public class OrderInfoServiceImpl implements OrderInfoService {@Autowiredprivate OrderStatisticsMapper orderStatisticsMapper;@Overridepublic OrderStatisticsVo getOrderStatisticsData(OrderStatisticsDto orderStatisticsDto) {OrderStatisticsVo orderStatisticsVo = new OrderStatisticsVo();List<OrderStatistics> orderStatisticsList=orderStatisticsMapper.getOrderStatisticsData(orderStatisticsDto);if(CollectionUtil.isEmpty(orderStatisticsList)){throw new MyException(229,"所选时间没有数据");}orderStatisticsVo.setDateList(orderStatisticsList.stream().map(orderStatistics ->DateUtil.format(orderStatistics.getOrderDate(), "yyyy-MM-dd")).collect(Collectors.toList()));orderStatisticsVo.setAmountList(orderStatisticsList.stream().map(orderStatistics -> orderStatistics.getTotalAmount()).collect(Collectors.toList()));return orderStatisticsVo;}
}
