Callable实战

@Override
    public List<OrderChargeDetailDTO> selectSumAmount(QueryOrderDTO dto) {
        if (CollectionUtil.isEmpty(dto.getOrderIdList())){
	        List<OrderChargeDetailDTO> orderChargeDetailDTOS = this.baseMapper.selectSumAmount(dto);
	        log.info("=====selectSumAmount{}======",orderChargeDetailDTOS);
        	return orderChargeDetailDTOS;
        }else {
            List<Long> orderIdList = dto.getOrderIdList();
            log.info("=========orderIdList{}========", orderIdList.size());
            if (orderIdList.size() <= 20000) {
                List<OrderChargeDetailDTO> result = this.baseMapper.selectSumAmount(dto, orderIdList);
                return result;
            }
            List<Future> futureList = new ArrayList(8);
            List<Long> orderIds;
            for (int i = 0; i <= orderIdList.size() / 20000; i++) {
                if (i != orderIdList.size() / 20000) {
                    orderIds = orderIdList.subList(i * 20000, (i + 1) * 20000);
                } else {
                    orderIds = orderIdList.subList(i * 20000, orderIdList.size());
                }
                List<Long> finalOrderIds = orderIds;
                Callable cal = () -> {
                    log.info("========submit{}=======", finalOrderIds.size());
                    return this.baseMapper.selectSumAmount(dto, finalOrderIds);
                };
                Future<QueryOrderStaticDTO> submit = queryExecutor.submit(cal);
                futureList.add(submit);
            }
            List<OrderChargeDetailDTO> result = new ArrayList<>(orderIdList.size());
            try {
                for (Future<List<OrderChargeDetailDTO>> message : futureList) {
                    List<OrderChargeDetailDTO> detailDTOS = message.get();
                    result.addAll(detailDTOS);
                    log.info("======dto{}======", detailDTOS);
                }
            } catch (Exception e) {
                log.error("[]order-domain[]OrderInfoServiceImpl[]selectSumAmount[] query error", e);
                throw new BizException("统计异常");
            }
            return result;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值