根据条件查询一张很大表的数据:比如,根据 对账日期, 渠道编号和全部的交易类型查询数据查询数据t_cbs_recon_bank_order_cps这张表的数据量很大
交易类型:有 像: 消费 退货 线下退货 快退 托收等
正常的思路: 将交易类型封装成一个List,然后作为参数传进去, 这样整个表查询的话, 会很慢。
解决: 类似于分区的的思想, 将不同交易类型的数据查出来, 然后放到一个List里面, 这样速度要快很多。
还有一点: 查询传入的参数是HashMap来封装参数的, 让mybatis来根据hashMap参数来查询
private void queryDataList(BankOrderDetailStatisticForm form, List<BankOrderDetailStaticDto> bankOrderDetailStaticList) {
// 手工录入表
ReconBankOrderHandleForQuery handleForQuery = new ReconBankOrderHandleForQuery();
handleForQuery.setChannelNo(form.getChannelNo());
handleForQuery.setReconDate(form.getReconDate());
List<ReconBankOrderHandleDto> bankOrderHandleDtoList = bankOrderHandleService.statisticBankOrderDetail(handleForQuery);
if (CollectionUtils.isNotEmpty(bankOrderHandleDtoList)) {
for (ReconBankOrderHandleDto bankOrderHandleDto : bankOrderHandleDtoList) {
Long cost = bankOrderHandleDto.getCost() != null ? bankOrderHandleDto.getCost() : 0L;
Long orderAmount = bankOrderHandleDto.getOrderAmount() != null ? bankOrderHandleDto.getOrderAmount() : 0L;
Long settleAmount = bankOrderHandleDto.getSettleAmount() != null ? bankOrderHandleDto.getSettleAmount() : 0L;
Long transType = bankOrderHandleDto.getBankTransType();
if (!cost.equals(0) && !orderAmount.equals(0) && !settleAmount.equals(0)) {
BankOrderDetailStaticDto dto = new BankOrderDetailStaticDto();
dto.setCosts(cost);
dto.setOrderAmounts(orderAmount);
dto.setSettleAmounts(settleAmount);
dto.setTransType(transType);
bankOrderDetailStaticList.add(dto);
}
}
}
// 1.消费
Map<String, Object> consumeparamMap = new HashMap<String, Object>();
consumeparamMap.put("reconDate", DateUtils.format(form.getReconDate()));
consumeparamMap.put("channelNo", form.getChannelNo());
consumeparamMap.put("sysTransType", TransType.Consume.getKey());
Long consumeTotalAmount = bankOrderCpsService.getTotalAmountByParam(consumeparamMap);
Long consumeTotalFee = bankOrderCpsService.getTotalFeeByParam(consumeparamMap);
Long consumeTotalSettle = bankOrderCpsService.getTotalSettleByParam(consumeparamMap);
if (null != consumeTotalAmount && null != consumeTotalFee && null != consumeTotalSettle) {
BankOrderDetailStaticDto bankOrderDetailStaticDto = new BankOrderDetailStaticDto();
bankOrderDetailStaticDto.setCosts(consumeTotalFee);
bankOrderDetailStaticDto.setOrderAmounts(consumeTotalAmount);
bankOrderDetailStaticDto.setSettleAmounts(consumeTotalSettle);
bankOrderDetailStaticDto.setTransType(TransType.Consume.getKey());
bankOrderDetailStaticList.add(bankOrderDetailStaticDto);
}
// 2.退货
Map<String, Object> refundparamMap = new HashMap<String, Object>();
refundparamMap.put("reconDate", DateUtils.format(form.getReconDate()));
refundparamMap.put("channelNo", form.getChannelNo());
refundparamMap.put("sysTransType", TransType.Refund.getKey());
Long refundTotalAmount = bankOrderCpsService.getTotalAmountByParam(refundparamMap);
Long refundTotalFee = bankOrderCpsService.getTotalFeeByParam(refundparamMap);
Long refundTotalSettle = bankOrderCpsService.getTotalSettleByParam(refundparamMap);
if (null != refundTotalAmount && null != refundTotalFee && null != refundTotalSettle) {
BankOrderDetailStaticDto bankOrderDetailStaticDto = new BankOrderDetailStaticDto();
bankOrderDetailStaticDto.setCosts(refundTotalFee);
bankOrderDetailStaticDto.setOrderAmounts(refundTotalAmount);
bankOrderDetailStaticDto.setSettleAmounts(refundTotalSettle);
bankOrderDetailStaticDto.setTransType(TransType.Refund.getKey());
bankOrderDetailStaticList.add(bankOrderDetailStaticDto);
}
// 3.线下退货
Map<String, Object> refundOfflineparamMap = new HashMap<String, Object>();
refundOfflineparamMap.put("reconDate", DateUtils.format(form.getReconDate()));
refundOfflineparamMap.put("channelNo", form.getChannelNo());
refundOfflineparamMap.put("sysTransType", TransType.Refund_Offline.getKey());
Long refundOfflineTotalAmount = bankOrderCpsService.getTotalAmountByParam(refundOfflineparamMap);
Long refundOfflineTotalFee = bankOrderCpsService.getTotalFeeByParam(refundOfflineparamMap);
Long refundOfflineTotalSettle = bankOrderCpsService.getTotalSettleByParam(refundOfflineparamMap);
if (null != refundOfflineTotalAmount && null != refundOfflineTotalFee && null != refundOfflineTotalSettle) {
BankOrderDetailStaticDto bankOrderDetailStaticDto = new BankOrderDetailStaticDto();
bankOrderDetailStaticDto.setCosts(refundOfflineTotalFee);
bankOrderDetailStaticDto.setOrderAmounts(refundOfflineTotalAmount);
bankOrderDetailStaticDto.setSettleAmounts(refundOfflineTotalSettle);
bankOrderDetailStaticDto.setTransType(TransType.Refund_Offline.getKey());
bankOrderDetailStaticList.add(bankOrderDetailStaticDto);
}
// 4.快退
Map<String, Object> refundSpecialparamMap = new HashMap<String, Object>();
refundSpecialparamMap.put("reconDate", DateUtils.format(form.getReconDate()));
refundSpecialparamMap.put("channelNo", form.getChannelNo());
refundSpecialparamMap.put("sysTransType", TransType.Refund_Special.getKey());
Long refundSpecialTotalAmount = bankOrderCpsService.getTotalAmountByParam(refundSpecialparamMap);
Long refundSpecialTotalFee = bankOrderCpsService.getTotalFeeByParam(refundSpecialparamMap);
Long refundSpecialTotalSettle = bankOrderCpsService.getTotalSettleByParam(refundSpecialparamMap);
if (null != refundSpecialTotalAmount && null != refundSpecialTotalFee && null != refundSpecialTotalSettle) {
BankOrderDetailStaticDto bankOrderDetailStaticDto = new BankOrderDetailStaticDto();
bankOrderDetailStaticDto.setCosts(refundSpecialTotalFee);
bankOrderDetailStaticDto.setOrderAmounts(refundSpecialTotalAmount);
bankOrderDetailStaticDto.setSettleAmounts(refundSpecialTotalSettle);
bankOrderDetailStaticDto.setTransType(TransType.Refund_Special.getKey());
bankOrderDetailStaticList.add(bankOrderDetailStaticDto);
}
// 5.托收
Map<String, Object> entrustAcceptparamMap = new HashMap<String, Object>();
entrustAcceptparamMap.put("reconDate", DateUtils.format(form.getReconDate()));
entrustAcceptparamMap.put("channelNo", form.getChannelNo());
entrustAcceptparamMap.put("sysTransType", TransType.Entrust_Accept.getKey());
Long entrustAcceptTotalAmount = bankOrderCpsService.getTotalAmountByParam(entrustAcceptparamMap);
Long entrustAcceptTotalFee = bankOrderCpsService.getTotalFeeByParam(entrustAcceptparamMap);
Long entrustAcceptTotalSettle = bankOrderCpsService.getTotalSettleByParam(entrustAcceptparamMap);
if (null != entrustAcceptTotalAmount && null != entrustAcceptTotalFee && null != entrustAcceptTotalSettle) {
BankOrderDetailStaticDto bankOrderDetailStaticDto = new BankOrderDetailStaticDto();
bankOrderDetailStaticDto.setCosts(entrustAcceptTotalFee);
bankOrderDetailStaticDto.setOrderAmounts(entrustAcceptTotalAmount);
bankOrderDetailStaticDto.setSettleAmounts(entrustAcceptTotalSettle);
bankOrderDetailStaticDto.setTransType(TransType.Entrust_Accept.getKey());
bankOrderDetailStaticList.add(bankOrderDetailStaticDto);
}
}