turnover = turnover == null ? 0.0 : turnover;
TurnoverReportVO
.builder()
.dateList(StringUtils.join(dateList,","))
.turnoverList(StringUtils.join(turnoverList,","))
.build();
通过apache.lang3中的StringUtils能实现将List中的数据转换成逗号分隔的字符串,并且List中可装任意的数据类型
public Result<TurnoverReportVO> turnoverStatistics(
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end ) {
return Result.success(reportService.turnoverStatistics(begin,end));
}
//获得时间段中的订单总数
Integer totalOrderCount = orderCountList.stream().reduce(Integer::sum).get();
//有效比例
Double orderCompletionRate = 0.0;
if(totalOrderCount != 0){
orderCompletionRate = totalValidOrderCount.doubleValue() / totalOrderCount.doubleValue();
}
注意:做除法时,记得分母不能为0,要做非0判断
<select id="getByTime" resultType="com.sky.dto.GoodsSalesDTO">
select
od.name,sum(od.number)
from order_detail od, orders o
where od.oders_id = o.id and o.status = 5
<if test="beginTime != null">
and o.order_time >= #{beginTime}
</if>
<if test="endTime != null">
and o.order_time <= #{endTime}
</if>
//两表联查+条件限制
group by
od.name //分组才能查出来
order by
sum(od.number) desc /*按照倒叙排列*/
limit 10
</select>
<select id="getByTime" resultType="com.sky.dto.GoodsSalesDTO">
select
od.name,sum(od.number) number
from order_detail od, orders o
where od.order_id = o.id and o.status = 5
<if test="beginTime != null">
and o.order_time >= #{beginTime}
</if>
<if test="endTime != null">
and o.order_time <= #{endTime}
</if>
group by
od.name
order by
number desc /*按照倒叙排列*/
limit 10
</select>
解决方法:由于返回类型为GoodsSalesDTO(内含name,number两个类变量),所以查询出来的数据,也应该命名为name,number,做到一一对应才能把查到的数据储存到DTO中.
List<GoodsSalesDTO> goodsSalesDTOS = ordersMapper.getByTime(beginTime, endTime);
//上方是个List,下面对List进行Stream流处理
List<String> name = goodsSalesDTOS.stream().map(GoodsSalesDTO::getName).collect(Collectors.toList());
String nameList = StringUtils.join(name, ",");
<select id="countByMap" resultType="java.lang.Integer">
select count(id) from user
<where>
<if test="beginTime != null">
and create_time >= #{begin}
</if>
<if test="endTime != null">
and create_time <= #{end}
</if>
</where>
</select>
解决方法:把beginTime改成传入的数据的变量名(begin).