Commit 68473987 authored by libin's avatar libin

租车订单统计

parent cb33afa0
......@@ -89,7 +89,7 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
}
}
//创建剩余状态数据
List stisticsActiveState = ordersMap.isEmpty() ? Collections.EMPTY_LIST : Lists.newArrayList(ordersMap.keySet());
List stisticsActiveState = ordersMap==null ? Collections.EMPTY_LIST : Lists.newArrayList(ordersMap.keySet());
List<OrderMemberReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate, stisticsActiveState, StatisticsStatusEnum.DEFAULT_COMPANY);
orderMemberReceivedStatisticsList.addAll(otherStatisticsStateGroupList);
//保存
......
......@@ -36,7 +36,6 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
private final BaseOrderBiz baseOrderBiz;
private final OrderAccountBiz orderAccountBiz;
private final VehicleFeign vehicleFeign;
private final String NO_PAY_STATE_STR = String.format("%s%d", "-", StatisticsStatusEnum.NO_PAY_WAY);
private final int PAY_ORDER = 101;
/**
......@@ -57,14 +56,16 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
*/
public void orderRentVehicleReceivedStatistics(Date startDate, Date endDate) {
List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = new ArrayList<>();
List<String> stisticsActiveState = new ArrayList<>();
//根据租车订单类型 时间查询
List<OrderDTO> orderDTOS = baseOrderBiz.selectOrdersByTypeAndTime(Arrays.asList(StatisticsStatusEnum.ORDER_RENT_VEHICLE_TYPE), startDate, endDate);
//数据处理 状态组合
Map<String, Long> stateGroupMap = orderDTOS.stream().peek(x -> {
//数据处理 状态组合 按支付状态分组 而后按组合状态
Map<Boolean, Map<String, List<OrderDTO>>> stateGroupMap = orderDTOS.stream().peek(x -> {
x.setStateGroup(String.format("%d-%d-%d-%d", x.getCompanyId(), x.getOrderOrigin(), x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY : x.getPayWay(), x.getStatus()));
stisticsActiveState.add(x.getStateGroup());
})
.collect(Collectors.groupingBy(OrderDTO::getStateGroup, Collectors.counting()));
.collect(Collectors.partitioningBy(x -> Objects.isNull(x.getPayWay()), Collectors.groupingBy(OrderDTO::getStateGroup, Collectors.toList())));
//订单账目信息
List<OrderAccountBo> orderAccountBoList = orderAccountBiz.selectByDate(startDate, endDate);
......@@ -72,7 +73,7 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
Map<String, List<OrderAccountBo>> ordersMap = orderAccountBoList.stream().peek(x -> {
x.setStateGroup(String.format("%d-%d-%d-%d", x.getCompanyId(), x.getOrderOrigin(), x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY : x.getPayWay(), x.getStatus()));
}).collect(Collectors.groupingBy(OrderAccountBo::getStateGroup, Collectors.toList()));
//已经支付单
Set<Map.Entry<String, List<OrderAccountBo>>> ordersSet = ordersMap.entrySet();
for (Map.Entry<String, List<OrderAccountBo>> orderEntry : ordersSet) {
String orderKey = orderEntry.getKey();
......@@ -89,40 +90,59 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
}
}
orderRentVehicleReceivedStatistics.setTotalAmount(totalAmount.subtract(refundAmount));
Long totalQuantity = stateGroupMap == null ? 0L : stateGroupMap.get(orderKey) == null ? 0L : stateGroupMap.get(orderKey);
Long totalQuantity = stateGroupMap == null ? 0L : stateGroupMap.get(Boolean.TRUE) == null ? 0L : stateGroupMap.get(Boolean.TRUE).get(orderKey)==null?0:stateGroupMap.get(Boolean.TRUE).get(orderKey).size();
orderRentVehicleReceivedStatistics.setTotalQuantity(totalQuantity.intValue());
orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatistics);
}
//未支付单
List<BigDecimal> noPayOrdersPrices = orderDTOS.stream().filter(x -> x.getPayWay() != null).map(OrderDTO::getRealAmount).collect(Collectors.toList());
BigDecimal totalNoPayAmount = CollectionUtils.isEmpty(noPayOrdersPrices) ? BigDecimal.ZERO : noPayOrdersPrices.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
int totalNoPayOrderQuantity = CollectionUtils.isEmpty(noPayOrdersPrices) ? 0 : noPayOrdersPrices.size();
List<OrderRentVehicleReceivedStatistics> noPayOrderRentVehicleStatisticsList = createNoPayOrderRentVehicleStatisticsList(startDate, stateGroupMap.get(Boolean.FALSE));
orderRentVehicleReceivedStatisticsList.addAll(noPayOrderRentVehicleStatisticsList);
//查询分公司ids
List<Integer> companyIds = vehicleFeign.findCompanyIdsByAreaId(null);
//创建剩余状态组合的租车统计对象
List stisticsActiveState = ordersMap.isEmpty() ? Collections.EMPTY_LIST : Lists.newArrayList(ordersMap.keySet());
List<OrderRentVehicleReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate, stisticsActiveState, companyIds, totalNoPayAmount, totalNoPayOrderQuantity);
List<OrderRentVehicleReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate, stisticsActiveState, companyIds);
orderRentVehicleReceivedStatisticsList.addAll(otherStatisticsStateGroupList);
//保存
insertMemberReceivedStatisticsBatch(orderRentVehicleReceivedStatisticsList);
}
/**
*
* @param startDate 时间
* @param noPayOrdersMap 未支付单map
* @return
*/
private List<OrderRentVehicleReceivedStatistics> createNoPayOrderRentVehicleStatisticsList(Date startDate,Map<String, List<OrderDTO>> noPayOrdersMap) {
List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = new ArrayList<>();
if (noPayOrdersMap==null || noPayOrdersMap.isEmpty()){
return orderRentVehicleReceivedStatisticsList;
}
Set<Map.Entry<String, List<OrderDTO>>> noPayOrderSet = noPayOrdersMap.entrySet();
for (Map.Entry<String, List<OrderDTO>> noPayOrderEntry : noPayOrderSet) {
String noPayOrderStateGroup = noPayOrderEntry.getKey();
List<OrderDTO> noPayOrders = noPayOrderEntry.getValue();
BigDecimal totalNoPayAmount = noPayOrders.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, noPayOrderStateGroup, new OrderRentVehicleReceivedStatistics());
orderRentVehicleReceivedStatistics.setTotalAmount(totalNoPayAmount);
orderRentVehicleReceivedStatistics.setTotalQuantity(noPayOrders.size());
orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatistics);
}
return orderRentVehicleReceivedStatisticsList;
}
/**
* 创建剩余状态数据
*
* @param startDate 时间
* @param statisticsStateGroups 状态组合 集合
* @param companyIds 公司ids
* @param totalNoPayAmount 未支付金额
* @param totalNoPayOrderQuantity 未支付订单数
* @return
*/
private List<OrderRentVehicleReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate,
List<String> statisticsStateGroups,
List<Integer> companyIds,
BigDecimal totalNoPayAmount,
Integer totalNoPayOrderQuantity) {
List<Integer> companyIds) {
List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = new ArrayList<>();
//获取剩余状态组合
......@@ -132,31 +152,14 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
//统计对象的生成
otherStatisticsStateGroup.parallelStream().map(stateGroup -> {
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup, ObjectUtil.cloneByStream(orderRentVehicleReceivedStatistics));
orderRentVehicleReceivedStatisticsClone = wrapOrderRentVehicleReceivedStatistics(stateGroup, totalNoPayAmount, totalNoPayOrderQuantity, orderRentVehicleReceivedStatisticsClone);
orderRentVehicleReceivedStatisticsClone.setTotalAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatisticsClone.setTotalQuantity(0);
orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatisticsClone);
return orderRentVehicleReceivedStatisticsClone;
}).count();
return orderRentVehicleReceivedStatisticsList;
}
/**
* @param stateGroup 状态组合
* @param totalNoPayAmount 未支付金额
* @param totalNoPayOrderQuantity 未支付订单量
* @param orderRentVehicleReceivedStatistics 租车统计对象
* @return
*/
private OrderRentVehicleReceivedStatistics wrapOrderRentVehicleReceivedStatistics(String stateGroup, BigDecimal totalNoPayAmount, Integer totalNoPayOrderQuantity, OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics) {
if (stateGroup.contains(NO_PAY_STATE_STR)) {
orderRentVehicleReceivedStatistics.setTotalAmount(totalNoPayAmount);
orderRentVehicleReceivedStatistics.setTotalQuantity(totalNoPayOrderQuantity);
} else {
orderRentVehicleReceivedStatistics.setTotalAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatistics.setTotalQuantity(0);
}
return orderRentVehicleReceivedStatistics;
}
/**
* 批量插入数据 mysql sql语句默认不能超过4M
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment