栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot 统计各个状态的数据

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot 统计各个状态的数据

例如不同状态的订单量。

创建一个实体作为出参



@Data
public class OrderDataStatisticsVo {

    
    private Long toBePaidNum = 0L;
    
    private Long paidNum = 0L;
    
    private Long cancelNum = 0L;
    
    private Long shippedNum = 0L;
    
    private Long signedInNum = 0L;
    
    private Long refundedNum = 0L;


}

实体:



@Data
@EqualsAndHashCode(callSuper=false)
@TableName("tb_orders")
public class OrdersEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	@TableId
	private Long id;

    
	private Integer orderState;

//其他字段省略

}
controller:

 @GetMapping("dataStatistics")
    @ApiOperation("数据统计")
    public R dataStatistics(OrdersDTO ordersDTO){
        return ordersService.dataStatistics(ordersDTO);
    }
Service:
R dataStatistics(OrdersDTO ordersDTO);

两种实现方式:

第一种(sql实现)

Service的实现:

@Service
public class OrdersServiceImpl extends CrudServiceImpl implements OrdersService {

    private static final Logger logger = LoggerFactory.getLogger(OrdersServiceImpl.class);

    @Autowired
    private OrdersDao ordersDao;


 public R dataStatistics(OrdersDTO ordersDTO) {
        logger.info("dataStatistics ordersDTO: {}", ordersDTO);
        return R.ok(ordersDao.dataStatistics(ordersDTO));
    }

}
OrdersDao:
OrderDataStatisticsVo dataStatistics(OrdersDTO ordersDTO);
OrdersDao.xml

        select
        SUM(CASE order_state WHEN 0 THEN 1 ELSE 0 END)  as toBePaidNum,
        SUM(CASE order_state WHEN 1 THEN 1 ELSE 0 END)  as paidNum,
        SUM(CASE order_state WHEN 2 THEN 1 ELSE 0 END)  as cancelNum,
        SUM(CASE order_state WHEN 4 THEN 1 ELSE 0 END)  as shippedNum,
        SUM(CASE order_state WHEN 5 THEN 1 ELSE 0 END)  as signedInNum,
        SUM(CASE order_state WHEN 6 THEN 1 ELSE 0 END)  as refundedNum
        from
        tb_orders
        
            
                and id = #{id}
            
            
                and order_no = #{orderNo}
            
            
                and goods_name like CONCAt('%',#{goodsName},'%')
            
            
                and phone = #{phone}
            
            
                and order_state = #{orderState}
            
            
                and pay_state = #{payState}
            
            
                and channel_source = #{channelSource}
            
            
                and payment_method = #{paymentMethod}
            
            
                and date_format(create_time,'%Y-%m-%d') >= str_to_date(#{startTime},'%Y-%m-%d')
            
            
                and date_format(create_time,'%Y-%m-%d') <= str_to_date(#{endTime},'%Y-%m-%d')
            
            
                and date_format(pay_time,'%Y-%m-%d') >= str_to_date(#{payStartTime},'%Y-%m-%d')
            
            
                and date_format(pay_time,'%Y-%m-%d') <= str_to_date(#{payEndTime},'%Y-%m-%d')
            
        
    

第二种(业务实现)

Service的实现:

@Service
public class OrdersServiceImpl extends CrudServiceImpl implements OrdersService {

    private static final Logger logger = LoggerFactory.getLogger(OrdersServiceImpl.class);

    @Autowired
    private OrdersDao ordersDao;

public R dataStatistics(OrdersDTO ordersDTO) {
        logger.info("dataStatistics ordersDTO: {}", ordersDTO);
        QueryWrapper queryWrapper = buildWrapper(ordersDTO);
        queryWrapper.select("id","order_state");
        List list = ordersDao.selectList(queryWrapper);
        Map map = list.stream().collect(Collectors.groupingBy(OrdersEntity::getOrderState,Collectors.counting()));
        OrderDataStatisticsVo orderDataStatisticsVo = new OrderDataStatisticsVo();
        map.forEach((k,v)->{
            switch (k){
                case 0:
                    orderDataStatisticsVo.setToBePaidNum(v);
                    break;
                case 1:
                    orderDataStatisticsVo.setPaidNum(v);
                    break;
                case 2:
                    orderDataStatisticsVo.setCancelNum(v);
                    break;
                case 4:
                    orderDataStatisticsVo.setShippedNum(v);
                    break;
                case 5:
                    orderDataStatisticsVo.setSignedInNum(v);
                    break;
                case 6:
                    orderDataStatisticsVo.setRefundedNum(v);
                    break;
            }
        });
        return R.ok(orderDataStatisticsVo);
    }


private QueryWrapper buildWrapper(OrdersDTO ordersDTO) {
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.eq(ordersDTO.getId() != null, "id", ordersDTO.getId());
        wrapper.eq(StringUtils.isNotBlank(ordersDTO.getOrderNo()), "order_no", ordersDTO.getOrderNo());
        wrapper.like(StringUtils.isNotBlank(ordersDTO.getGoodsName()), "goods_name", ordersDTO.getGoodsName());
        wrapper.eq(StringUtils.isNotBlank(ordersDTO.getPhone()), "phone", ordersDTO.getPhone());
        wrapper.eq(ordersDTO.getOrderState() != null, "order_state", ordersDTO.getOrderState());
        wrapper.eq(ordersDTO.getPayState() != null, "pay_state", ordersDTO.getPayState());
        wrapper.eq(StringUtils.isNotBlank(ordersDTO.getChannelSource()), "channel_source", ordersDTO.getChannelSource());
        wrapper.eq(ordersDTO.getPaymentMethod() != null, "payment_method", ordersDTO.getPaymentMethod());

        if (StringUtils.isNotBlank(ordersDTO.getEndTime())) {
            ordersDTO.setEndTime(DateUtils.format(DateUtils.addDateDays(DateUtils.parse(ordersDTO.getEndTime(),
                    DateUtils.DATE_PATTERN), 1), DateUtils.DATE_PATTERN));
            wrapper.lt("create_time", ordersDTO.getEndTime());
        }
        if (StringUtils.isNotBlank(ordersDTO.getStartTime())) {
            wrapper.ge("create_time", ordersDTO.getStartTime());
        }
        if (StringUtils.isNotBlank(ordersDTO.getPayEndTime())) {
            ordersDTO.setPayEndTime(DateUtils.format(DateUtils.addDateDays(DateUtils.parse(ordersDTO.getPayEndTime(),
                    DateUtils.DATE_PATTERN), 1), DateUtils.DATE_PATTERN));
            wrapper.lt("pay_time", ordersDTO.getPayEndTime());
        }
        if (StringUtils.isNotBlank(ordersDTO.getPayStartTime())) {
            wrapper.ge("pay_time", ordersDTO.getPayStartTime());
        }
        wrapper.orderByDesc("id");
        return wrapper;
    }
}

验证:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/306643.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号